Mam plik cyfry.txt
, w którym znajduje się 1000 liczb naturalnych, każda w nowym wierszu mniejszych niż 109. Program ma zapisywać rozwiązania w pliku zadanie4.txt
.
a) ile jest liczb parzystych?
b) największa i najmniejsza suma cyfr
c) wypisać wszystkie liczby których cyfry tworzą ciąg rosnący
Moje wypociny:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
using namespace std;
int main(int argc, char *argv[]){
fstream plik,plik1;
int parzyste=0,liczba=0,liczba_a=0,najw=0,najw_l=0,najm=81,najm_l=0,suma=0;
string wyraz;
bool rosnace=1;
char sciezka[256];
//-------------
cout<<"Podaj sciezke do pliku\n\nsciezka: ";
cin>>sciezka;
plik.open("cyfry.txt", ios::in);
plik1.open("zadanie4.txt", ios::out);
//-------------
for (int i=1;i<=1000;i++){
getline(plik,wyraz);
stringstream konw(wyraz);
konw>>liczba;
if (liczba%2==0) parzyste++;
}
plik1<<"a)\n\nParzystych liczb: "<<parzyste<<"\n\n";
//-------------
for (int j=1;j<=1000;j++){
getline(plik,wyraz);
stringstream konw(wyraz);
konw>>liczba;
liczba_a=liczba;
while (liczba!=0) {
suma+=liczba%10;
liczba/=10;
}
if (suma>najw) {
najw=suma;
najw_l=liczba_a;
}
if (suma<najm) {
najm=suma;
najm_l=liczba_a;
}
}
plik1<<"b)\n\nNajwieksza sume cyfr: "<<najw<<" ma liczba: "<<najw_l<<"\nNajmniejsza sume cyfr: "<<najm<<" ma liczba: "<<najm_l<<"\n\n";
//-------------
plik1<<"c)\n\n";
for (int k=1;k<=1000;k++){
getline(plik,wyraz);
stringstream konw(wyraz);
konw>>liczba;
liczba_a=liczba;
liczba=liczba%10;
if (liczba!=0&&rosnace==1) {
liczba/=10;
if (liczba%10<liczba && rosnace==1){
rosnace=1;
liczba=liczba%10;
}else {
rosnace=0;
}
}
if (rosnace==1) plik1<<liczba_a<<endl;
}
//-------------
plik.close();
plik1.close();
system("PAUSE");
return EXIT_SUCCESS;
}
Co z tego wychodzi:
a) 495 - myślę, że dobrze
b) najmniejsza i największa tak samo - ostatnia liczba w pliku i suma jej cyfr
c) wypisują się same zera
Co z tym zrobić, żeby działało?