Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- void DigitCountSum_pointers(int* X, int* C, int* S) {
- // *X zwraca nam wartosc zmiennej na ktora wskazuje wskaznik
- // X zwraca nam wartosc adresu zmiennej na ktora pokazuje wskaznik
- //// troche wiecej o wskaznikach...
- // int a = 5;
- // int* X = &a; // &a zwraca nam adres zmiennej a;
- // cout << X; // wyswietla nam adres zmiennej X
- // cout << *X; // wyswietla nam zmienna X
- // Pierwszy sposob rozwiazania zadania:
- // przygotowujemy sobie bufor na nasza liczbe, jest to tablica o rozmiarze 100 (tak duze na wypadek gdybysmy podali jakas mega duza iczbe)
- char numberAsText[100];
- // konwertujemy liczbe na tekst
- sprintf_s(numberAsText, "%d", *X);
- // obliczamy ilosc znakow w tablicy
- *C = strlen(numberAsText);
- // petla zakresowa for przechodzi po wszystkich elementach.
- // zapisuje do digit kazda cyfre po kolei az do konca
- *S = 0;
- for (int i = 0; i < *C; i++) {
- char digit = numberAsText[i];
- *S += atoi(&digit);
- }
- // char niestety zapisuje znak(liczbe) np. '1' jako kod ASCII wiec odejmujemy od tej tego kodu '0' i otrzymujemy liczbe z tego tekstu
- // konwertujemy na inta i gotowe :)
- // digit jest typu char a stoi przyjmuje stringa jako parametr wiec dokonujemy konwersji z char do string
- }
- void DigitCountSum_reference(int& X, int& C, int& S) {
- // referencja polega na tym, ze przekazujemy do funkcji wartosc zmiennej a nie jej kopie, wiec...
- // jezeli zmienimy wartosc X w funkcji to po wyjsciu z niej w main'ie X bedzie mialo nowa wartosc.
- // drugie rozwiazanie polega na tym ze dzielimy przez 10 az nasza liczba nie bedzie rowna 0
- int x = X; // robimy kopie zeby nie zmieniac X
- C = 0;
- S = 0;
- while (x != 0) {
- x = x / 10;
- C++; // :)
- }
- // Jezeli znamy juz liczbe cyfr to mozemy podobnie policzyc ich sume
- S = 0;
- x = X;
- while (x != 0) {
- S = S + x % 10;
- x = x / 10;
- }
- }
- int main() {
- int number{ 0 }, digits{ 0 }, digitsSum{ 0 };
- for (int i = 0; i < 5; i++) {
- std::cout << "Podaj liczbe: ";
- std::cin >> number;
- DigitCountSum_pointers(&number, &digits, &digitsSum);
- std::cout << "pointers #Liczba " << number << " sklada sie z " << digits << " cyfr, a ich suma to " << digitsSum << "\n";
- DigitCountSum_reference(number, digits, digitsSum);
- std::cout << "reference #Liczba " << number << " sklada sie z " << digits << " cyfr, a ich suma to " << digitsSum << "\n\n";
- }
- std::cin.get();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement