Mam takie oto zadanie:
Dla każdej liczby z pliku liczby.txt oblicz sumę jej cyfr. Podaj wszystkie liczby, których suma cyfr jest większa od 30, w kolejności, w jakiej występują w tym pliku. Ponadto podaj sumę wszystkich cyfr użytych do zapisu wszystkich liczb z pliku liczby.txt
Czy jest w stanie ktoś pomóc? Przynajmniej zliczaniem sumy cyfr za pomocą podstawowych funkcji, męczę się i nic nie wychodzi.
- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:9
- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:9
Zrobiłem takie coś, żeby policzyć samą sumę cyfr wszystkich liczb, wyskakuje błąd w linii 16.
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char** argv)
{
string liczba;
int wynik = 0;
ofstream file;
ifstream wyniki5;
wyniki5.open("wyniki5.txt");
file.open("liczby.txt");
while (!file.eof())
{
file>>liczba;
while (liczba > 0)
{
wynik += liczba%10;
liczba /= 10;
}
}
wyniki5<< "Suma cyfr podanej liczby wynosi: " << wynik;
wyniki5.close();
liczby.close();
return 0;
}

- Rejestracja:ponad 7 lat
- Ostatnio:3 miesiące
- Postów:179
Witam.
Jeżeli masz jakiś kod to go wklej. Łatwiej będzię pomóc.
Również przykładowy wygląd takiego pliku liczby.txt to było by super.
Masz kod który pozwoli ci przekształcić tekst na liczbę. *Jeżeli ktoś będzie miał zastrzeżenia do mojego kodu to proszę pisać śmiało. Sam chętnie zobaczę *
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int suma=0;
string tekst;
cin>>tekst;
suma=(int)log10(atoi(tekst.c_str()))+1;
cout<<suma<<endl;
return 0;
}
Życzę miłego dnia.


- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:9
Tu kod(wyskakuje błąd (file>>liczba;), załączam liczby
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char** argv)
{ ofstream file;
ifstream file2;
file2.open("wyniki5.txt");
file.open("liczby.txt");
string liczba;
int wynik = 0;
while (!file.eof())
{
file>>liczba;
while (liczba > 0)
{
wynik += liczba%10;
liczba /= 10;
}
}
file2<< "Suma cyfr podanej liczby wynosi: " << wynik;
file2.close();
liczby.close();
return 0;
}
- liczby.txt (0 KB) - ściągnięć: 58


- Rejestracja:prawie 12 lat
- Ostatnio:około 10 godzin
- Lokalizacja:Szczecin
Przesadnie się męczysz. Wczytuj stringa, w nim sumuj cyfry (znak - '0'
to wartość cyfry).
Cały program można zmieścić w jednej pętli i kilku linijkach:
size_t sum_of_digits(std::string const& s)
{
size ret = 0;
for(char c : s)
ret += c - '0';
return ret;
}
int main()
{
std::string s;
size_t total = 0;
std::ifstream f("plik.txt");
while(f >> s) {
size_t this_word = sum_of_digits(s);
total += this_word;
if(this_word > 30)
std::cout << s << '\n';
}
std::cout << "total: " << total << '\n';
}
- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:9
kq napisał(a):
Przesadnie się męczysz. Wczytuj stringa, w nim sumuj cyfry (znak -
'0'
to wartość cyfry).Cały program można zmieścić w jednej pętli i kilku linijkach:
size_t sum_of_digits(std::string const& s) { size ret = 0; for(char c : s) ret += c - '0'; return ret; } int main() { std::string s; size_t total = 0; std::ifstream f("plik.txt"); while(f >> s) { size_t this_word = sum_of_digits(s); total += this_word; if(this_word > 30) std::cout << s << '\n'; } std::cout << "total: " << total << '\n'; }
Powiem szczerze, sam coś skubałem z std:: etc. lecz gość nie akceptuje od nas takich rozwiązań, on chce same podstawy, stąd tyle roboty, żeby jakoś inaczej to zrobić.
- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:9
Nawet sama linijka 1 to już za dużo, tu leży problem, muszę to napisać bez żadnych udziwnień :(
- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:9
kq napisał(a):
Użycie funkcji to udziwnienie? :D
Mówiąc z wielkim bólem serca, nie może być użyta przestrzeń nazw :P
- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:9
kq napisał(a):
Sam używasz.
Mój błąd, wybacz, zawsze używałem zapisu using namespace std; stąd ten błąd, głupio mi, niestety tak już jest na początkach.
- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:9
Podsumowując, czy jest szansa, abyś pomógł mi zrobić korektę w tym kodzie?
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char** argv)
{ ofstream file;
ifstream file2;
file2.open("wyniki5.txt");
file.open("liczby.txt");
string liczba;
int wynik = 0;
while (!file.eof())
{
file>>liczba;
while (liczba>0)
{
wynik =+ liczba%10;
liczba /= 10;
}
}
file1.close();
file2<< "Suma cyfr podanej liczby wynosi: " << wynik;
file2.close();
return 0;
}

- Rejestracja:prawie 12 lat
- Ostatnio:dzień
- Postów:1027
Na początku warto sobie sformatować kod:
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char** argv)
{
ofstream file;
ifstream file2;
file2.open("wyniki5.txt");
file.open("liczby.txt");
string liczba;
int wynik = 0;
while (!file.eof()) {
file >> liczba;
while (liczba>0) {
wynik =+ liczba%10;
liczba /= 10;
}
}
file1.close();
file2 << "Suma cyfr podanej liczby wynosi: " << wynik;
file2.close();
return 0;
}
Jak już zmienisz typ zmiennej liczba
na faktyczną liczbę (a nie ciąg znaków), to będzie widać co jest źle - ta linijka jest błędna:
wynik =+ liczba%10;
Teraz Twoim zadaniem jest zastanowić się dlaczego.
- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:9
enedil napisał(a):
Na początku warto sobie sformatować kod:
#include <iostream> #include <fstream> using namespace std; int main(int argc, char** argv) { ofstream file; ifstream file2; file2.open("wyniki5.txt"); file.open("liczby.txt"); string liczba; int wynik = 0; while (!file.eof()) { file >> liczba; while (liczba>0) { wynik =+ liczba%10; liczba /= 10; } } file1.close(); file2 << "Suma cyfr podanej liczby wynosi: " << wynik; file2.close(); return 0; }
Jak już zmienisz typ zmiennej
liczba
na faktyczną liczbę (a nie ciąg znaków), to będzie widać co jest źle - ta linijka jest błędna:wynik =+ liczba%10;
Teraz Twoim zadaniem jest zastanowić się dlaczego.
Powinno być wynik += liczba%10;?

wynik = (+ liczba % 10)
.

- Rejestracja:prawie 12 lat
- Ostatnio:około 10 godzin
- Lokalizacja:Szczecin
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.