C++ OD PODSTAW DO MATURY

Ciągi binarne - zadanie maturalne z roku 2017 (rozszerzenie, stara formuła)

W pliku binarne.txt znajduje się 500 napisów złożonych wyłącznie z zer i jedynek. W każdym wierszu umieszczony jest jeden napis. Każdy napis ma długość podzielną przez 4. Napisz program (lub programy), który da odpowiedzi do poniższych zadań. Odpowiedzi zapisz w pliku zadanie4.txt, każdą odpowiedź poprzedź numerem odpowiedniego zadania.

Zadanie 4.1 (0-4)

Napis nazywać będziemy dwucyklicznym, jeśli składa się on wyłącznie z dwóch powtórzeń tego samego napisu.

Przykład: Napis 10001000 jest dwucykliczny (składa się z dwóch powtórzeń napisu 1000), natomiast napisy 00011000 i 10001001 nie są dwucykliczne.

Podaj liczbę napisów dwucyklicznych w pliku binarne.txt, najdłuższy napis dwucykliczny z tego pliku oraz jego długość.

Zadanie 4.2 (0-2)

Napisy z pliku binarne.txt traktujemy jako binarne zapisy liczb dziesiętnych, w których każdy segment złożony z 4 znaków jest reprezentacją binarnego zapisu jednej cyfry (zapis taki nazywany jest kodem BCD).

Napis uznajemy za niepoprawny, gdy któryś z segmentów ma wartość większą niż 9 (czyli nie jest zapisem cyfry dziesiętnej). Przykład: Napis 10010111 jest poprawny i reprezentuje liczbę 97, natomiast napis 11010000 nie jest poprawny, gdyż jego pierwszy segment (1101) reprezentuje w zapisie binarnym większą od 9 liczbę 13. Podobnie nie jest poprawny napis 1110, ponieważ reprezentuje w zapisie binarnym liczbę 14.

Podaj liczbę niepoprawnych napisów z pliku binarne.txt oraz najmniejszą długość niepoprawnego napisu.

Zadanie 4.3 (0-4)

Napisy z pliku binarne.txt traktujemy teraz jako liczby naturalne w zwykłym zapisie binarnym, pomijamy jednak liczby większe niż 65 535. Wyznacz największą spośród tych liczb, podaj jej wartość w zapisie binarnym oraz w zapisie dziesiętnym.

Przykład: W pliku o zawartości: 1111000011110000 11110000111100001000 10100110 druga liczba jest pomijana (jako większa od 65 535), zatem największą liczbę wybieramy spośród 1111000011110000(2)=61680(10) oraz 10100110(2)=166(10). Odpowiedzią jest zatem para 1111000011110000, 61680.

Pliki z danymi

Rozwiązania

W nagłówku zdjęcie z Wenecji

Źródło: https://fshoq.com/free-photos/p/267/panorama-of-venice (publikowane na wolnych licencjach)