Rok akademicki 2014/2015, Pracownia nr 5 2/36 Informatyka 1 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia niestacjonarne I stopnia Rok akademicki 2014/2015 Pracownia nr 5 (17/19.04.2015) dr inż. Jarosław Forenc Pętla for for (i=0; i<10; i=i+1) zostanie wykonana 10 razy for (inicjalizacja; ; aktualizacja) inicjalizacja aktualizacja Rok akademicki 2014/2015, Pracownia nr 5 3/36 Rok akademicki 2014/2015, Pracownia nr 5 4/36 Przykład - wyświetlenie tekstu Przykład - wyświetlenie tekstu int i; int i; for (i=0; i<5; i=i+1) printf("\n"); for (i=0; i<5; i=i+1) printf("\n");
Rok akademicki 2014/2015, Pracownia nr 5 5/36 Rok akademicki 2014/2015, Pracownia nr 5 6/36 Pętla for Pętla for for (i=0; i<10; i=i+1) 0 1 2 3 4 5 6 7 8 9 for (i=1; i<=10; i=i+2) 1 3 5 7 9 for (i=0; i<10; i=i+1) printf("%d ",i+1); 1 2 3 4 5 6 7 8 9 10 for (i=10; i>0; i=i-1) 10 9 8 7 6 5 4 3 2 1 for (i=1; i<=10; i=i+1) 1 2 3 4 5 6 7 8 9 10 for (i=-9; i<=9; i=i+3) -9-6 -3 0 3 6 9 Rok akademicki 2014/2015, Pracownia nr 5 7/36 Rok akademicki 2014/2015, Pracownia nr 5 8/36 Przykład - suma liczb 1+2+ +10 #define N 10 int i, suma=0; for (i=1; i<=n; i=i+1) suma = suma + i; Suma 10 liczb to 55 printf("suma %d liczb to %d\n", N, suma); Przykład - suma liczb 1+2+ +1000 #define N 1000 int i, suma=0; for (i=1; i<=n; i++) suma += i; Suma 1000 liczb to 500500 printf("suma %d liczb to %d\n", N, suma);
Rok akademicki 2014/2015, Pracownia nr 5 9/36 Rok akademicki 2014/2015, Pracownia nr 5 10/36 Operator inkrementacji (++) Operator inkrementacji (++) ++x lub x++ zwiększa wartość zmiennej o 1 ++x x++ - operator preinkrementacji - operator postinkrementacji ++x; x++; x = x + 1; operator jednoargumentowy może być stosowany tylko zmiennych (nie wolno stosować wyrażeń) int x = 1, y; int x = 1, y; y = 2 * ++x; ++x x = 2 y = 2 * x++; 2 * x 2 * 1 2 * ++x 2 * 2 y = 2 * x y = 2 y = 2 * ++x y = 4 x++ x = 2 x = 2, y = 4 x = 2, y = 2 Rok akademicki 2014/2015, Pracownia nr 5 11/36 Rok akademicki 2014/2015, Pracownia nr 5 12/36 Operator dekrementacji (--) --x x-- - operator predekrementacji - operator postdekrementacji zmniejsza wartość zmiennej o 1 --x; x--; x = x - 1; Pętla for - złożona wykonanie w pętli for więcej niż jednej instrukcji wymaga umieszczenia ich w datkowych nawiasach klamrowych for (wyr1; wyr2; wyr3) 1; 2;...
Rok akademicki 2014/2015, Pracownia nr 5 13/36 Rok akademicki 2014/2015, Pracownia nr 5 14/36 Pętla for - błędy średnik na końcu pętli for: Pętla for - błędy błędny warunek - brak wykonania instrukcji: for (i=0; i<10; i++) ; 10 for (i=0; i>10; i++) przecinki zamiast średników w pętli for: błędny warunek - pętla nieskończona: for (i=0, i<10, i++) błąd kompilacji for (i=1; i>0; i++) 1 2 3 4 5 6 7 8 9 Rok akademicki 2014/2015, Pracownia nr 5 15/36 Rok akademicki 2014/2015, Pracownia nr 5 16/36 Pętla for - pętla niekończona Instrukcja break for (wyr1; wyr2; wyr3) wszystkie wyrażenia w pętli for są opcjonalne for ( ; ; ) - pętla nieskończona break - przerywa wykonywanie pętli for for (i=1; i<10; i++) if (i%5==0) break; w przypadku braku wyr2 przyjmuje się, że jest ono prawdziwe
Rok akademicki 2014/2015, Pracownia nr 5 17/36 Rok akademicki 2014/2015, Pracownia nr 5 18/36 Instrukcja continue continue - przerywa bieżącą iterację i przechodzi kolejnej Instrukcja goto goto - bezwarunkowy skok etykiety stosowanie tej instrukcji nie jest zalecane for (i=1; i<10; i++) if (i%3==0) continue; for (i=1; i<10; i++) if (i%5==0) goto dalej; dalej: printf( koniec\n ); - można skoczyć wolnego miejsca w programie - etykieta musi poprzedzać instrukcję Rok akademicki 2014/2015, Pracownia nr 5 19/36 Rok akademicki 2014/2015, Pracownia nr 5 20/36 Zagnieżdżanie pętli for jako występuje kolejna pętla for for (i=1; i<=3; i++) for (j=1; j<=2; j++) printf( i=%d, j=%d\n,i,j); dla i = 1 for (j=1; j<=2; j++) printf( i=%d, j=%d\n,i,j); dla i = 2 for (j=1; j<=2; j++) printf( i=%d, j=%d\n,i,j); dla i = 3 for (j=1; j<=2; j++) printf( i=%d, j=%d\n,i,j); - pętla zewnętrzna - pętla wewnętrzna i=1, j=1 i=1, j=2 i=2, j=1 i=2, j=2 i=3, j=1 i=3, j=2 Przykład - tabliczka mnożenia int i, j; for (i=1; i<11; i++) for (j=1; j<11; j++) printf("%2d ", i*j); printf("\n");
Rok akademicki 2014/2015, Pracownia nr 5 21/36 Rok akademicki 2014/2015, Pracownia nr 5 22/36 Przykład - tabliczka mnożenia 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 int i, j; 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 for (i=1; i<11; 7 i++) 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 for (j=1;j<11;j++) 9 18 27 36 45 54 63 72 81 90 printf("%2d 10 20 ",i*j); 30 40 50 60 70 80 90 100 printf("\n"); Pętla while while () int i=0; while (i<10) i++; póki prawdziwy wykonuj instrukcję Rok akademicki 2014/2015, Pracownia nr 5 23/36 Rok akademicki 2014/2015, Pracownia nr 5 24/36 Pętla while - złożona wykonanie w pętli while więcej niż jednej instrukcji wymaga umieszczenia ich w datkowych nawiasach klamrowych while () 1; 2;... Przykład - 1 + 2 + +? < 100 int suma = 0, n = 0; Ilosc liczb: 13 Suma liczb: 91 while (suma < 100) n++; suma = suma + n; suma = suma - n; n--; printf("ilosc liczb: %d\nsuma liczb: %d\n",n,suma);
Rok akademicki 2014/2015, Pracownia nr 5 25/36 Rok akademicki 2014/2015, Pracownia nr 5 26/36 Pętla while - błędy średnik na końcu while - pętla nieskończona: i = 0; while (i < 10) ; printf("%d ",i++); brak aktualizacji i pętla nieskończona: i = 0; while (i < 10) 0 0 0 0 0 0 0 0 0 Pętla while - pętla nieskończona w pewnych sytuacjach celowo stosuje się pętlę nieskończoną: while (1) 1; 2; Rok akademicki 2014/2015, Pracownia nr 5 27/36 Rok akademicki 2014/2015, Pracownia nr 5 28/36 Pętla while - break i continue Pętla while int i=0; while (i<10) i++; if (i%2==0) continue; if (i%5==0) break; - continue przerywa bieżącą iterację - break przerywa wykonywanie pętli while (); int i=0; i++; while (i<10); wykonuj instrukcję póki prawdziwy
Rok akademicki 2014/2015, Pracownia nr 5 29/36 Rok akademicki 2014/2015, Pracownia nr 5 30/36 Pętla while - złożona Pętla while - break i continue wykonanie w pętli while więcej niż jednej instrukcji wymaga umieszczenia ich w datkowych nawiasach klamrowych 1; 2; while (); int i=0; i++; if (i%5==0) break; if (i%2==0) continue; while (i<10); - break przerywa wykonywanie pętli - continue przerywa bieżącą iterację Rok akademicki 2014/2015, Pracownia nr 5 31/36 Rok akademicki 2014/2015, Pracownia nr 5 32/36 Porównanie pętli while i while Przykład - klawiatura while () while (); Program sprawdzający rodzaj wciśniętego znaku na klawiaturze: litera, cyfra, znak odstępu, inny znak. Wprowadzaj znaki bez echa na ekranie - getch(). Wyświetl rodzaj znaku, sam znak i jego kod ASCII. Wyjście z programu powinno nastąpić po wciśnięciu litery q lub Q. Przykłady: Litera: k kod: 107 Cyfra: 7 kod: 55 Inny znak: * kod: 42
Rok akademicki 2014/2015, Pracownia nr 5 33/36 Rok akademicki 2014/2015, Pracownia nr 5 34/36 Przykład - klawiatura (ctype.h ctype.h) Zawiera funkcje zwracające wartość niezerową jeśli argument (znak) należy określonej kategorii: isalnum(znak) - litera lub cyfra isalpha(znak) - litera isdigit(znak) - cyfra isgraph (znak) znak drukowalny islower(znak) - mała litera isspace(znak) znak niedrukowalny (whitespace) isupper(znak) - wielka litera Przykład - klawiatura #include <conio.h> #include <ctype.h> int key; key = getch(); while (key!='q' && key!='q') if (isalpha(key)!=0) printf("litera: %c kod: %d\n",key,key); Rok akademicki 2014/2015, Pracownia nr 5 35/36 Rok akademicki 2014/2015, Pracownia nr 5 36/36 Przykład - klawiatura Przykład - klawiatura if (isdigit(key)!=0) printf("cyfra: %c kod: %d\n",key,key); if (isspace(key)!=0) printf("znak odstepu: %c kod: %d\n",key,key); if (isalpha(key)==0 && isdigit(key)==0 && isspace(key)==0) printf("inny znak: %c kod: %d\n",key,key); key = getch(); if (isdigit(key)!=0) Litera: d kod: 100 printf("cyfra: %c kod: Cyfra: %d\n",key,key); 7 kod: 55 if (isspace(key)!=0) Litera: K kod: 75 printf("znak odstepu: %c Inny kod: znak: %d\n",key,key); \ kod: 92 if (isalpha(key)==0 && isdigit(key)==0 Znak odstepu: && isspace(key)==0) kod: 32 printf("inny znak: %c Inny kod: %d\n",key,key); znak: kod: 0 key = getch(); Inny znak: ; kod: 59 Inny znak: Ó kod: 224 Inny znak: ć kod: 134