Fişierul intrare/ieşire:paritate.in, paritate.outSursăOJI 2007, clasa a 9-a
AutorMarinel SerbanAdăugată deFlorianFlorian Marcu Florian
Timp execuţie pe test0.025 secLimită de memorie5120 kbytes
Scorul tăuN/ADificultateN/A

Vezi solutiile trimise | Statistici

Paritate

In vederea asigurarii unei transmiteri cat mai exacte a informatiilor pe retea, transmiterea se efectueaza caracter cu caracter, fiecare caracter fiind dat prin codul sau ASCII, adica o grupa de 8 biti (octet). Pentru fiecare 8 biti transmisi se calculeaza un bit de paritate care are valoarea 0 (daca codul ASCII al caracterului contine un numar par de cifre binare 1) sau 1 (in caz contrar). Deoarece in problema noastra se transmit numai caractere ASCII standard, cu codul ASCII din intervalul [32,127], codul lor ASCII are bitul 7 (primul bit din stanga) egal cu 0. Pe aceasta pozitie va fi pus bitul de paritate, economisind astfel cate un bit pentru fiecare caracter transmis. De exemplu, daca mesajul care trebuie trasmis contine caracterele "Paritate", succesiunea de biti transmisa va fi:
01010000 11100001 01110010 01101001 01110100 11100001 01110100 01100101
In plus, pe langa caracterele amintite, in mesaj mai poate sa apara un caracterul special, caracter care indica trecerea la inceputul unui nou rand. Acest caracter are codul ASCII 10.

Cerinta

Sa se scrie un program care sa verifice daca un text a fost sau nu transmis corect.

Date de intrare

Fisierul de intrare paritate.in are pe prima linie o succesiune de caractere '0' si '1' care reprezinta mesajul transmis. Intre caractere nu exista spatii. Linia se termina cu caracterul marcaj de sfarsit de linie (newline).

Date de iesire

Fisierul de iesire paritate.out are pe prima linie mesajul DA daca textul a fost transmis corect sau NU in caz contrar. In cazul in care mesajul de pe prima linie este DA liniile urmatoare vor contine textul transmis in clar. In cazul in care mesajul de pe prima linie este NU linia urmatoare va contine numerele de ordine ale caracterelor care nu au fost transmise corect, in ordine strict crescatoare, separate prin cate un spatiu. 

Restrictii

  • Cei 8 biti ai codului ASCII a unui caracter se numeroteaza de la 0 la 7, de la dreapta la stanga, cel mai din stanga bit fiind bitul 7 iar cel mai din dreapta bitul 0.
  • Textul transmis are cel mult 60000 caractere.
  • Numarul de caractere '0' si '1' din prima linie a fisierului de intrare este multiplu de 8.
  • Codurile ASCII ale caracterelor din text apartin multimii {10, 32-127}, codul 10 insemnand trecerea la inceputul unui rand nou.
  • Nici o linie din fisierul de iesire nu va avea mai mult de 255 caractere.
  • Caracterele din text sunt numerotate incepand de la 0.
  • Mesajele DA/NU din prima linie a fisierului de iesire se scriu cu majuscule.

Exemplu

paritate.inparitate.out
0101000011100001011100100110100101110100111000010111010001100101
DA
Paritate
1101000011100001111100100110100101110100111000010111010011100101
NU
0 2 7
010000011111101001101001000010100110010100001010011010100110111101101001
DA
Azi
e
joi

Explicatie

In primul exemplu toate codurile sunt corecte. In cel de-al doilea, primul caracter a fost transmis ca succesiune de biti 11010000 ceea ce inseamna ca fara bitul de paritate ar fi trebuit sa existe un numar impar de cifre 1, ceea ce este fals. Deci caracterul nu a fost transmis corect. Acelasi lucru se verifica si pentru caracterele cu numerele de ordine 2 si 7. In cel de-al treilea exemplu, toate codurile sunt transmise corect, existand doua caractere cu codul ASCII 10.

Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?

remote content