liczby parzyste w pliku

0

Witam probuje rozwiazac podpunkt a) z 4. , z :
http://pobieranie.dlastudenta[...]ra/2012/informatyka/pp_a2.pdf

mój kod :

  #include<iostream>
#include<fstream>
#include<conio.h>
#include<sstream>

using namespace std;

int main()
{
    fstream plik;
    ofstream zapis;
    string cyfry;
     int  p ;

          plik.open     ("e:/cyfry.txt" ,ios::in);
          zapis.open ("e:/zapiscyfry.txt",ios::out);

while(! plik.eof())
{
    getline(plik,cyfry);
if (cyfry % 2 ==0)
    { p++    }

}
zapis<<p<<endl;

    getch();
}

bład w :

if (cyfry % 2 ==0)
    { p++    }

tu tez pytanie czy moge adresowac takie cos do stringa jakby , hm ?

0

Podzielnosc ostatniego znaku

1

Ja bym p nadał na początek wartość zero, bo inaczej ci głupoty wyjdą. poza tym musisz albo od razu wczytać jako liczbę, albo skonwertować stringa na liczbę.

0

cos dalej nie dziala, probowalem to zrobic za pomoca sstream:

  #include<iostream>
#include<fstream>
#include<conio.h>
#include<sstream>

using namespace std;

int main()
{
    fstream plik;
    ofstream zapis;
    string cyfry;
    stringstream liczby;

    int p;

    plik.open( "e:/cyfry.txt", ios::in );
    zapis.open( "e:/zapiscyfry.txt", ios::out );

    while( !plik.eof() )
    {
        getline( plik, cyfry );
        liczby << cyfry;
        if( liczby % 2 == 0 )
        { p++ }

    }
    zapis << p << endl;

    getch();
}
0

możesz też wczytać to normalnie do stringa i sprawdzić ostatni znak w stringu (pamiętaj żeby tak wczytać by były same liczby)

wersja c++11

char ostatniZnak= lanuch.back();
if (ostatniZnak == '2' || 
    ostatniZnak == '4' || 
    ostatniZnak == '6' || 
    ostatniZnak == '8' || 
    ostatniZnak == '0')
{
  std::cout << "patrzysta!"
}

wersja bez c++11

int ostatniIndeks = lancuch.size();
char ostatniZnak = lanuch[ostatniIndeks];
if (ostatniZnak == '2' || 
    ostatniZnak == '4' || 
    ostatniZnak == '6' || 
    ostatniZnak == '8' || 
    ostatniZnak == '0')
{
  std::cout << "patrzysta!"
}

sposób może nie jest piękny, ale dla początkującego powinien być łatwy w napisaniu samodzielnie. Albo zrób jak się powinno i od razu wczytuj do zmiennej np long long int i sprawdzaj ostatni bit czy jest 1 czy 0 (albo jak wolisz to zrobisz modulo 2)

1
    string liczba="1234567";
    cout<<(liczba[liczba.size()-1]-'0')%2<<"\n";
    unsigned suma=0;
    for(unsigned i=0;i<liczba.size();i++)
        suma+=(liczba[i]-'0');
    cout<<suma;

Tak w ogóle co za paradoks, że te wszystkie programiki są na prawdę proste, a jednak... Podczas przygotowań do matury rozwalałem wszystkie, a na akurat mojej maturze zdarzył się jeden program z którym miałem jeszcze problem na pierwszym roku..

0

dobra a) zrobiłem tak, teraz b) :D

#include<iostream>
#include<fstream>
#include<conio.h>
#include<sstream>

using namespace std;

int main()
{
    fstream plik;
    ofstream zapis;
    string cyfry;
 //   stringstream liczby;
   int kill;
     int  p ;
p=0;
          plik.open     ("e:/cyfry.txt" ,ios::in);
          zapis.open ("e:/zapiscyfry.txt",ios::out);

while(! plik.eof())
{

    getline(plik,cyfry);
     istringstream iss(cyfry);  // cyfry string
    iss >> kill;
   // liczby<<cyfry;
if (kill % 2 ==0)
    {

     p++  ; }

}
zapis<<p<<endl;

    getch();
}
3

To robi to samo co kod wyżej, tylko że napisano w miarę po ludzku

#include <iostream>
#include <fstream>
using namespace std;

int main()
  {
   int count=0,value;
   ifstream plik("e:/cyfry.txt");
   while(plik>>value) count+=1-(value&1);  // ewentualnie if(value%2==0) ++count;
   ofstream("e:/zapiscyfry.txt")<<count<<endl;
   cin.get();
   return 0;
  }

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