Georgel scrie un algoritm care conţine structuri de atribuire, alternative, de selecţie, repetitive şi compuse. După scrierea algoritmului vrea să-l testeze pentru toate cazurile posibile. Pentru aceasta trebuie să cunoască numărul minim de date de test necesare.
Pentru descrirea structurilor se utilizează următoarele cuvinte cheie:
- pentru atribuire
ATRIB
- pentru alternativă
DACA
ATUNCI
ALTFEL
(undeALTFEL
poate lipsi)
- pentru selecţie ALEGE
CAZ
CAZ_IMPLICIT
(undeCAZ_IMPLICIT
poate lipsi)
- pentru repetitive
CAT_TIMP
REPETA
PANA_CAND
PENTRU
- pentru compusă
INCEPUT
SFARSIT
Nu se face diferenţă între literele mari şi literele mici. Un algoritm începe cu cuvântul cheie INCEPUT
, se termină cu SFARSIT
şi nu conţine structuri vide. De asemenea o structură compusă începe cu cuvântul cheie INCEPUT
şi se termină cu SFARSIT
.
Cerinţă
Să se calculeze numărul minim de date de test necesare pentru verificarea algoritmului.
Date de intrare
Din fişierul text algor.in
se citeşte algoritmul care conţine pe o linie un singur cuvânt cheie. Nu există linii vide. Algoritmul respectă principiile programării structurate şi este scris corect.
Date de ieșire
În fişierul algor.out
se va scrie pe prima linie numărul minim de date de test necesare pentru verificarea algoritmului. Verificarea se bazează pe principiul “cutiei transparente”, ceea ce înseamnă că testele se compun astfel încât să fie posibilă executarea algoritmului pe toate ramurile posibile. De exemplu, în cazul unei structuri repetitive CAT_TIMP
care conţine în corpul său un singur ATRIB
, un test vizează o execuţie fără să se intre în corpul structurii, altul pentru a trece cel puţin o dată şi prin corpul acestuia. În mod similar se tratează şi structura PENTRU
.
Restricții și precizări
- După cuvintele cheie
ATUNCI
,ALTFEL
,CAZ
,CAZ_IMPLICIT
,CAT_TIMP
,REPETA
,PENTRU
trebuie să existe obligatoriu o structură de atribuire, alternativă, de decizie, repetitivă sau compusă. - Algoritmul are cel mult de instructiuni.
Exemplul 1
algor.in
INCEPUT
atrib
DACA
atunci
ATRIB
SFARSIT
algor.out
2
Exemplul 2
algor.in
INCEPUT
ATRIB
REPETA
inceput
atrib
atrib
SFARSIT
SFARSIT
algor.out
1
Explicație
REPETA
se execută cel puţin o dată
Exemplul 3
algor.in
INCEPUT
ATRIB
ALEGE
CAZ
ATRIB
CAZ
INCEPUT
ATRIB
ATRIB
SFARSIT
SFARSIT
algor.out
3
Explicație
- se execută
ATRIB
de la primulCAZ
- se execută
ATRIB
de la al doileaCAZ
- nu se execută nici primul
CAZ
, nici al doilea
Exemplul 4
algor.in
INCEPUT
ATRIB
ALEGE
CAZ
ATRIB
CAZ
ATRIB
CAZ_IMPLICIT
ATRIB
SFARSIT
algor.out
3
Explicație
- se execută
ATRIB
de la primulCAZ
- se execută
ATRIB
de la al doileaCAZ
- se execută
ATRIB
de laCAZ_IMPLICIT
Exemplul 5
algor.in
INCEPUT
atrib
DACA
ATUNCI
ATRIB
ALTFEL
ATRIB
pentru
atrib
SFARSIT
algor.out
4
Explicație
- se execută
ATUNCI
şiPENTRU
- se execută
ATUNCI
şi nu se execută PENTRU` - se execută
ALTFEL
şiPENTRU
- se execută
ALTFEL
şi nu se executăPENTRU
Exemplul 6
algor.in
INCEPUT
PENTRU
INCEPUT
ATRIB
daca
atunci
atrib
altfel
INCEPUT
DACA
ATUNCI
ATRIB
DACA
ATUNCI
ATRIB
ALTFEL
ATRIB
SFARSIT
SFARSIT
SFARSIT
algor.out
6