Algor

Time limit: 0.1s Memory limit: 2MB Input: algor.in Output: algor.out

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 (unde ALTFEL poate lipsi)
  • pentru selecţie ALEGE
    • CAZ
    • CAZ_IMPLICIT (unde CAZ_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 127127 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 primul CAZ
  • se execută ATRIB de la al doilea CAZ
  • 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 primul CAZ
  • se execută ATRIB de la al doilea CAZ
  • se execută ATRIB de la CAZ_IMPLICIT

Exemplul 5

algor.in

INCEPUT 
atrib 
DACA 
ATUNCI 
ATRIB
ALTFEL
ATRIB
pentru
atrib
SFARSIT

algor.out

4

Explicație

  • se execută ATUNCI şi PENTRU
  • se execută ATUNCI şi nu se execută PENTRU`
  • se execută ALTFEL şi PENTRU
  • 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

Log in or sign up to be able to send submissions!