S}nav kapal} kitap, s|re 100 dakika.1. ve 2. Sorular 40, 3. Soru 20 puan. Ba~ar}lar
1. Verilen bir dizi |zerinde diziyi ikiye bvlen bir nokta bulman}z isteniyor. ]kiye bvlen bu noktada sol ve sap pargalar}n toplamlar} birbirine e~it olmal}.
Vrnepin 1 5 8 2 6 2 8 dizisi igin 1 5 8 2 | 6 2 8 (1+5+8+2 = 16 ve 6+2+8 = 16)
2 4 3 1 1 1 1 1 1 2 1 => 2 4 3 | 1 1 1 1 1 1 2 1 ( 2+4+3 = 9 ve 1+1+1+1+1+1+2+1 = 9)
Yukar}da tan}m} yap}lan bvlme i~lemini yapan bir fonksiyon yaz}n}z. (fonksiyonunuz diziyi ve boyutunu parametre olarak alacak ve bvl|m noktas}n} deper olarak dvnd|recektir, ~ayet yukar}daki gibi bir durum bulunam}yorsa sonug olarak 0 dvnd|rmelidir. )
#include <stdio.h>
#include <conio.h>
int f(int *p,int size){
int sol=1;
int sag=size-2;
int toplamsol=p[0];
int toplamsag=p[size-1];
for(int i =0;i<size;i++){
if(toplamsol==toplamsag&&sol==sag+1){
return sol;
}
if(toplamsol>toplamsag)
{
toplamsag+=p[sag--];
}
else{
toplamsol+=p[sol++];
}
printf("\n %d (%d) == (%d) %d",toplamsol,sol,sag,toplamsag);
}
return 0;
}
int main(){
int a[]={2,4,3,1,1,1,1,1,1,2,1};
printf("sonuc:%d",f(a,11));
getch();
}
1. Verilen bir dizi |zerinde ard}~}k toplamlar}n karesinin, ard}~}k toplamlara e~it oldupu noktalar}n bulunmas} isteniyor.
Vrnepin 1 2 1 5 1 6 dizisi igin sonuglar:
1,1 ; 2,4 ; 3,6
Olarak bulunmal}d}r. G|nk| 12=1 dolay}s}yla ilk say}n}n karesi ilk say}ya kadar olan say}lar}n toplam}. ]lk iki say}n}n toplam} 3 ve karesi 9 bu deper de ilk 4 say}n}n toplam}. Benzer ~ekilde ilk 3 say}n} toplam}n}n karesi 16 bu deper de ilk 6 say}n}n toplam} olmaktad}r.
Kodunuz yukar}daki ~art} saplamayan bir dizi verildipinde 0 dvnd|rmelidir.
#include <stdio.h>
#include <conio.h>
int main(){
int a[]={1 ,2, 1, 5, 1, 6};
int ilk=1;
int ikinci=1;
int ilktoplam=a[0];
int ikincitoplam=a[0];
while(ikinci<7){
if(ikincitoplam==ilktoplam*ilktoplam)
printf("\n<%d,%d>",ilk,ikinci);
if(ikincitoplam>ilktoplam*ilktoplam){
ilktoplam+=a[ilk++];
}
else{
ikincitoplam+=a[ikinci++];
}
}
getch();
}
2. Klavyeden ikilik tabanda bir say}y}, dizgi (String) olarak okuyup bu say}n}n harf kar~}l}p}n} bulan kod yaz}n}z. (gerekli gvrd|p|n|z yerlerde fonksiyon yazarak kullan}n}z)
Vrnek gal}~ma:
L|tfen ikilik tabanda bir say} giriniz:
1100001
Cevap : a
Kod string olarak okunan 1100001 yaz}s}n} vnce onluk sisteme gevirip cevap olarak 97 bulmu~ sonra ekrana 97 say}s}n}n ascii kar~}l}p} olan a harfini basm}~t}r.
1100001 -> 97 -> a
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main(){
printf("Bir say} giriniz:");
char sayi[100];
scanf("%s",sayi);
int say=0;
int sonuc=0;
printf(" \ni~lenen string : %s",sayi);
while(sayi[say]!='\0'){
sonuc = sonuc*2 + sayi[say]-48;
printf("\n%c %d ",sayi[say],sonuc);
say++;
}
printf("\nsonuc: %c",sonuc);
getch();
}
3. A~ap}daki kodun ne yapt}p}n} ag}klay}n}z:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int f(int *p){
if(*p==0)
return 1;
int *q;
int *r=(int *)malloc(sizeof(int)*1);
q=p;
*q=*q+5;
*r=*q;
*r=*r-6;
return f(r)+1;
}
int main(){
int a=10;
printf("%d",f(&a));
getch();
}
Sonug : 11dir