User Tools

Site Tools


dydaktyka:cprog:2015:loops-solutions

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
dydaktyka:cprog:2015:loops-solutions [2015/11/05 14:55]
pkleczek [Zadanie 1]
— (current)
Line 1: Line 1:
-====== Pętla "​while"​ - rozwiązania i odpowiedzi ====== 
  
-Laboratorium:​ [[dydaktyka:​cprog:​2015:​loops|Pętla "​while",​ formatowanie kodu, debuggowanie]] 
- 
-===== Priorytety operatorów ===== 
- 
-Aby sprawdzić, czy dla zadanej liczby $x$ zachodzi $4 < x < 6$ należy zapisać wyrażenie następująco:​ 
-<code c> 
-if (4 < x && x < 6) ... 
-</​code>​ 
- 
-Wyrażenie ''​4 < x < 6''​ zgodnie z priorytetami operatorów równoważne jest ''​(4 < x) < 6'',​ a ponieważ w języku C operatory porównania (np. '<'​) zwraca wartość całkowitą ''​1''​ bądź ''​0'',​ to przykładowo dla $x = 7$ otrzymamy ''​(1 < 7) < 6''​ <=> ''​1 < 6''​ <=> ''​1''​ (co oczywiście nie jest pożądanym wynikiem). 
- 
- 
-===== Pętla "​while"​ ===== 
- 
-[[dydaktyka:​cprog:​2015:​loops#​petla_while|Pętla "​while"​]] 
- 
-==== Zadanie 1 ==== 
- 
- 
-<code c> 
-#include <​stdio.h>​ 
-#include <​stdlib.h>​ 
- 
-int main() 
-{ 
-    int n = 5; 
-    int k = 3; 
-    int iloczyn = 0; 
-    int n0 = n; // zapamietaj wartosc `n`, bo bedziemy ja modyfikowac... 
- 
-    while (n > 0) { 
-        iloczyn = iloczyn + k; 
-        n = n - 1; 
-    } 
- 
-    printf("​%d * %d = %d\n", n0, k, iloczyn); 
- 
-    return 0; 
-} 
-</​code>​ 
- 
-===== Pętla "​do-while"​ ===== 
- 
-[[dydaktyka:​cprog:​2015:​loops#​petla_do-while|Pętla "​do-while"​]] 
- 
-==== Zadanie 1 ==== 
- 
-<code c> 
-#include <​stdio.h>​ 
-#include <​stdlib.h>​ 
- 
-int main() 
-{ 
-    int n; 
- 
-    do { 
-        printf("​Podaj liczbe dodatnia: "); 
-        scanf("​%d",​ &n); 
-    } while (n <= 0); 
- 
-    printf("​OK,​ wpisano %d.\n",​ n); 
- 
-    return 0; 
-} 
-</​code>​ 
- 
-==== Zadanie 2 ==== 
- 
-<code c> 
-#include <​stdio.h>​ 
-#include <​stdlib.h>​ 
- 
-int main() 
-{ 
-    int n; 
- 
-    do { 
-        n = rand() % 101; 
-    } while (n < 10 || n > 15); // zgodnie z prawem de Morgana: 
-                                // ~(a && b) == ~a || ~b 
- 
-    printf("​OK,​ wpisano %d.\n",​ n); 
- 
-    return 0; 
-} 
-</​code>​ 
- 
-===== Zadania podsumowujące ===== 
- 
-==== Zadanie 1 ==== 
- 
-<code c> 
-#include <​stdio.h>​ 
-#include <​stdlib.h>​ 
- 
-int main() 
-{ 
-    int i, j; 
- 
-    for (i = 0; i < 3; i++) { 
-        for (j = 0; j < 3; j++) { 
-            printf("​%d",​ (i + j) % 3 + 1); 
-        } 
-        printf("​\n"​);​ 
-    } 
- 
-    return 0; 
-} 
-</​code>​ 
- 
-==== Zadanie 2 ==== 
- 
-Pomysł polega na tym, aby sumować cyfry zaczynając od jedności i następnie "​obcinając"​ po jednej pozycji - właśnie zaczynając od jedności: 
-  - $\mod(196, 10) = 6$; w języku C ''​196 / 10''​ wynosi ''​19''​ 
-  - $\mod(19, 10) = 9$; w języku C ''​19 / 10''​ wynosi ''​9''​ 
-  - $\mod(1, 10) = 1$; w języku C ''​1 / 10''​ wynosi ''​0''​ 
- 
-Gdy po (kolejnym) dzieleniu dostaniemy wartość ''​0''​ -- wiemy, że nie zostało już więcej cyfr do sumowania. 
- 
-<code c> 
-#include <​stdio.h>​ 
-#include <​stdlib.h>​ 
- 
-int main() 
-{ 
-    int n = 196; 
-    int n0 = n; 
- 
-    // POMYSŁ: "​Odcinaj"​ po jednej cyfrze od końca i zobacz, co 
-    // wlasciwie odcinasz ;) 
- 
-    int sum = 0; 
-    while (n > 0) { 
-        sum = sum + n % 10; // dodaj wartość ostatniej cyfry "​głowy"​ 
-        n = n / 10; // obetnij ostatnią cyfrę "​głowy"​ 
-    } 
- 
-    printf("​Suma cyfr liczby %d to %d.\n",​ n0, sum); 
- 
-    return 0; 
-} 
-</​code>​ 
dydaktyka/cprog/2015/loops-solutions.1446731755.txt.gz · Last modified: 2020/03/25 11:46 (external edit)