User Tools

Site Tools


dydaktyka:cprog:2016:loops-solutions

Differences

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

Link to this comparison view

Next revision
Previous revision
dydaktyka:cprog:2016:loops-solutions [2015/11/12 07:11]
127.0.0.1 edycja zewnętrzna
— (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"​ ===== 
- 
-==== 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"​ ===== 
- 
-==== 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 (z użyciem operatora //modulo//) i następnie "​obcinać"​ po jednej pozycji -- właśnie zaczynając od jedności (z użyciem operatora dzielenia): 
-  - $\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>​ 
- 
-==== Zadanie 3 ==== 
- 
-<code c> 
-#include <​stdio.h>​ 
-#include <​stdlib.h>​ 
-int main () 
-{ 
-    double S = 5.0; 
-    double x = S; // krok (1) 
-    double x_prev; ​ // wartość `x` w poprzedniej iteracji 
- 
-    do { 
-        x_prev = x; 
-        x = (x_prev + S / x_prev) / 2; // krok (2) 
-        printf("​%.6f\n",​ x); 
-    } while (x - x_prev < -10e-3); // krok (3) 
- 
-    printf("​sqrt(%.2f) ~= %.6f\n",​ S, x); 
- 
-    return 0; 
-} 
-</​code>​ 
dydaktyka/cprog/2016/loops-solutions.1447308712.txt.gz · Last modified: 2020/03/25 11:46 (external edit)