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