You are on page 1of 15

C Ders Notlar Turbo C++ yapsal ve tanabilir bir dildir.

Standart turbo C++ komutlaryla yazlan bir program zerinde hibir deiiklik yapmadan herhangi bir iletim sisteminde (MS_DOS, UNIX,XENIX) derleyerek kullanabilirsiniz.Bu zellik Turbo C++ den baka hibir programlama dilinde yoktur.Deiik tipteki bilgisayarlara ve iletim sistemlerine program yazan profesyonel programclar iin bir avantajdr. Turbo C++ yapsal dillerde kod ve veri, bellek ierisinde ayr ayr yerlerde tutulurlar.Daha dorusu bir ilem yaplrken sadece o anda gerekli olan deiken ve datalar bellei kullanrlar.Dierleri dikkate alnmaz.Yapsal dillerde yazlan programlar daha sonra rahata deitirilebilirler.Bu programn ileyiini bozmaz.nk program alt programlardan olumutur.Ve GOTO tr dallanmalar olmasna gerek olmadndan yapsallk korunur.Turbo C++ dilinin kullanlabilecei programlama alanlarna bir snrlama konulamaz.Her trl konunun programlanmasnda C++ dilinden yararlanlabilir.Ancak C++ programlama dili btn dillerin zelliklerini iine ald iin program mantnn ok iyi kavranmas gerekir.Program ileyi mekanizmas kavrandnda Turbo C++ ile yazlan btn programlarn kullanln kavrayabilirsiniz. C++ dilinde deikenler,sabitler ve operatrler ok nemlidir. DEKEN, SABT, ETKET ve OPERATRLER C++ dilinde deiken, sabit ve fonksiyon isimleri kullanc tarafndan tanmlanrlar. Tanmlanan isimler bir karakterden oluabilecei gibi birden fazla karakterden de oluabilir. smin ilk karakteri mutlaka alfabetik karakter olmaldr.sim birden fazla karakterden meydana geliyorsa eer karakterlerin arasnda boluk braklmaz.lk karakter dndaki karakterler nmerik olabilir .simleri kullanrken aralarda alt izgi yani taban tire kullanlabilir. C++ programlama dilinde isimlerin ilk 32 karakteri belirleyici olur.Yani iki ismi ilk 32 karakteri aynysa bundan sonraki karakterler farkl olsa bile C++ dili iki deikenide ayn kabul eder.Bu hatal bir durumdur. C++ dilinde komutlar deiken, sabit, etiket, fonksiyon ismi olarak kullanlamazlar. DEKEN TPLER=C++ programlama dili ierisinde kullanlan deikenler mutlaka programn banda tanmlanmaldrlar.C++ programlama dilinde 5 temel veri tipi vardr. 1-KARAKTER 2-TAMSAYI 3-KAYAN NOKTALI 4-BUYUK KAYAN NOKTALI 5-VOID (CHARACTER) (INTEGER) (FLOATING POINT) (FLOATING DOUBLE) (BIG)

Bu 5 veri program ierisinde srasyla CHAR, INT, FLOAT, DOUBLE, VOID ksaltmalaryla kullanlr. CHAR tipi deikenler ASCII kod veya A, B, C gibi karakterlerin tutulmasnda kullanlrlar. INT tipi deikenler tamsay ve belirli snrlar arasndaki bykle sahip saylar tutarlar. FLOAT ve DOUBLE tipi deikenler kesirli veya tamsay tipinden daha geni saylar tutmakta kullanlrlar. FLOAT ve DOUBLE tipi deikenler arasndaki fark tuttuklar saylarn deiik byklkte olmasdr.DOUBLE tipi deiken FLOAT tipi deikenlerin tuttuu saylarn yaklak 10 kat byklnde say tutabilirler. VOID tipi deikenler hibir deer tutmazlar. rnekler: CHAR OGRENCI_NOTU; CHAR HAVA_SICAKLIGI; 1

INT STOK_MIKTARI; INT OGRENCI_NO; FLOAT PI_SAYISI; Deikenlerin max tutabildikleri karakter saylar; CHAR INT FLOAT DOUBLE = = = = (-128)(127) (-32768)(32767) 3,4E-38...3,4E+38 1,7E-308...1,17E+308

TP DETRCLER=Temel deiken tiplerinin nne eklenen ve bunlarn zellikleriyle snrlarn deitiren kelimelere tip deitiricileri yani (TYPE MODFER) denir.Tip deitiriciler.SIGNED, UNSIGNED, SHORT, LONG Turbo C++ de UNSIGNED,SHORT ve LONG tip dzenleyicilerde tanmlanacak integer saylar ksaca UNSIGNED, SHORT ve LONG kelimeleriyle de tanmlanabilirler. RNEK= UNSIGNED X;UNSIGNED X; STATC TP DEKENLER=Herhangi bir deiken static tip deitirici kelimesi kullanlarak tanmlanrsa iinde tanmland fonksiyon ana program tarafndan birden fazla arlrsa her arlnda daha nce iinde bulunan deeri muhafaza eder. RNEK= SATIC INT X; REGISTER TP DEKENLER=Bir deiken register tipi olarak tanmlanrsa bu deiken RAM bellekte deil microilemcinin registerinde tutulur.Bu yzden register tipi deikenlerin kullanld program dierlerine gre daha hzl alr.nk eriim daha fzl olur. RNEK= REGISTER INT X; DEKENLERN TANIMLANMASI=Tip deikenler Turbo C++ de tanml olan deiken tiplerinden herbiridir.Eer ayn satrda birden fazla deiken kullanlacaksa aralarna virgl konulur. RNEK= INT X, Y, Z; Deikenler programn farkl yerinde tanmlanabilirler. Birincisi MAIN{} fonksiyonundan nce ; Burada tanmlanan deikenler global deikenler olarak adlandrlrlar.Ve programda yer alan MAIN fonksiyonu dnda da kullanlabilirler. kincisi MAIN{} fonksiyonun hemen banda; Burada tanmlanan fonksiyonlar ise local deikenler olarak adlandrlrlar.ve sadece MAIN fonksiyonunda kullanlrlar. RNEK= #Include<stdio.h> int c; /* global deiken*/ main () char b; /*local deiken */

SABTLER= Sabitler programn en banda main( ) fonksiyonunun nnde tanmlanr ve program ierisinde deitirilmezler.Sabitlerin tanmnda # define indirektifi kullanlr. RNEK= #define True 1 #define False 0 #define Max 20 #define Harf a Bu rneklerde define direktifi kullanlarak programdaki sabitler tanmlanmtr.Bu tanmlamalardan sonra define Max 20 ifadesi 20 saysn ifade edecektir.Harf sabitide programn herhangi bir yerinde kullanldnda a harfini ifade edecektir. kinci bir tr sabit tanmlama ekli deikenlerin tanmland blmde tanmlanan deikene bir deer atamaktr. RNEK= int a=25; char cr=r; ARTMETKSEL OPERATRLER Operatrler lem + toplama karma * arpma / blme % Modls Blme Aritmetiksel ilemlerde toplama,karma,blme,arpma dier programlama dillerinde olduu gibidir.Ancak int tipi iki say bl operatr kullanlarak blndnde sonucun kesirli ksm retilmez.Float tipi iki say bl operatr kullanlarak blndnde sonu tam olarak retilir.Modls blme kullanldnda ise blm sonucunda kalan say verilir. NOT=Modls operatr float,double tipi deikenlerde kullanlmaz. UINARY OPERATRLER C++ dilinde dier dillerde bulunmayan UINARY operatrler tanmlanmtr.ki tane UINARY operatr mevcuttur.Bunlar ++ , -- dir. ++ operatr deikenin tuttuu sayya bir say ekler. -- operatr deikenin tuttuu saydan bir say karr. RNEK= X++ X=X+1; X-- X=X-1; Aritmetik ilemlerinde ncelik sras ++ , -- , * , / , % , + , - dr. NOT=Ayn ncelik srasna sahip operatrlerde ilem soldan saa doru yaplr. Turbo C++de kullanlan anahtar szckler; Auto Break Case Char Const double else enum extern float 3 int long register return short struct switch typedef union unsignet

Continue Defoult If

for goto static

signet sizeoff while

void volatile

C++ de kullanlan btn anahtar kelimeler ve komutlar kk harflerle yazlr.Ancak birka istisna vardr.rnein define direktifi yazlrken tanmlanan sabitler byk harfle yazlr.Yine dosyalar tanmlanrken file byk harfle yazlr.Bunun haricinde program kullanan kiiye yazlan hatrlatma metinleri byk harfle yazlabilir. HEADER DOSYALAR C++ programlama dilinde komutlar yerine getiren program rutinleri, C++ nin temel yaps iinde yer almaz.Bu nedenle programdan kullanlan komutlarn bulunduu rutinler (program paralar),#define direktifi kullanlarak ana programa dahil edilir. #include direktifi programn en banda yer alr ve programn derlenmesi aamasnda kullanlan komutlarn bulunduu rutinleri ana programa aktarr.rnein ,sin komutu argman olarak verilen radyan cinsinden bir ann sinisn hesaplar.Sin komutu , math.h isimli bir dosyann ierisinde bulunmaktadr.Bu programda sin komutu kullanlacaksa programn en banda math.h dosyasnn programa dahil edilmesi gerekir.Aksi halde program almaz. Math.h dosyas programa iki ekilde dahil edilebilir. #include<math.h> includemath.h Turbo C++ dilinde, h uzantl bu eit dosyalara HEADER dosyalar adn alr.Hangi komutun hangi header dosyalarnn iinde bulunduu ,longuage Referance ad verilen ve bir programlama diindeki btn komutlar tek tek inceleyen kitaplarda bulunmktadr.Burada, C++ programlama dilinde sk sk kullanlan baz HEADER dosyalarn isimlerini verelim. Ctype.h=Bu header dosyada, karakterlerle ilgili komutlar altran rutinler yer alr.rnein isalpha komutu ,bir karakterin alfabetik olup olmadn bulur.Bu nedenle, eer programmzda isalpha komutunu kullanacaksak, o programn banda #include<ctype.h> direktifleriyle, ctype.h dosyasn programa dahil etmemiz gerekir.Aada ctype.h header dosyasnn iinde bulunan dier baz komutlar grlyor.Bu komutlarn programda kullanlabilmesi iin programn banda ctype.h header dosyas programa dahil edilir. Isalnum Isdigit Iscntrl Isgraph Isprint ispunct isupper tolower toupper

Conio.h=Bu header dosyada programlarda ok yaygn olarak kullanlan getch ve getche komutlar bulunur. Stdlib.h=stdlib.h header dosyasnda free, malloc, realloc, atoi, atof, abs, atol, exit, lops, qsort gibi komutlar bulunur. String.h=Stringlerle ilgili ilem yapan aadaki komutlar bulunur. strcot, strchr, strcmp, strcpy, strlen, strstr, strtok. Math.h=Matematiksel ilemlerle ilgili komutlar bulunur.En yaygn olanlar sin, exp, lopon, sqrt, cos, log, pow, tandr. Time.h=Zaman ve tarih ile ilgili komutlar ierir.Bazlar ;clock, gmtime, time, ctime, localtimedir. Graphics.h=Grafiklerle ilgili komutlar ierir.Bazlar ;line, putpixel, ellipse, rectongle, circle, outtextxy. 4

Eer bir programda kullanlan komutlar deiik header dosyalarda bulunuyorsa btn ilgili header dosyalar programa dahil edilmelidir.rnein bir bir programda printf ve sin komutlar kullanlm olsun.Printf komutu stdio.h sin komutu ise math.h header dosyas altndadr.Bu nedenle programa stdio.h ve math.h header dosyar dahil edilir. #include<stdio.h> #include<math.h> Yukardaki satrlarda grld gibi stdio.h ve math.h dosyalar programa dahil edildiinde printf ve sin komutlar alacaktr. KOMUTLAR Printf=Ekran klarnda kullanlr.Program ierisinde ok fazla kullanldndan argmanlarn ok iyi bilinmesi gerekir.Argman ve k format olmayan bir printf fonksiyonu format stringi sadece bir string olarak ekrana baslr. RNEK= Printf(bu bir ekran ktsdr.); Printfin kullanmnda dier fonksiyonlarda kullanlrsa stringin ilevi deiir. Printf(\n\n\n\n.......); {25 tane \n vardr.} Bu fonksiyonda 25 adet \n kullanlmtr.Bu fonksiyon ekrann 25 satr yukar kaymasn salar.Bylelikle ekran temizlenmi olur. k Formatlar= % iaretini izleyen k formatnn iinde kullanarak deer veya deerlerin ekrana istenilen tip ve formatta baslmasn salar.Ekrana baslmak istenen deerin ne tip ve ne boyutta olaca belirlenir.Deerin formatl olarak baslmasnda flag karakterleri genilik ve hassasiyet belirleyici karakterleri kullanlr. Giri-k Karakterleri Tip Karakterleri d i o f g x p s C k Format iaretli desimal say iaretli desimal say iaretsiz oktal (sekizlik) say gerel saylar iin gerel saylar iin( ondalk ksmdaki 0 lar yazmaz) (a,b,c,d,e,f)li iaretsiz hekzadesimal say pointer tipi bilgiler iin kullanlr. string tipi bilgiler iin kullanlr. tek karakter iin kullanlr.

RNEK= #include<stdio.h> main() { int x,y; 5

x=5; y=5; printf("++x degeri=%d\n",++x); printf("y++ degeri=%d\n",y++); printf("\n"); printf("arttirmadan sonra x=%d\n",x); printf("arttirmadan sonra y=%d\n",y); } NOT=Bir arttrma ve eksiltme ilemlerinde operatrn deikenin nnde yada arkasnda kullanlmas zellikle bu deikenin bir ifade veya komutla kullanlmas durumunda deiiklik gsterir.Yukardaki satrlar altrldnda x deikenindeki 5 says nce y deikenine aktarlr.Daha sonra y deikenine aktarlr. RNEK=Blme ilemi yaptran program. #include<conio.h> #include<stdio.h> main() { float a,b,c; a=25; b=4; c=a/b; printf("a=%5.2f\n",a); printf("b=%5.2f\n",b); printf("fark=%5.2f\n",c); } RNEK=kartma yapan program. #include<stdio.h> main() { int x,y,z; x=15; y=7; z=x-y; printf("z=%d\n",z); } RNEK=Saylar ekrana formatl yazdran program. #include<stdio.h> main() { float x,y,z; x=3.45; y=67.892; z=876.439; printf("x=%8.3f\n",x); printf("y=%8.3f\n",y); printf("z=%8.3f\n",z); }

RNEK=Blme ilemi sonucunda kalan veren program. #include<stdio.h> main() { int x,y,z; x=15; y=4; z=x%y; printf("z=%d\n",z); } SCANF = Klavyeden giri yaplmasn salayan komuttur. RNEK=Klavyeden girilen saylarn toplamn bulan program. #include<stdio.h> main() { int a,b,c; printf("Birinci Sayiyi Giriniz:"); scanf("%d",&a); printf("Ikinci sayiyi giriniz:"); scanf("%d",&b); c=a+b; printf("\n"); printf("toplam=%d\n",c); } RNEK=Yar ap verilen dairenin alann bulunuz. #include<stdio.h> main() { int r; float pi,alan; pi=3.14; printf("dairenin yari apini gir="); scanf("%d",&r); alan=pi*(r*r); printf("alan=%f\n",alan); } RNEK=Stringle ilgili. include<stdio.h> main() { char ad[20]; printf("adinizi giriniz="); scanf("%s",ad); printf("\n"), printf("merhaba,%s\n",ad); }

RNEK=1den 100e kadar olan saylarn toplam. #include<stdio.h> main() { int i,toplam; toplam=0; for (i=1;i<=100;i++) { toplam=toplam+i; } printf("toplam:%d\n",toplam); } RNEK=Girilen 3 saydan byk olan bulan program. #include<stdio.h> main() { int a,b,c,buyuk; printf("a sayisini gir");scanf("%d\n",&a); printf("b sayisini gir");scanf("%d\n",&b); printf("c sayisini gir");scanf("%d\n",&c); buyuk=a; if(buyuk<b) buyuk=b; if(buyuk<c) buyuk=c; printf("buyuk sayi%d\n",buyuk); } RNEK=Girilen bir tamsaynn tek mi ift mi olduunu bulan program. #include<stdio.h> main() { int a,b; printf("a sayisini gir");scanf("%d\n",&a); b=a-(a%2); if(a==b) printf("sayi cift"); else printf("sayi tek"); } RNEK=1-100 arasndaki saylarn tek ve ift olanlarnn ayr ayr toplamlar. #include<stdio.h> main() { int ttek,tcift,sayac; ttek=0;tcift=0; for(sayac=1;sayac<100;sayac=sayac+2) { ttek=ttek+sayac;tcift=tcift+(sayac+1); } printf("tek sayi toplam:%d\n",ttek); printf("cift sayi toplam:%d\n",tcift); } 8

RNEK=3 haneli bir tamsaynn yzler,onlar ve birler basaman bulan program. #include<stdio.h> int a,yuzler,b,onlar,birler; main() { printf("a sayisini giriniz:");scanf("%d",&a); yuzler=a-(a%100); b=a-yuzler; onlar=b-(b%10); birler=b-onlar; printf("%d\n",yuzler); printf("%d\n",onlar); printf("%d\n",birler); } IF <ARTLI DALLANMA> YAPISI Komutu bir veya birden fazla artn gereklemesine bal olarak bir komut veya komut blounun almasn salar. f komutunun kullanm ; f<art> Komut; Burdaki art bir deiken ,ifade veya sabit olabilir.art mutlaka parantez ierisinde yazlr.Eer arta bal olarak altrlmas istenen komutlar birden fazla ise yap parantezi iine alnrlarlar.Bloklu komutlar birbirinden noktal virgl ile birbirlerinden ayrlrlar. RNEK=genin evresini bulan program. #include<stdio.h> main() { int cevre,k1,k2,k3; printf("genin 1.kenarini gir=");scanf("%d",&k1); printf("genin 2.kenarini gir=");scanf("%d",&k2); printf("genin 3.kenarini gir=");scanf("%d",&k3); cevre=k1+k2+k3; printf("genin evresi=%d",cevre); } RNEK=Saynn 10dan kk veya byk olduunu bulan program. #include <stdio.h> main() { int a; printf("Bir sayi giriniz:"); scanf("%d",&a); if(a>0 && a<10) printf ("1 ile 10 arasnda bir sayi ....\n"); if(a>10 && a<100) printf ("11 ile 100 arasnda bir sayi ....\n"); }

RNEK=Klavyeden girilen harfin kk veya byk olduunu buluan program. #include <stdio.h> #include<conio.h> main() { char ch; printf("Bir harf tusuna basiniz"); ch=getch(); printf("\n"); if('A'<=ch && ch<='Z')printf("Byk harf tusuna bastiniz..\n"); else printf("Kk harf tuuna bastiniz...\n"); } RNEK=Harfin a-b-c-d olup olmadn bulan programram. #include <stdio.h> #include<conio.h> main() { char ch; printf("Bir tusa basiniz(a/b/c/d):"); ch=getch(); printf("\n"); if(ch=='a'|| ch=='b') printf ("a veya b tusuna bastiniz...\n"); else printf("c veya d tuuna bastiniz...\n"); } RNEK=arpma toplama karma yapan program. #include <stdio.h> #include<conio.h> main() { int a,b,c,i; printf("birinci sayyi gir=");scanf("%d",&a); printf("ikinci sayyi gir=");scanf("%d",&b); printf("\n\n"); printf(" MEN \n"); printf(" =============\n"); printf(" 1-TOPLAMA \n"); printf(" 2-CIKARMA \n"); printf(" 3-CIKARMA \n"); printf("\n"); printf("tercihinizi giriniz(1/2/3)..:"); scanf("%d",&i); printf("\n"); if(i==1) { c=a+b; printf("toplam:%d\n",c); } if(i==2) { 10

c=a-b; printf("fark:%d\n",c); } if(i==3) { c=a*b; printf("arpim:%d\n",c); } } SWITCH-CASE C++ programlama dilinde en yaygn kullanlan artl dallanma yaps switch-case ile oluturulur.Bir deiken yada ifade birka ayr deerle karlatrlmakta hangisi ile eit ise program o kola dallanmaktadr. YAPI SWITCH (DEKEN) { CASE SABT1; KOMUT; KOMUT; KOMUT; CASE SABT2; KOMUT; KOMUT; KOMUT; DEFAULT; KOMUT; KOMUT; BREAK; NOT:SWTCH kelimesinden sonra verilen deiken yada ifade char veya int olabilir ama string veya float olamaz.Ayn ekilde case kelimesinden sonrada int veya char sabiti kullanlr.Ama char kullanlyorsa bu sabit tek trnak ierisinde gsterilir.Bloktaki break komutu switch yapsnn dna klmasn salar. RNEK=Girilen sayiya gre dallanan program. #include<Conio.h> #include<stdio.h> main() { int a; printf("bir sayi gir(1/2/3):"); scanf ("%d",&a); switch(a) { case 1:printf("bir sayisini girdiniz....\n"); break; case 2:printf("iki sayisini girdiniz....\n"); case 3:printf("i sayisini girdiniz....\n"); 11

break; default:printf("1/2/3 disinda bir sayi girdiniz...\n"); break; } } RNEK=Girilen harfe gre ynlendirilen program. #include<Conio.h> #include<stdio.h> main() { char a; printf("bir harf tusuna basiniz(a/b/c):"); a=getchar(); switch(a) { case 'a':printf("AHMET....\n"); break; case 'b':printf("BURAK....\n"); break; case 'c':printf("CAN....\n"); break; default:printf("a/b/c disinda bir harf girdiniz...\n"); break; } RNEK=Men program. #include <stdio.h> #include<conio.h> main() { int a,b,c,i; printf("birinci sayyi gir=");scanf("%d",&a); printf("ikinci sayyi gir=");scanf("%d",&b); printf("\n\n"); printf(" MEN \n"); printf(" =============\n"); printf(" 1-TOPLAMA \n"); printf(" 2-CIKARMA \n"); printf(" 3-CIKARMA \n"); printf("\n"); printf("tercihinizi giriniz(1/2/3)..:"); scanf("%d",&i); switch(i) { case 1:c=a+b; printf("toplam:%d\n",c); break; case 2:c=a-b;printf("fark:%d\n",c);break;case 3:c=a*b;printf("arpim: %d\n",c);break;default:printf("1/2/3 diinda bir rakam girdiniz.\n"); printf ("programi tekrar alitiriniz.....\n");break;}}

12

RNEK=Klavyeden girilen harfin sesli ve byk olup olmadn bulan program. #include <stdio.h> #include<conio.h> main() { char a; printf("bir harf giriniz...."); a=getchar(); switch(a) { case 'A': case 'E': case 'I': case 'U': printf("byk"); case 'a': case 'e': case 'i': case 'u': printf("sesli harf...\n"); break; default:printf("sessiz harf...\n"); break; } }

GOTO KOMUTU Birok programlama dilinde olduu gibi programn kontrolunun program iinde herhangi bir noktaya transferi mmkndr. YAPI: Etiket: -----------; -----------; goto etiket: RNEK=goto ile ilgili. #include <stdio.h> #include<conio.h> main() { int i,sum ; i=sum=0; loop : i=i+1; sum+=i; if(i<10) goto loop; printf("toplam:%d\n",sum); } 13

FOR DNGS RNEK=For ile ilgili. #include <stdio.h> #include<conio.h> main() { int i; for(i=1;i<=10;i++) printf("en buyuk fenerbahce....\n"); } RANDOMIZE: Rand() komutu rastgele integer say retmektedir.Program iinde kullanlan randomize komutu ise program her altrldnda retilen saynn farkli olmasini saglar Random(x): komutu alitirildiginde ise 0 ile x arasinda integer tipi rastgele bir sayi retilir. RNEK:Randomize ile ilgili. #include<stdlib.h> #include<Conio.h> #include<stdio.h> main() { int i; randomize(); for (i=0;i<5;i++) printf("%d ",rand()); } RNEK:Randomize saylar tek basamakl karyor. #include<stdlib.h> #include<Conio.h> #include<stdio.h> main() { int i; randomize(); for (i=0;i<5;i++) printf("%d ",random(10)); } rnek=Saylar kkten bye sralayan program. #include<stdio.h> #include<conio.h> char a,b,c,ara; main() { clrscr(); printf("c sayi gir...\n"); scanf("%d%d%d",&a,&b,&c); 14

if(a>b) { ara=a; a=b; b=ara; } if(a>c) { ara=b; b=c; c=ara; } printf("sayilarn kucukten buyuke dogru sralans\n"); printf("%d%d%d",a,b,c); getch(); } WHILE=Bu dng verilen art doru olduu mddete komut satrlarnn almasn salar. rnek=arpm tablosunda altnn katlarn gsteren program. #include<stdio.h> main() { int i; i=0; while(i<10) { i+=1; printf("6*%d=%d\n",i,6*i); } }

15

You might also like