EEM-119 Algoritma ve Programlama I Dersi
2022-2023 Güz Dönemi Ders 12
Fonksiyonlar - local - global - static değişkenler
#include <stdio.h>
int rakam_topla(int sayi){
// sayi ve toplam degiskeni local degiskendir.
int toplam=0;
while(sayi>0){
toplam += sayi%10;
sayi /= 10;
}
return toplam;
}
int main(){
//x local degiskendir.
int x;
printf("rakamlarini toplamak icin bir sayi giriniz: ");
scanf("%d",&x);
printf("rakamlarin toplami: %d\n", rakam_topla(x));
printf("girilen sayi: %d",x);
}
rakamlarini toplamak icin bir sayi giriniz: 123456 rakamlarin toplami: 21 girilen sayi: 123456
#include <stdio.h>
void f1(void){
int i=0;
printf("%d\n",i++);
}
int main(){
f1();
f1();
f1();
}
0 0 0
#include <stdio.h>
void f1(void){
static int i=0;
printf("%d\n",i++);
}
int main(){
f1();
f1();
f1();
//i degerini korudugu halde i'nin degerine
// baska fonksiyonda dogrudah ulasilamamaz
// printf("%d",i);
}
0 1 2
- Yığın (stack) örneği
#include <stdio.h>
#define YIGIN_BOYUTU 10
//asagidaki degiskenler global degiskenlerdir.
int yigin[YIGIN_BOYUTU];
int en_ust=0;
void yigini_bosalt(void){
en_ust=0;
}
int yigin_bosmu(void){
return en_ust==0;
}
int yigin_tam_dolumu(void){
return en_ust==YIGIN_BOYUTU;
}
//stack overflow
void yigin_tasmasi(void){
printf("Yigin tasmasi, veri eklenemedi");
}
//stack underflow
void yigin_asagi_tasmasi(void){
printf("Yigin asagi tasmasi tasmasi, veri dondurulemedi.");
}
void yigina_ekle(int i){
//if(!yigin_tam_dolumu())
if(yigin_tam_dolumu()==0){
yigin[en_ust]=i;
en_ust++;
}
else
yigin_tasmasi();
}
int yigindan_cek(void){
if(!yigin_bosmu())
return yigin[en_ust--];
else
yigin_asagi_tasmasi();
return 0;
}
void yigin_icerigi_goster(void){
int i;
for(i=en_ust-1;i>=0;i--)
printf("%d: %d\n",i,yigin[i]);
}
int main(){
yigina_ekle(10);
yigina_ekle(20);
yigina_ekle(30);
yigin_icerigi_goster();
yigindan_cek();
yigindan_cek();
yigin_icerigi_goster();
yigindan_cek();
yigin_icerigi_goster();
yigindan_cek();
yigin_icerigi_goster();
}
2: 30 1: 20 0: 10 0: 10 Yigin asagi tasmasi tasmasi, veri dondurulemedi.
- * ile dikdörtgen şekli elde etmek
#include <stdio.h>
int main(){
int satir, sutun,i,j;
printf("dikdortgen icin satir ve sutun sayisini giriniz:");
scanf("%d%d",&satir,&sutun);
for(i=0;i<satir;i++){
for(j=0;j<sutun;j++)
printf("*");
printf("\n");
}
}
dikdortgen icin satir ve surun sayisini giriniz: 4 5 ***** ***** ***** *****
Aşağıdaki program hatalı.
#include <stdio.h>
int i;
void satir_yaz(int n){
for(i=0;i<n;i++)
printf("*");
}
void tum_satirlari_yaz(int n){
for(i=0;i<n;i++){
satir_yaz(n);
printf("\n");
}
}
int main(){
tum_satirlari_yaz(5);
}
*****
Programın düzeltilmiş hali
#include <stdio.h>
int i;
void satir_yaz(int n){
for(i=0;i<n;i++)
printf("*");
}
void tum_satirlari_yaz(int n){
int i;
for(i=0;i<n;i++){
satir_yaz(n);
printf("\n");
}
}
int main(){
tum_satirlari_yaz(5);
}
***** ***** ***** ***** *****
- Local global değilken örnekler
#include <stdio.h> void f(int i){ i++; printf("f fonk icinde inin degeri: %d\n",i); } int main(){ int i=10; printf("1-main fonk icinde inin degeri: %d\n",i); f(i); printf("2-main fonk icinde inin degeri: %d\n",i); }
1-main fonk icinde inin degeri: 10 f fonk icinde inin degeri: 11 2-main fonk icinde inin degeri: 10
#include <stdio.h>
int i=15;
void f(int i){
i++;
printf("f fonk icinde inin degeri: %d\n",i);
}
int main(){
printf("1-main fonk icinde inin degeri: %d\n",i);
f(i);
printf("2-main fonk icinde inin degeri: %d\n",i);
}
1-main fonk icinde inin degeri: 15 f fonk icinde inin degeri: 16 2-main fonk icinde inin degeri: 15
#include <stdio.h>
int i=15;
void f(){
i++;
printf("f fonk icinde inin degeri: %d\n",i);
}
int main(){
printf("1-main fonk icinde inin degeri: %d\n",i);
f();
printf("2-main fonk icinde inin degeri: %d\n",i);
}
1-main fonk icinde inin degeri: 15 f fonk icinde inin degeri: 16 2-main fonk icinde inin degeri: 16
#include <stdio.h>
int i=15;
void f(){
i++;
printf("f fonk icinde inin degeri: %d\n",i);
}
int main(){
int i=20;
printf("1-main fonk icinde inin degeri: %d\n",i);
f();
printf("2-main fonk icinde inin degeri: %d\n",i);
}
1-main fonk icinde inin degeri: 20 f fonk icinde inin degeri: 16 2-main fonk icinde inin degeri: 20
#include <stdio.h>
int i=20;
void f(void){
static i = 15;
i++;
printf("f fonk icinde inin degeri: %d\n",i);
}
int main(){
printf("1-main fonk icinde inin degeri: %d\n",i);
f();
printf("2-main fonk icinde inin degeri: %d\n",i);
f();
printf("3-main fonk icinde inin degeri: %d\n",i);
}
1-main fonk icinde inin degeri: 20 f fonk icinde inin degeri: 16 2-main fonk icinde inin degeri: 20 f fonk icinde inin degeri: 17 3-main fonk icinde inin degeri: 20
#include <stdio.h>
int main(){
int i=10, j=20;
printf("i: %d j:%d\n",i, j);
if(j>i){
int temp;
temp = i;
i=j;
j=temp;
printf("1-temp: %d\n",temp);
}
printf("i: %d j:%d\n",i, j);
// asagidaki satirhataya sebep olur.
//printf("temp: %d",temp);
}
i: 10 j:20 1-temp: 10 i: 20 j:10
- Zaman fonksiyonunun kullanımı
#include <stdio.h>
#include <time.h>
int main(){
unsigned long saniye;
saniye=time(NULL);
printf("%ld",saniye);
}
1671692515
- rastgele fonksiyonunun kullanımo
#include <stdio.h>
#include <stdlib.h>
int main(){
int i,n=10;
srand(1000);
for(i=0;i<n;i++)
printf("%d ",rand()%100);
printf("\n");
srand(1001);
for(i=0;i<n;i++)
printf("%d ",rand()%100);
}
90 79 13 98 4 41 3 70 68 55 32 51 51 92 54 90 13 69 20 6
- rastgele fonksiyonunun zaman fonksiyonu ile kullanımı
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int i,n=10;
unsigned long saniye;
saniye=time(NULL);
srand(saniye);
for(i=0;i<n;i++)
printf("%d ",rand()%100);
}
25 68 73 82 74 77 87 84 76 93
- syaı tahmin oyunu
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//sayı tahmin oyunu
#define MAX_SAYI 100
int gizli_sayi;
void rastgele_sayi_uret(void){
unsigned long saniye;
saniye=time(NULL);
srand(saniye);
gizli_sayi=rand()%MAX_SAYI;
}
void sayi_tahmin_et(void){
int tahmin, tahmin_sayisi=0;
for(;;){
tahmin_sayisi++;
printf("Tahmininizi giriniz: ");
scanf("%d",&tahmin);
if(tahmin==gizli_sayi){
printf("%d. tahmininizde gizli sayiyi buldunuz.", tahmin_sayisi);
break;
}
else
if(tahmin < gizli_sayi)
printf("tahmini arttir.\n");
else
printf("tahmini azalt.\n");
}
}
int main(){
rastgele_sayi_uret();
sayi_tahmin_et();
}