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

From Algopedia
Revision as of 09:17, 7 October 2016 by Cristian (talk | contribs) (→‎Exercițiul 2)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

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]