structura alternativă -...

17
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” .

Upload: others

Post on 05-Sep-2019

20 views

Category:

Documents


0 download

TRANSCRIPT

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”.

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

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.

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;

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;

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;}

8. Laturile unui triunghi

Se citesc trei numere, a, b și c. Să se spună dacă pot fi laturile unui triunghi.

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

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

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

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).

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

Varianta 2

La table am discutat si metoda interschimbarii directe si metoda bulelor.

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;

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;

}

}

fprintf(fout,"%d %d",x,y);

return 0;

}