Sunteți pe pagina 1din 11

Structura repetitiv de tip WHILE-DO

Structura repetitiv de tip WHILE-DO (ct timp - execut) reprezinta structura de control cu ajutorul
careia executam un set de instructiuni, de mai multe ori, in functie de o conditie. Conditia se testeaza
imediat la intrarea in structura repetitiva, de aceea, while-do se numeste structura repetitiva
conditionata anterior.

Structura repetitiv WHILE-DO

Pseudocod

C/C++

Cat_timp(cond)executa
| Prel

while(cond){
Prel; //set de instructiuni
}

Mecanism :
Pas1. Se testeaza conditia. ( conditia reprezinta de fapt o expresie logica) Daca conditia (expresia logica)
este adevarata atunci trecem la pasul 2. Daca conditia este falsa se trece la pasul 3.
Pasul 2: Se executa pachetul de instructiuni Prel si se revine la pasul 1.

Pasul 3. Stop

Afiarea cifrelor unui numr n ordine invers


Se citete n. S se afieze cifrele lui n n ordine invers.

Afiare cifre numr n ordine invers

Pseudocod

C++

intreg n

#include<stdio.h>
int main(){
int n;
scanf(%d,&n);
while(n>0){

#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
while(n>0){

Citeste n
Cat_timp(n>0)executa
scrie n mod 10
nn/10

printf(%d,n%10);
n=n/10;
}
return 0;
}

cout<<n%10;
n=n/10;
}
return 0;
}

Acest algoritm de PARCURGERE a cifrelor unui numar, se va aplica problemelor care


prelucreaza intr-un fel sau altul cifrele unui numar.
Pentru a putea parcurge cifrele unui numar, accesam mai intai cifra care se poate extrage cel
mai usor din numar, si anume ultima cifra (stim ca ultima cifra a oricarui numar este restul
impartirii numarului respectiv la 10).

Dupa ce am extras aceasta cifra si am afisat-o , eliminam aceasta cifra din numar, astfel incat,
penultima cifra a numarul va deveni ultima cifra, si deci o vom putea extrage usor si pe aceasta,
la pasul urmator.

Suma cifrelor unui numar (manual)


S se afieze suma cifrelor lui n.

Pseudocod

C/C++

intreg n,s
citeste n
s=0;
cat_timp(n>0)executa
s s + n mod 10
nn/10
scrie s

#include<stdio.h>
int main(){
int n,s;
scanf("%d",&n);
s=0;
while(n>0){
s= s + n % 10;
n=n/10;
}
printf("%d",s);
return 0;
}

Acest algoritm, se bazeaza pe algoritmul de parcurgere a cifrelor unui numar, descris


anterior. Vom avea nevoie in plus, de o variabila ACUMULATOR (o vom denumi s, de
la suma), variabila in care vom aduna pe rand valorile cifrelor accesate. Pe masura ce
accesam o cifra a unui numar, adunam valoarea cifrei la valoarea anterioara a
acumulatorului, care valoare, este initial 0.
3

Daca am fi dorit sa calculam produsul cifrelor unui numar, cat ar fi trebuit sa fie initial
variabila acumulator?

Cate cifre are un numar


Se d un numr n. S se afieze numrul de cifre al lui n. Rspuns: vom folosi un contor nrcf care va
numra cifrele lui n. Pentru fiecare cifr numrat vom mpri n la 10. Iat schema logic:

Acest algoritm, se bazeaza pe algoritmul de parcurgere a cifrelor unui numar, descris


anterior. Vom avea nevoie in plus, de o variabila CONTOR , cu ajutorul caruia vom
numara cifrele pe masura ce le vom parcurge. Vom parcurge cifrele numarului incepand
cu ultima cifra , si pentru fiecare cifra accesata, vom mari valoarea contorului cu 1.

Pseudocod
contor=0;
cat_timp(n>0)executa
contor contor+1
n=n/10
scrie contor

C/C++
contor=0;
while(n>0){
contor++;
n=n/10;
}
printf(%d,contor);

Cate cifre sunt egale cu o cifra k (manual)


Pseudocod
C/C++
contor=0;
contor=0;
cat_timp(n>0)executa
while(n>0){
daca( n mod 10 == k)
if( n % 10 == k)
contor++;
contor contor+1
n=n/10;
n=n/10
}
scrie contor
printf(%d,contor);

Acest algoritm, se bazeaza pe algoritmul de parcurgere a cifrelor unui numar, descris


anterior. De asemenea, vom avea nevoie sa numaram cifrele care indeplinesc conditia
data, folosind o variabila contor. In plus, vom avea nevoie sa testam daca o anumita
cifra indeplineste conditia ceruta, si numai daca conditia este adevarata sa marim
valoarea contorului.

Sunt toate cifrele lui n pare?


Pseudocod
gasit=1;
cat_timp(n>0)executa
daca( n mod 2 == 1)
gasit=1
nn div 10;
daca (gasit==0)
scrie nu sunt toate pare
altfel
scrie sunt toate pare

C/C++
gasit=1;
while(n>0){
if( n % 2 == 1)
gasit=0;
n=n/10;
}
if(gasit==0)
printf(nu sunt toate
pare);
else
printf(sunt toate pare);
while(n>0 && n%2==0){
n=n/10;
}
if(n>0)
printf(nu sunt toate
pare);
else
printf(sunt toate pare);

Acest algoritm, se bazeaza pe algoritmul de parcurgere a cifrelor unui numar, descris


anterior. Vom avea nevoie in plus, de o variabila STEAG (SEMN) , cu ajutorul caruia
vom identifica daca numarul are o cifra care nu respecta conditia data. Vom parcurge
toate cifrele numarului si de fiecare data cand vom gasi o cifra care nu respecta
conditia( nu este para) vom seta valoarea steguletului pe 0 (codificare a raspunsului
NU, nu este ok numarul). Initial valoarea steguletului va fi setata pe 1 (codificare a
raspunsului DA; presupunem ca numarul are numai cifre pare, adica este ok)
Variabila cu rol de steag este gasit.

Inversul unui numr


S se afieze inversul lui n.

#include <stdio.h>
int main() {
int n, r;
scanf( "%d", &n );
s = 0;
while ( n > 0 ) {
r = r * 10 + n % 10;
n = n / 10;
}
printf( "Rasturnatul lui n este %d\n", r );
return 0;

Palindrom
Definiie: un numr palindrom (sau simetric) este un numr care este identic cu
rsturnatul lui. Cu alte cuvinte el arat la fel dac i scriem cifrele de la stnga la dreapta
sau de la dreapta la stnga. Exemple de numere palindrom snt 1221, 5229225, 27272,
44, 1. Problem: s se determine dac un numr n este palindrom.
Rezolvare: vom calcula rsturnatul lui n n variabila r. Dac cele dou numere snt
egale nseamn ca numrul este palindrom. Trebuie s acordm atenie faptului c n va
fi distrus n timpul calculului, drept pentru care i vom face o copie n nc.

Determinare dac un numr este 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;
}

2 la n
Sa se calculeze 2 la puterea n.
#include <stdio.h>
int main() {
int n, contor;
scanf( "%d", &n );
contor=1; p=1;
while ( contor < n ) {
p=p*2;
contor++;
}
printf( "%d ", p );
return 0;
}

Tema
Scrieti in pseudocod algoritmii de rezolvare pentru problemele : palindrom si 2 la n
Tema: Cangur, Economii
10

Optional: 5 probleme campion din lista problemelor recomandate .

11