[C++] Ilosc wystąpień danej liczby
[C++] Ilosc wystąpień danej liczby
Cześć,
Potrzebuje waszej pomocy. Nie potrafię sobie poradzić z tym programem. Czy ktoś byłby tak skłonny pomóc ?
Potrzebuje program na jutro na zaliczenie na studia: Program, który zlicza w podanym przez użytkownika szeregu cyfr ilość wystąpień każdej liczby (od 0 do 9). Zliczanie się kończy, kiedy użytkownik wprowadza symbol inny niż liczba.
Bardzo proszę o pomoc.
Z góry dziękuję.
Potrzebuje waszej pomocy. Nie potrafię sobie poradzić z tym programem. Czy ktoś byłby tak skłonny pomóc ?
Potrzebuje program na jutro na zaliczenie na studia: Program, który zlicza w podanym przez użytkownika szeregu cyfr ilość wystąpień każdej liczby (od 0 do 9). Zliczanie się kończy, kiedy użytkownik wprowadza symbol inny niż liczba.
Bardzo proszę o pomoc.
Z góry dziękuję.
Ostatnio zmieniony 29 sty 2017, o 19:21 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Powód: Poprawa wiadomości.
[C++] Ilosc wystąpień danej liczby
Kod: Zaznacz cały
#include<iostream>
#include<string>
#include<cctype>// isdigit(), czyli sprawdzamy czy cyfra
using namespace std;
int main()
{
string tab;
bool only_digit=true;
int num_0=0,
num_1=0,
num_2=0,
num_3=0,
num_4=0,
num_5=0,
num_6=0,
num_7=0,
num_8=0,
num_9=0;
while(only_digit)
{
getline(cin,tab);
for(int i=0; i<tab.size() && only_digit; i++)
{
if(!isdigit(tab[i]))
only_digit=false;
else if(tab[i]=='0')
num_0++;
else if(tab[i]=='1')
num_1++;
else if(tab[i]=='2')
num_2++;
else if(tab[i]=='3')
num_3++;
else if(tab[i]=='4')
num_4++;
else if(tab[i]=='5')
num_5++;
else if(tab[i]=='6')
num_6++;
else if(tab[i]=='7')
num_7++;
else if(tab[i]=='8')
num_8++;
else if(tab[i]=='9')
num_9++;
}
}
cout<<"zer: "<<num_0<<endl;
cout<<"jedynek: "<<num_1<<endl;
cout<<"dwojek: "<<num_2<<endl;
cout<<"trojek: "<<num_3<<endl;
cout<<"czworek: "<<num_4<<endl;
cout<<"piatek: "<<num_5<<endl;
cout<<"szostek: "<<num_6<<endl;
cout<<"siodemek: "<<num_7<<endl;
cout<<"osemek: "<<num_8<<endl;
cout<<"dziewiatek: "<<num_9<<endl;
return 0;
}
-
- Użytkownik
- Posty: 1584
- Rejestracja: 16 maja 2013, o 17:56
- Płeć: Mężczyzna
- Lokalizacja: Trójmiasto
- Podziękował: 11 razy
- Pomógł: 245 razy
[C++] Ilosc wystąpień danej liczby
za tak napisany kod dostałbyś u mnie 1/10 punktów, 1 za to, że daje dobry wynik, o pozostałych 9 za styl możesz zapomnieć oddając taki ochłap zamiast porządnego kodu.
-
- Użytkownik
- Posty: 426
- Rejestracja: 29 paź 2015, o 16:26
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 21 razy
- Pomógł: 90 razy
[C++] Ilosc wystąpień danej liczby
Krótszy kod
Kod: Zaznacz cały
#include <iostream>
#include <string>
using namespace std;
int main()
{
string linia;
//pole tablicy o danym numerze przechowuje ilość wystąpień tego numeru
unsigned tablica_cyfr[10];
bool wystapienie_samych_cyfr=true;
for(int i=0;i<10;i++)
tablica_cyfr[i]=0;
cout<<"Podaj cyfry: ";
while(wystapienie_samych_cyfr)
{
getline(cin,linia);
for(unsigned i=0;i<linia.length();i++)
{
if(linia[i]>=48 && linia[i]<=57)
tablica_cyfr[linia[i]-48]++;
else if (linia[i]==32) {}
else
{
wystapienie_samych_cyfr=false;
break;
}
}
}
for(int i=0;i<10;i++)
cout<<"Cyfra "<< i <<" wystapila "<<tablica_cyfr[i]<<" razy."<<endl;
return 0;
}
- mortan517
- Użytkownik
- Posty: 3359
- Rejestracja: 6 lis 2011, o 15:38
- Płeć: Mężczyzna
- Lokalizacja: Krk
- Podziękował: 112 razy
- Pomógł: 662 razy
[C++] Ilosc wystąpień danej liczby
Skoro już napisałem w tym temacie, a nic od siebie nie dodałem, to postanowiłem sam spróbować swoich sił w naprawieniu tego kodu. Używam całej przestrzeni nazw bo to bardzo krótki kod. Moja wersja w C++14:
Kod: Zaznacz cały
#include <iostream>
#include <vector>
using namespace std;
int main()
{
//pobranie danych do stringa
string inputData{};
getline(cin, inputData);
//inicjalizacja stałej i wektora
auto numOfDigits{10};
vector<decltype(numOfDigits)> vecCounter(numOfDigits, 0);
//pętla z konwertującą typy lambdą
for(auto i=0; i<inputData.length(); i++)
{
auto myCharToIntFunc = [](auto ch) {return stoi(string{ch});};
if(!isdigit(inputData[i])) break;
else vecCounter[myCharToIntFunc(inputData[i])]++;
}
//pętla do wyswietlania
for(auto i=0; i<numOfDigits; i++)
cout << "Cyfra " << i << " wystepuje " << vecCounter[i] << " razy" << endl;
return 0;
}
-
- Użytkownik
- Posty: 1931
- Rejestracja: 29 maja 2009, o 11:58
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Podziękował: 145 razy
- Pomógł: 320 razy
[C++] Ilosc wystąpień danej liczby
Tu już 8.5/10.
Ogólnie przekombinowałeś, aby użyć niuansów standardu
Kod: Zaznacz cały
#include <iostream>
#include <vector>
// brak #include <string>
using namespace std;
Kod: Zaznacz cały
string inputData{}; // niepotrzebnie klamry, wywołałby się domyślny konstruktor który stworzy pusty string
Kod: Zaznacz cały
vecCounter(numOfDigits, 0) // analogicznie, domyślnie wektor ma ustawione wszelkie wartości na zero
Kod: Zaznacz cały
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string inputData;
getline(cin, inputData);
size_t numOfDigits{10};
vector<size_t> vecCounter(numOfDigits);
for(const auto &it : inputData)
if(isdigit(it))
++vecCounter[it - '0'];
size_t i = 0;
for(const auto &it : vecCounter)
cout << "Cyfra " << i++ << " wystepuje " << it << " razy" << endl;
return 0;
}
- mortan517
- Użytkownik
- Posty: 3359
- Rejestracja: 6 lis 2011, o 15:38
- Płeć: Mężczyzna
- Lokalizacja: Krk
- Podziękował: 112 razy
- Pomógł: 662 razy
[C++] Ilosc wystąpień danej liczby
kalwi, spodziewałem się, że tak będzie, mam takie tendencje Chciałem po prostu jawnie zaznaczyć czym inicjalizuję. Od siebie dodam, że można jeszcze użyć metody at na wektorze zamiast operatora indeksowania.
-
- Użytkownik
- Posty: 1931
- Rejestracja: 29 maja 2009, o 11:58
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Podziękował: 145 razy
- Pomógł: 320 razy
[C++] Ilosc wystąpień danej liczby
No można, fakt, zawsze to jakieś sprawdzenie czy zakresu się nie przekroczyło. A nawet można by tutaj słownik (std::map) wykorzystać, ale to też przesada.
Pamiętaj, że najważniejszą zasadą w programowaniu jest KISS - Keep It Simple Software
Pamiętaj, że najważniejszą zasadą w programowaniu jest KISS - Keep It Simple Software
-
- Użytkownik
- Posty: 426
- Rejestracja: 29 paź 2015, o 16:26
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 21 razy
- Pomógł: 90 razy
[C++] Ilosc wystąpień danej liczby
Moja druga wersja programu:
(dla ludzi o mocnych nerwach )
(dla ludzi o mocnych nerwach )
Ukryta treść:
-
- Użytkownik
- Posty: 1931
- Rejestracja: 29 maja 2009, o 11:58
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Podziękował: 145 razy
- Pomógł: 320 razy
[C++] Ilosc wystąpień danej liczby
Kod: Zaznacz cały
printf("Numeral %d appeared %d times.
", i, *indicator_digit_table);