Ege University Electrical and Electronics Engineering Introduction to Computer Programming Laboratory Lab 11 - Pointers 1) Pointer syntax. Declare a variable and a pointer with same data type. Assign variable s address to pointer. Use the pointer to receive input to the variable and output the variable s value. 1) Pointer yazım kuralları. Aynı data tipinde bir değişken ve bir pointer tanımlayın. Pointer a değişkekin adresini atayın. Pointer ı kullanarak değişkene değer girişi yapın, yine pointer kullanarak değişkenin değerini çıktı olarak gösterin. float sayi; float * p; p = &sayi; printf("deger girin:"); scanf("%f", p); printf("girilen deger:%f\n", *p); printf("sayinin'nin adresi:\t%p\n", &sayi); printf("p'nin degeri:\t\t%p\n", p); 2) Value swapping. Write a function that takes two variables and swaps their values. 2) Değer değiş tokuşu. Aldığı iki değişkein değerlerini değiş tokuş eden bir fonksiyon yazın. void floatswap(float*f1, float*f2) float temp; temp = *f1; *f1 = *f2; *f2 = temp; float sayi1, sayi2; printf("1.sayiyi girin:"); scanf("%f", &sayi1); printf("2.sayiyi girin:"); scanf("%f", &sayi2); printf("degistokustan once\n");
printf("1.sayi:%f\n", sayi1); printf("2.sayi:%f\n", sayi2); floatswap(&sayi1, &sayi2); printf("degistokustan sonra\n"); printf("1.sayi:%f\n", sayi1); printf("2.sayi:%f\n", sayi2); 3) Integer division. Write a function that divides an integer to another integer. Return both dividend and remainder. 3) Tamsayı bölmesi. Bir tamsayının diğer bir tamsayıya bölümünü hesaplayan bir fonksiyon yazın. Hem bölümü hem kalanı dönün. void tamsayibolmesi(int bolunen, int bolen, int*bolum, int*kalan) *bolum = bolunen / bolen; *kalan = bolunen % bolen; int sayi1, sayi2, sonuc1, sonuc2; printf("boluneni girin:"); scanf("%d", &sayi1); printf("boleni girin:"); scanf("%d", &sayi2); tamsayibolmesi(sayi1, sayi2, &sonuc1, &sonuc2); printf("bolum:%d\n", sonuc1); printf("kalan:%d\n", sonuc2); 4) Pointers and arrays. Declare a 10 element array and initialize elements using int rand(void) function from stdlib.h library. Display the array. Use pointer for all operations. 4) Pointer lar ve diziler. 10 elemanlı bir dizi tanımlayın ve stdlib.h kütüphanesinden int rand(void) fonksiyonunu kullanarak dizinin elemanlarına ilk değer verin. Diziyi gösterin. Tüm işlemler için pointer kullanın. #include <stdlib.h>
#include <time.h> #define ARRSIZE 10 int a, ary[arrsize]; srand(time(null)); for(a=0; a<arrsize; a++) *(ary+a) = rand(); for(a=0; a<arrsize; a++) printf("%d %d\n", a, *(ary+a)); 5) Multidimensional array. Receive a 3x3 multidimensional array as input. Find the largest value entered and display its indices. Output the multidimensional array. 5) Çok boyutlu dizi. Girdi olarak 3x3 boyutunda bir çok boyutlu dizi alınsın. Çok boyutlu dizideki en küçük elemanı bulun ve indislerini çıktı olarak gösterin. Çok boyutlu diziyi çıktı olarak gösterin. #define DZSATIR 3 #define DZSUTUN 3 int dz[dzsatir][dzsutun], satir, sutun, minsatir, minsutun; for(satir=0; satir<dzsatir; satir++) for(sutun=0; sutun<dzsutun; sutun++) printf("(%d x %d) indisli elemani girin:", satir+1, sutun+1); scanf("%d", &dz[satir][sutun]); for(satir=0; satir<dzsatir; satir++) for(sutun=0; sutun<dzsutun; sutun++) if(satir==0 && sutun == 0)
minsatir = satir; minsutun = sutun; else if(dz[satir][sutun] < dz[minsatir][minsutun]) minsatir = satir; minsutun = sutun; printf("en kucuk eleman %d x %d indisinde %d\n", minsatir, minsutun, dz[minsatir][minsutun]); 6) Pointers and strings. Receive a word as input. Reverse the word, capitalize its letters and save into another string. Display both first and last strings. 6) Pointer lar ve string ler. Bir kelimeyi girdi olarak alın. Kelimeyi ters çevirin, harflerini büyütün ve başka bir string e saklayın. İlk ve son string i çıktı olarak gösterin. #include <string.h> #include <ctype.h> #define STRSIZE 32 /*************************************** **************************************** bu fonksiyonu farkli bir yoldan implement etmek icin labda yapilan implementasyonu comment-out ettim. void fn(char*in, char*out) int inlen = strlen(in); for(inlen--; inlen >= 0; inlen--) *out = toupper(*(in+inlen)); out++; *out = '\0'; **************************************** ***************************************/
void fn(char*in, char*out) char*ters_in; ters_in = in + strlen(in) - 1; while(ters_in >= in) *out = toupper(*ters_in); out++; ters_in--; *out = '\0'; char instr[strsize], outstr[strsize]; printf("enter a string: "); scanf("%s", instr); fn(instr, outstr); printf("%s", outstr); 7) Roots of second order polynomial. Write a function that computes roots of a second order polynomial, ax 2 +bx+c=0, using values of a, b, c. Formulas: Hint: You may want to store real part and imaginary part of a root in different variables, even if value is equal to zero. 7) İkinci derece polinomun kökleri. ax 2 +bx+c=0 tipinde bir ikinci derece polinomun köklerini, a, b,c değerlerini kullanarak hesaplayan bir fonksiyon yazın. Formüller: İpucu: Bir kökün reel ve sanal kısımlarını farklı değişkenlerde saklamak gerekebilir; değeri sıfır olsa bile. #include <math.h> #define STRSIZE 32 void roots(double a, double b, double c, double*re1, double*im1, double*re2, double*im2) double delta = pow(b, 2) - 4*a*c; if(delta>=0) *re1 = -b/2/a + sqrt(delta)/2/a; *im1 = 0;
*re2 = -b/2/a - sqrt(delta)/2/a; *im2 = 0; else *re1 = -b/2/a; *im1 = sqrt(fabs(delta))/2/a; *re2 = -b/2/a; *im2 = -sqrt(fabs(delta))/a/a; double a, b, c, re_x1, im_x1, re_x2, im_x2; printf("a b c katsayilarini girin:\n"); scanf("%lf %lf %lf", &a, &b, &c); roots(a, b, c, &re_x1, &im_x1, &re_x2, &im_x2); printf("x1:\t(%lf) + j(%lf)\n", re_x1, im_x1); printf("x2:\t(%lf) + j(%lf)\n", re_x2, im_x2);