Clasa a V-a lecția 9 - 8 oct 2013

From Algopedia
Jump to navigationJump to search

Tema - verificare

Rezolvări aici [1]

Lecție

Exerciții

Am făcut schema logică și programul C pentru următoarele exerciții:

  • Se citește un număr n. Să se spună dacă n este palindrom. Un număr este palindrom dacă prima lui cifră este egală cu ultima, a doua cu penultima și așa mai departe. Exemple de palindroame: 15351, 7337 sau 12233221.
Palindrom
#include <stdio.h>

int main() {
  int n, nc, r;

  scanf( "%d", &n );
  nc = n;
  r = 0;
  while ( n > 0 ) {
    r = r * 10 + n % 10;
    n = n / 10;
  }
  if ( nc == r )
    printf( "%d este palindrom\n", nc );
  else
    printf( "%d nu este palindrom\n", nc );
  return 0;
}
  • Se citește un număr n, Să se afișeze toți divizorii lui n. Spunem că d este divizor al lui n dacă n se împarte la d.
Divizorii lui n
#include <stdio.h>

int main() {
  int n, d;

  scanf( "%d", &n );
  printf( "Divizorii lui %d sint:", n );
  d = 1;
  while ( d <= n ) {
    if ( n % d == 0 )
      printf( " %d", d );
    d = d + 1;
  }
  printf( "\n" );

  return 0;
}
  • Modificare ușoară: Se citește un număr n. Să se afișeze toți divizorii impari ai lui n. Singura diferență este că vom adăuga 2 la d în loc de 1: d ← d + 2.

Operatori logici

Condițiile care apar în blocurile de decizie (romburi) și în instrucțiunile if și while din C pot fi compuse folosind următorii operatori logici: și, sau și not (în scheme logice), sau &&, || și ! În limbajul C. Iată exemple de folosire în următoarele exerciții:

  • Se citește un număr n. Să se spună dacă n este prim. Un număr este prim dacă nu se împarte decît la 1 și la el însuși.
Număr prim
#include <stdio.h>

int main() {
  int n, d;

  scanf( "%d", &n );
  d = 2;
  while ( d < n && n % d > 0 )
    d = d + 1;
  if ( d == n )
    printf( "%d este prim\n", n );
  else
    printf( "%d nu este prim\n", n );

  return 0;
}
  • Se citește un număr n. Să se afișeze toate numerele prime mai mici sau egale cu n.
Numere prime pînă la n
#include <stdio.h>

int main() {
  int n, p, d;

  scanf( "%d", &n );
  printf( "Nr. Prime pina la %d:", n );
  p = 2;
  while ( p <= n ) {
    d = 2;
    while ( d < p && p % d > 0 )
      d = d + 1;
    if ( d == p )
      printf( " %d", p );
    p = p + 1;
  }
  printf( "\n" );

  return 0;
}

Tema

  • Să se rezolve următoarele probleme (schemă logică + program C în CodeBlocks):
    • Se citesc două numere, n și k. Să se afișeze toate numerele mai mici sau egale cu n care se divid cu k. Exemple: pentru n = 7 k = 2 se va afișa 2 4 6; pentru n = 25 k = 5 se va afișa 5 10 15 20 25.
    • Se citește un număr n. Să se afișeze toate numerele perfecte mai mici sau egale cu n. Un număr este perfect dacă este egal cu suma divizorilor lui strict mai mici ca el. Primul număr perfect este 6, deoarece 6 = 1 + 2 + 3. Următorul număr este 28 deoarece 28 = 1 + 2 + 4 + 7 + 14. Exemple: dacă n = 8 se va afișa 6. Dacă n = 30 se va afișa 6 28. Dacă n = 500 se va afișa 6 28 496.
  • Problemă de logică: ce linie urmează în secvență:
       1
      1 1
      2 1
    1 2 1 1
  1 1 1 2 2 1
  3 1 2 2 1 1
1 3 1 1 2 2 2 1

Rezolvări aici [2]