Clasa a V-a lecția 8 - 30 sep 2014

From Algopedia
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Tema - rezolvări

Rezolvări aici [1]

Lecție

Limbajul C

Intrucțiunea if

Am vorbit despre instrucțiunea if. Ea implementează structura alternativă. Apoi am vorbit despre operatorii de comparație ==, !=, <, <=, >, >=. Exercițiu: Să se spună dacă n divizibil cu k

Schemă logică
#include <stdio.h>

int main() {
  int n, k;

  scanf( "%d%d", &n, &k );
  if ( n % k == 0 )
    printf( "Da" );
  else
    printf( "Nu" );
  return 0;
}

Instrucțiunea compusă

Instrucțiunea if permite cîte o singură instrucțiune pe fiecare ramură. Ce facem dacă avem mai multe instrucțiuni pe o ramură? Folosim instrucțiunea compusă, folosind acolade. Exercițiu: ecuația de gradul 1. Fie ecuația

a · x = b

Să se calculeze x. Atenție! Ecuația poate avea multiple soluții, sau nici o soluție!

Schemă logică
#include <stdio.h>

int main() {
  int a, b, x;

  scanf( "%d%d", &a, &b );
  if ( a == 0 )
    if ( b == 0 )
      printf( "x oricare\n" );
    else
      printf( "x nu exista\n" );
  else {
    x = b / a;
    printf( "x este %d\n", x );
  }
  return 0;
}

if-uri imbricate

Exercițiu cu if-uri unul într-altul (numite și if-uri imbricate):

An bisect

Să se spună dacă un an este bisect

Schemă logică
#include <stdio.h>

int main() {
  int a;

  scanf( "%d", &a );
  if ( a % 4 == 0 )
    if ( a % 100 == 0 )
      if ( a % 400 == 0 )
        printf( "da\n" );
      else
        printf( "nu\n" );
    else
      printf( "da\n" );
  else
    printf( "nu\n" );
  return 0;
}

Instrucțiunea while

Am vorbit despre instrucțiunea while. Ea implementează structura repetitivă de tip WHILE-DO. Exerciții cu instrucțiunea while:

Exercițiul 1

Suma numerelor de la 1 la n fără a folosi formula lui Gauss.

Schemă logică
#include <stdio.h>

int main() {
  int n, s, c;

  scanf( "%d", &n );
  s = 0;
  c = 1;
  while ( c <= n ) {
    s = s + c;
    c = c + 1;
  }
  printf( "Suma este %d\n", s );
  return 0;
}

Exercițiul 2

Să se afișeze suma cifrelor unui număr n.

Schemă logică
#include <stdio.h>

int main() {
  int n, s;

  scanf( "%d", &n );
  s = 0;
  while ( n > 0 ) {
    s = s + n % 10;
    n = n / 10;
  }
  printf( "Suma este %d\n", s );
  return 0;
}

Exercițiul 3

Să se afișeze inversul unui număr n.

Schemă logică
#include <stdio.h>

int main() {
  int n, r;

  scanf( "%d", &n );
  r = 0;
  while ( n > 0 ) {
    r = r * 10 + n % 10;
    n = n / 10;
  }
  printf( "Rasturnatul lui n este %d\n", r );
  return 0;
}

Tema

  • Să se rezolve următoarele probleme (schemă logică + program C în CodeBlocks):
    • Calculați x11 cu număr minim de înmulțiri: Care este numărul minim?
    • Se citește un număr n. Să se spună cîte cifre pare are el. Exemple: dacă n=3528 el are 2 cifre pare (2 și 8), dacă n=49285640 el are 6 cifre pare (4, 2, 8, 6, 4, 0).
    • Se citește un număr n. Să se afișeze cel mai mare divizor propriu al lui n (strict mai mic decît n). Exemplu: dacă n=24 cel mai mare divizor propriu este 12. Dacă n=7 cel mai mare divizor propriu este 1. Dacă n=125 cel mai mare divizor propriu este 25. Dacă n = 175 cel mai mare divizor propriu este 35.
  • Problemă de logică: filozoful Immanuel Kant a ajuns acasă unde a constatat că ceasul de perete a stat deoarece a uitat să-l întoarcă. El a plecat către prietenul lui bun. Acolo a stat o vreme la discuții filozofice, apoi s-a întors înapoi acasă unde a potrivit ceasul la ora exactă! Cum a procedat Kant? Se știe că:
    • Prietenul lui Kant are un ceas care merge bine
    • Pe vremea lui Kant nu existau ceasuri de mînă sau alte dispozitive mobile cu ceas
    • Kant merge cu viteză constantă, de ani de zile aceeași, dar nu ştie cît este.

Rezolvări aici [2]