Wczytanie danych z pliku do tablicy i określenie parzystości liczb

0

Witajcie, mam problem z wczytaniem danych do tablicy i potem określenie parzystości liczb które znajdują się w każdej linii.
Przykładowy fragment pliku:
11101101110011
101110
1001100011100101
10010111000
1100000
101011110
100110010
101111001101100
110010
110000100000011
10101101010011
110110001010110
1110110
111111101100010
110110
1000111101
1001000001100110
1100011100100
1101000110110000
111111111000000
110111011010001
10100
100011100110110
10101100000011
1111010101001
11100001110110
111010001
111001101

Mój kod na oczytanie pliku i zapisanie go to tablicy:

#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
#include <cstdlib>

using namespace std;

int main () {
  string line;
 long int liczba;
  ifstream myfile ("liczby.txt");
  if (myfile.is_open())
  {
    while ( myfile.good())
    {
      getline (myfile,line);
      liczba = atoi(line.c_str());
      if(liczba % 2==0){
     
      cout << "parzysta" << liczba << endl;
      }
    }
    myfile.close();
  }

  else cout << "Unable to open file"; 

  return 0;
}


Mam problem teraz.
Podczas wypisywania liczb parzystych pokazują mi się inne liczby i liczby z minusem, a takich nie ma. Myśle że nie mieszcza sie one do tablicy bo jest za mała. I tak już musiałem przeprowadzić konwersje. Ale przy ustawieniu typu na float czy double dostaje bład:
invalid operants of type double to binary operator%

Nie wiem co zrobić.

Pozdrawiam

0

liczby z pliku nie mieszczą się w typie zwracanym przez atoi.

0

dobrze, ale jak wtedy mam to rozwiązać?

0

Najlepiej zmniejsz liczby w pliku, maks 2147483247 ;>

0

O tym to wiem..
Plik nie jest taki duży, ma tylko 13 kb. Myślałem żeby to jakoś prze konwertować. Tylko nie wiem jak. Ma ktoś jakieś pomysły?

0

jeśli w zadaniu nie masz powiedziane, że musisz koniecznie wczytać do tablicy to lepiej po prostu wczytuj tylko ostatnią cyfrę tej liczby.
poza tym możesz zrobić coś takiego:

#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main () {
  ifstream myfile ("liczby.txt");
  if (myfile.is_open())
  {
    __int64 liczba; // lub long long int
    while ( myfile >> a)
    {
      if(liczba % 2==0){
 
      cout << "parzysta" << liczba << endl;
      }
    }
    myfile.close();
  }
 
  else cout << "Unable to open file"; 
 
  return 0;
}
0

no dobra, ale jak to zrobić?

druga sprawa: jeżeli było by w zadaniu określone że dane muszą wędrować do tablicy to jak to rozwiązać?

edit: twój kod nie działa

0

ok, mam coś takiego:

 #include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
#include <cstdlib>
 
using namespace std;
 
int main () {
  string line;
  __int64 liczba;
  ifstream myfile ("liczby.txt");
  if (myfile.is_open())
  {
    while ( myfile.good())
    {
      getline (myfile,line);
      liczba = atoi(line.c_str());
      if(liczba % 2==0){
 
      cout << "parzysta" << line << endl;
      }
      else
      {
          cout << "nieparzysta" << line << endl;
      }
    }
    myfile.close();
  }
 
  else cout << "Unable to open file"; 
 
  return 0;
}
 

Działa poprawnie (tak mi się wydaje), ale zostawia ostatnie 4 linijki jako parzysta bez podania liczby jak to jest w kodzie. Teraz moje pytanie: jak policzyć liczbę liczb parzystych?

0

wszystko śmiga już, teraz pozostało mi wskazać liczbę liczb parzystych

0
      if(liczba % 2==0){
      static int licznik = 0; // tylko, że ładniej
      licznik++; 
      cout << "parzysta" << line << endl;
      }

Tylko zrób to ładniej.

0

zobacz komentarz pod tym kodem co Ci wkleiłem

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