Witam.
języka C++ uczę się krótko i pomimo że miałem go również w szkole, nadal mam z nim problemy. Dostałem zadanie do wykonania o takiej treści:
W pliku napisy.txt znajduje się 1000 napisów o długościach od 2 do 16 znaków, każdy napis w osobnym wierszu. W każdym napisie mogą wystąpić jedynie dwa znaki: „0” lub „1”. W wybranym przez siebie języku programowania napisz program, za pomocą którego uzyskasz odpowiedzi na poniższe polecenia.
Odpowiedzi zapisz w pliku zadanie4.txt, a odpowiedź do każdego podpunktu poprzedź literą oznaczającą ten podpunkt.
a) Podaj, ile jest napisów o parzystej długości.
b) Podaj, ile jest napisów, które zawierają taką samą liczbę zer i jedynek.
c) Podaj, ile jest napisów składających się z samych zer, oraz podaj, ile jest napisów składających się z samych jedynek.
d) Dla każdej liczby k = 2, 3, ...,16 podaj liczbę napisów o długości k znajdujących się w pliku napisy.txt, tzn. podaj, ile jest napisów 2-znakowych, ile jest napisów 3-znakowych itd.
Zrobiłem podpunkty a, b oraz c, lecz przy ostatnim podpunkcie mam problem. Chodzi dokładnie o to, że program zamiast wypisywać mi ilość napisów o danej długości, wypisuje mi jedną i ciągle tą samą liczbę (podejrzewam że po prostu zlicza długości wszystkich wyrazów).
Wszystkie podpunkty mam w jednym pliku napisane, więc wklejam tylko fragment kodu odpowiedzialny za niedziałający podpunkt d).
A oto kod:
int ileZnakow=1;
while(plik>>linijka)
{
for(int i=0;i<linijka.size();i++)
{
for(int k=2; k<17; k++)
{
if(linijka.size()==k)
{
ileZnakow++;
}
}
}
}
for(int j=2;j<17;j++)
wyjscie<<"k="<<j<<" : "<<ileZnakow<<endl;
A taki dostaje wynik w pliku "zadanie4.txt":
k=2 : 9617
k=3 : 9617
k=4 : 9617
k=5 : 9617
k=6 : 9617
k=7 : 9617
k=8 : 9617
k=9 : 9617
k=10 : 9617
k=11 : 9617
k=12 : 9617
k=13 : 9617
k=14 : 9617
k=15 : 9617
k=16 : 9617
Mógłby ktoś wskazać gdzie mam błąd, lub co powinienem zrobić, aby program zadziałał? Byłbym też wdzięczny za wytłumaczenie dlaczego w taki sposób a nie inny się to ma odbywać.
Z góry dzięki za pomoc.