4_1 Structura repetitiva de tip WHILE
-
Upload
gigi-tyirean -
Category
Documents
-
view
227 -
download
0
description
Transcript of 4_1 Structura repetitiva de tip WHILE
-
1
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
-
2
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 C++
intreg n
Citeste n
Cat_timp(n>0)executa
scrie n mod 10
nn/10
#include
int main(){
int n;
scanf(%d,&n);
while(n>0){
printf(%d,n%10);
n=n/10;
}
return 0;
}
#include
using namespace std;
int main(){
int n;
cin>>n;
while(n>0){
cout
-
3
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
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.
-
4
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.
-
5
Pseudocod C/C++
contor=0;
cat_timp(n>0)executa
contor contor+1
n=n/10
scrie contor
contor=0;
while(n>0){
contor++;
n=n/10;
}
printf(%d,contor);
-
6
Cate cifre sunt egale cu o cifra k (manual)
Pseudocod C/C++
contor=0;
cat_timp(n>0)executa
daca( n mod 10 == k)
contor contor+1
n=n/10
scrie contor
contor=0;
while(n>0){
if( n % 10 == k)
contor++;
n=n/10;
}
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 C/C++
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
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);
-
7
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
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;
-
8
}
-
9
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
-
10
#include
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
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
-
11
Optional: 5 probleme campion din lista problemelor recomandate .