4.11. Instructiunea break

2019/02/16 in Programare in C

Instructiunea break este inrudita cu instructiunea continue. Ea are formatul:

break;

Poate fi utilizata in corpul unui ciclu. In acest caz, la intalirea instructiuneii break se termina executia ciclului in al carui corp este inclusa si executia continua cu instructiunea urmatoare instructiunii ciclice respective.

Instructiunea break, la fel ca si instructiunea continue, mareste flexibilitatea la scrierea programelor in limbajele C si C++.

Exercitii:

4.23. Sa se scrie un program care citeste masurile a, b si c ale laturilor unui triunghi, calculeaza si afiseaza aria triunghiului respectiv.

Pentru determinarea ariei triunghiului se va folosi metoda lui Heron. Daca notam cu p semiperimetrul triunghiului, atunci aria se calculeaza cu ajutorul expresiei:

aria = sqrt(p*(p-a)*(p-b)*(p-c))

Masurile laturilor triunghiului satisfac relatiile:

p-a > 0;
p-b > 0;
p-c > 0;

deci se va testa conditia:

p-a > 0 && p-b > 0 && p-c > 0;

care trebuie sa fie adevarata.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

main()
{
    double a, b, c, p;
    char tab[255];

    do {
        do {
            printf("a = ");
            if(gets(tab) == NULL) {
                printf("s-a tasta EOF\n");
                exit(1);
            }
            if(sscanf(tab, "%lf", &a) == 1)
                break;
            printf("nu s-a tastat un numar\n");
            printf("se reia citirea lui a\n");
        } while (1);
        do {
            printf("b = ");
            if(gets(tab) == NULL) {
                printf("s-a tasta EOF\n");
                exit(1);
            }
            if(sscanf(tab, "%lf", &b) == 1)
                break;
            printf("nu s-a tastat un numar\n");
            printf("se reia citirea lui b\n");
        } while (1);
        do {
            printf("c = ");
            if(gets(tab) == NULL) {
                printf("s-a tasta EOF\n");
                exit(1);
            }
            if(sscanf(tab, "%lf", &c) == 1)
                break;
            printf("nu s-a tastat un numar\n");
            printf("se reia citirea lui c\n");
        } while (1);
    p = (a + b + c)/2;
    if(p-a > 0 && p-b > 0 && p-c > 0)
        break;
    printf("a = %g\tb = %g\tc = %g\n", a, b, c);
    printf("nu pot reprezenta laturile unui triunghi\n");
    } while(1);
    printf("aria = %g\n", sqrt(p*(p-a)*(p-b)*(p-c)));
}

4.24. Sa se scrie un program care citeste doua numere naturale si pozitive, calculeaza si afiseaza cel mai mare divizor comun al lor (c.m.m.d.c.).

Calculul celui mai mare divizor comun a doua numere se poate face folosind algoritmul lui Euclid. Pasii acestui algoritm sunt:

  1. Se citesc doua numere. Fie acestea a si b.
  2. Se imparte a la b; fie q si r catul, respectiv restul acestei impartiri: a = q*b + r.
  3. Daca r este diferit de zero, se fac atribuirile: a = b si b = r si se revine la pasul 2. Altfel algoritmul se inrerupe si cel mai mare divizor comun al lor este b.
#include <stdio.h>
#include <stdlib.h>

main()
{
    long m, n, a, b, r;
    char tab[255];

    do {
        printf("primul numar = ");
        if(gets(tab) == NULL) {
            printf("s-a tastat EOF");
            exit(1);
        }
        if(sscanf(tab, "%ld\n", &m) == 1 && m > 0)
            break;
        printf("nu s-a tastat un numar intreg pozitiv\n");
    } while (1);
    do {
        printf("al doilea numar = ");
        if(gets(tab) == NULL) {
            printf("s-a tastat EOF");
            exit(1);
        }
        if(sscanf(tab, "%ld\n", &n) == 1 && n > 0)
            break;
        printf("nu s-a tastat un numar intreg pozitiv\n");
    } while (1);

    a = m;
    b = n;

    do {
        r = a % b;
        if (r) {
            a = b;
            b = r;
        }
    } while (r);

    printf("(%ld, %ld) = %ld\n", m, n, b);
}

4.12. Instructiunea switch