Page 1
Structura alternativă
Structura alternativă este compusă dintr-un bloc de decizie, două ramuri de execuție, DA și NU, care se
reunesc la final.
Pseudocod C/C++
daca(cond)atunci
Prel_DA;
altfel
Prel_NU;
if(cond){
Prel_DA;
}
else {
Prel_NU;
}
Mecanism: Daca conditia este adevarata atunci se executa pachetul de instructiuni “Prel_Da” . Daca
conditia este falsa se executa pachetul de instructiuni “Prel_NU”.
Page 2
Exemple
Clasa a II-a
1. Se dau doua numere a si b. Sa se spuna daca sunt egale.
2. Se dau 3 bile. A cata bila are codul cel mai mare?
#include <stdio.h>
#include <stdlib.h>
int main(){
int a, b, c, poz, max;
printf("dati 3 numere:");
scanf("%d%d%d", &a, &b, &c);
max=a; poz=1;
if(max<b){
max=b;
poz=2;
}
if(max<c){
max=c;
poz=3;
}
printf("Pozitia pe care se gaseste maximul este: %d", poz);
return 0;
}
3. Se dau 3 bile. Cate bile sunt de aceeasi culoare?
#include <stdio.h>
#include <stdlib.h>
int main(){
int a, b, c, contor;
printf("dati 3 numere:");
scanf("%d%d%d", &a, &b, &c);
if( a == b )
if(a == c)
contor=3;
else contor=2;
else if(a==c || b==c)
contor=2;
else
contor=1;
printf("Sunt %d bile de aceasi culoare.", contor);
return 0;
}
Clasa a III-a
4. Testul de divizibilitate
Page 3
Testul de divizibilitate n cu k, discuție cele două metode, prima folosind operatorul %, a doua folosind
operatorul /.
n divizibil cu k, varianta 1
Pseudocod C/C++
Intreg n, k
daca(n mod k = 0)atunci
scrie “se divide”
altfel
scrie “nu se divide”
int n,k;
if( n%k == 0 ){
printf(“se divide”);
//cout<<”se divide”;
}
else {
printf(“nu se divide”);
//cout<<”nu se divide”;
}
5. Extragerea primei cifre
Se citește” n, un număr natural strict mai mic decît 100. Să se afișeze prima cifră a lui n.
Page 4
Pseudocod C/C++
Intreg n,c
daca(n < 0)atunci
cn
altfel
cn/10
scrie c
Intreg n,c
if( n%k == 0 ){
c=n;
}
else {
c=n/10;
}
printf(“%d”,c); // cout<<c;
Page 5
6. Distanța pînă la Stormwind
Distanța pînă la Stormwind
Orașul Stormwind se află pe autostrada A1 la kilometrul 60. Se știe că noi ne aflăm pe autostradă la
kilometrul k (k citit). La ce distanță de Stormwind ne aflăm? Să construim o schemă logică care o
calculează (vezi figura din dreapta).
Pseudocod C/C++
intreg k,d
daca(k<60)atunci
d60-k;
altfel
dk-60;
scrie d
int k,d;
if( k<60 ){
d=60-k;
}
else {
d=k-60;
}
printf(“%d”,d); //cout<<d;
Page 6
7. Ecuația de gradul 1:
Se dau a și b astfel încît a • x = b. Să se determine x pe baza valorilor a și b. Am discutat cele trei
cazuri:
cînd a este diferit de zero x este b : a.
cînd a este zero și b este diferit de zero x nu există.
cînd a este zero și b este zero x poate avea orice valoare.
#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;}
Page 7
8. Laturile unui triunghi
Se citesc trei numere, a, b și c. Să se spună dacă pot fi laturile unui triunghi.
Page 8
9. Cifre consecutive
Să se spună dacă un număr n are ultimele două cifre consecutive, în ordine crescătoare. Exemple: 312, 4523 și 1 sînt numere care au ultimele două cifre consecutive. 215, 4321 și 7 nu au ultimele două cifre consecutive crescător
Page 9
10. Maximul a trei numere
Se citesc trei numere, a, b și c. Să se afișeze valoarea maximă.
maximul a trei numere, varianta 1
maximul a trei numere, varianta 2
Page 10
11. Cifre impare
Se citește un număr n. Se știe că 1 ≤ n < 100. Să se spună dacă toate cifrele lui n sînt impare.
Varianta1: DE CORECTAT SCHEMA LOGICA n%10%1
Toate cifrele lui n sînt impare, varianta 1
Page 12
12. Divizibilitate in interval [a,b]
Se citesc trei numere naturale, a, b și k. Să se afișeze numărul de numere divizibile cu k în intervalul [a,
b] (inclusiv a și b).
Page 13
Ordonarea a 3 numere
Se citesc trei numere, a, b și c. Să se afișeze în ordine crescătoare. Exemplu: dacă a = 8, b = 4, c = 12,
se va afișa 4 8 12.
Varianta 1
Page 14
Varianta 2
La table am discutat si metoda interschimbarii directe si metoda bulelor.
Page 15
Instructiunea switch
Switch(expresie){
Case exp : secventa instructiuni ; break ;
Case exp : secventa instructiuni ; break ;
Case exp : secventa instructiuni ; break ;
[default : secventa instructiuni ];
}
Tema :
1. Sortare cu interschimbare directa in c
2. Sortare prin metoda bulelor in c
3. Problema Comori (campion)
Corectura tema:
1. Sortare prin interschimbare directa #include<stdio.h>
int main(){
int a,b,c,d,aux;
scanf("%d%d%d%d",&a,&b,&c,&d);
if(a>b){
aux=a;
a=b;
b=aux;}
if(a>c){
aux=a;
a=c;
c=aux;}
if(a>d){
aux=a;
a=d;
d=aux;}
if(b>c){
aux=b;
b=c;
c=aux;}
if(b>d){
aux=b;
b=d;
d=aux;}
if(c>d){
aux=c;
c=d;
2. Sortare prin metoda bulelor #include<stdio.h>
int main(){
int a,b,c,d,aux;
scanf("%d%d%d%d",&a,&b,&c,&d);
if(a>b){
aux=a;
a=b;
b=aux;}
if(b>c){
aux=b;
b=c;
c=aux;}
if(c>d){
aux=c;
c=d;
d=aux;}
if(a>b){
aux=a;
a=b;
b=aux;}
if(b>c){
aux=b;
b=c;
c=aux;}
if(a>b){
aux=a;
a=b;
Page 16
d=aux;}
printf("%d %d %d %d",a,b,c,d);
return 0;
}
b=aux;}
printf("%d %d %d %d",a,b,c,d);
return 0;
}
3. Comori:
#include<fstream>
using namespace std;
ifstream f("comori.in");
ofstream g("comori.out");
int main(){
int x=0,y=0,n,dir,pasi,i;
f>>n;
for(i=1;i<=n;i++){
f>>dir>>pasi;
switch(dir){
case 1: y=y+pasi;break;
case 2: x=x+pasi;y=y+pasi;break;
case 3: x=x+pasi;break;
case 4: x=x+pasi;y=y-pasi;break;
case 5: y=y-pasi;break;
case 6: x=x-pasi;y=y-pasi;break;
case 7: x=x-pasi; break;
case 8: x=x-pasi;y=y+pasi;
}
}
g<<x<<' '<<y;
return 0;
}
Varianta C:
include <stdio.h>
FILE *fin,*fout;
int main()
{
fin= fopen("comori.in","r");
fout= fopen("comori.out","w");
int n,d,p,i,x=0,y=0;
fscanf(fin,"%d",&n);
for(i=1;i<=n;i++){
fscanf(fin,"%d%d",&d,&p);
switch(d){
case 1:y=y+p;break;
case 2:x=x+p,y=y+p;break;
case 3:x=x+p;break;
case 4:x=x+p,y=y-p;break;
case 5:y=y-p;break;
case 6:x=x-p,y=y-p;break;
case 7:x=x-p;break;
case 8:x=x-p,y=y+p;break;
Page 17
}
}
fprintf(fout,"%d %d",x,y);
return 0;
}