zadanie napisy c++

0

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.

ifstream in ("napisy.txt");
ofstream out("zadanie4.txt");
string slowo;
int dl, ile_parzystych=0,ile_1=0,ile_0=0,ile_rownych=0;
while (!in.eof())
{
in>>slowo;
dl=slowo.size();
/* if(dl%2==0)
ile_parzystych++; */
for ( int i=0; i<=dl-1; i++)
{

        if (slowo[i]=='1') ile_1++;
        else
        if (slowo[i]=='0') ile_0++;
    }
        if (ile_1==ile_0)
        ile_rownych++;    
}

    //cout<<ile_parzystych<<endl;
    cout<<ile_rownych; 

Powie mi ktos gdzie jest błąd w podpukncie b? prawidlowa odpowiedz to 110, moja to 1, dane w załączniku (jeśli masz pisac, swoje żale na temat sposobu nauki programowania młodych adeptow informatyki w szkolach srednich to nie pisz) pozdrawiam ;)

0
Wielki Kaczor napisał(a):

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.
ifstream in ("napisy.txt");
ofstream out("zadanie4.txt");
string slowo;
int dl, ile_parzystych=0,ile_1=0,ile_0=0,ile_rownych=0;
while (!in.eof())
{
in>>slowo;
dl=slowo.size();
/* if(dl%2==0)
ile_parzystych++; */
for ( int i=0; i<=dl-1; i++)
{

        if (slowo[i]=='1') ile_1++;
        else
        if (slowo[i]=='0') ile_0++;
    }
        if (ile_1==ile_0)
        ile_rownych++;    
}

    //cout<<ile_parzystych<<endl;
    cout<<ile_rownych; 
> 
> 
> Powie mi ktos gdzie jest błąd w podpukncie b? prawidlowa odpowiedz to 110, moja to 1, dane w załączniku (jeśli masz pisac, swoje żale na temat sposobu nauki programowania młodych adeptow informatyki w szkolach srednich to nie pisz) pozdrawiam ;)EDIT : przepraszam za brak znacznikow nie wiem czemu sie nie dodały :/
0

Na pewno jednym z błędów jest to, że po wykonaniu pętli zliczajacej 1 i 0, nie zerujesz potem ile_1 i ile_0.

0
 	ile_parzystych++;	
			for ( int i=0; i<=dl-1; i++)
		{
			ile_1=0,ile_0=0;
			if (slowo[i]=='1') ile_1++;
			else
			if (slowo[i]=='0') ile_0++;
		
		}
		
			if (ile_1==ile_0)
			ile_rownych++;
			ile_1=0,ile_0=0;			
	} 

o to chodziło ?- wynik o 1 mniejszy

0

Teraz to już 2 razy wyzerowales .
Mam na myśli, że za każdym razem kiedy wykonujesz pętlę - zerujesz. I w ostateczności, jak już pętla się skończy ile_0=1 lub ile_1=1, dlatego Ci pewnie 0 wyszło

0
-Lary- napisał(a):

Teraz to już 2 razy wyzerowales .
Mam na myśli, że za każdym razem kiedy wykonujesz pętlę - zerujesz. I w ostateczności, jak już pętla się skończy ile_0=1 lub ile_1=1, dlatego Ci pewnie 0 wyszło

_parzystych++;	
			for ( int i=0; i<=dl-1; i++)
		{
			ile_1=0,ile_0=0; //zerowanie
			if (slowo[i]=='1') ile_1++;
			else
			if (slowo[i]=='0') ile_0++;
		} 
tak mam to wyzerowac ?
0

Nie, zerujesz dopiero po:

  1. Po wyjściu z pętli
  2. Po sprawdzeniu czy ilość 1 jest równa ilości 0.
    Nadal zerujesz na początku pętli.
    Mowiac, że za każdym razem kiedy wykonujesz pętlę - zerujesz, miałem na myśli że to jest błąd.
    Daj zerowanie po sprawdzeniu czy ile_0= ile_1
0

odpowiedz ta sama, znalazlem program ktory daje poprawny wynik i wedlug mnie moj jest praktycznie identyczny

 int dlugosc = 0, licznik = 0, liczba_zer = 0;
   string napis; 
   ifstream dane;
   ofstream odpowiedz;
   dane.open("napisy.txt");
   odpowiedz.open("zadanie4b.txt");
   while (dane >> napis)
   {
     dlugosc = napis.size();
     if (dlugosc % 2 == 0)
     {
       for (int i = 0; i < dlugosc; i++)
       {
         if (napis[i] == '0')
         liczba_zer++;
       }
       if (liczba_zer == dlugosc / 2)
       licznik++;
     }
     liczba_zer = 0;
   }
   odpowiedz << licznik;
   dane.close();
   odpowiedz.close(); 
0
int main ()
{
	 ifstream in ("napisy.txt");
	ofstream out("zadanie4.txt");
	string slowo;
	int dl=0, ile_parzystych=0,ile_1=0,ile_0=0,ile_rownych=0,ile_slow;
	while (!in.eof())
	{
		in>>slowo;
		{
		
		if(dl%2==0)
		ile_parzystych++;	
		{
		
			for ( int i=0; i<dl; i++)
		{
			if (slowo[i]=='0')
			ile_0++;
			if (slowo[i]=='1')
			 ile_1++;
		}
			if (ile_0== ile_1)
			ile_rownych++;
		}
		ile_0=0;
		ile_1=0;
						
		//cout<<ile_parzystych<<endl;
		}
	}
	cout<<ile_rownych<<endl; 

poprawna odpowiedz temat do zamkniecia

1 użytkowników online, w tym zalogowanych: 0, gości: 1