Advertisement
Guest User

Zadanie 2

a guest
Dec 6th, 2019
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.45 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3.  
  4.  
  5. void DigitCountSum_pointers(int* X, int* C, int* S) {
  6.     // *X zwraca nam wartosc zmiennej na ktora wskazuje wskaznik
  7.     // X zwraca nam wartosc adresu zmiennej na ktora pokazuje wskaznik
  8.  
  9.     //// troche wiecej o wskaznikach...
  10.     // int a = 5;
  11.     // int* X = &a;     // &a zwraca nam adres zmiennej a;
  12.     // cout << X;       // wyswietla nam adres zmiennej X
  13.     // cout << *X;      // wyswietla nam zmienna X
  14.  
  15.     // Pierwszy sposob rozwiazania zadania:
  16.  
  17.     // przygotowujemy sobie bufor na nasza liczbe, jest to tablica o rozmiarze 100 (tak duze na wypadek gdybysmy podali jakas mega duza iczbe)
  18.     char numberAsText[100];
  19.     // konwertujemy liczbe na tekst
  20.     sprintf_s(numberAsText, "%d", *X);
  21.     // obliczamy ilosc znakow w tablicy
  22.     *C = strlen(numberAsText);
  23.  
  24.     // petla zakresowa for przechodzi po wszystkich elementach.
  25.     // zapisuje do digit kazda cyfre po kolei az do konca
  26.  
  27.      *S = 0;
  28.      for (int i = 0; i < *C; i++) {
  29.          char digit = numberAsText[i];
  30.          *S += atoi(&digit);
  31.      }
  32.  
  33.     // char niestety zapisuje znak(liczbe) np. '1' jako kod ASCII wiec odejmujemy od tej tego kodu '0' i otrzymujemy liczbe z tego tekstu
  34.     // konwertujemy na inta i gotowe :)
  35.     // digit jest typu char a stoi przyjmuje stringa jako parametr wiec dokonujemy konwersji z char do string
  36. }
  37.  
  38.  
  39. void DigitCountSum_reference(int& X, int& C, int& S) {
  40.     // referencja polega na tym, ze przekazujemy do funkcji wartosc zmiennej a nie jej kopie, wiec...
  41.     // jezeli zmienimy wartosc X w funkcji to po wyjsciu z niej w main'ie X bedzie mialo nowa wartosc.
  42.  
  43.     // drugie rozwiazanie polega na tym ze dzielimy przez 10 az nasza liczba nie bedzie rowna 0
  44.     int x = X; // robimy kopie zeby nie zmieniac X
  45.     C = 0;
  46.     S = 0;
  47.     while (x != 0) {
  48.         x = x / 10;
  49.         C++; // :)
  50.     }
  51.  
  52.     // Jezeli znamy juz liczbe cyfr to mozemy podobnie policzyc ich sume
  53.     S = 0;
  54.     x = X;
  55.     while (x != 0) {
  56.         S = S + x % 10;
  57.         x = x / 10;
  58.     }
  59. }
  60.  
  61.  
  62.  
  63. int main() {
  64.     int number{ 0 }, digits{ 0 }, digitsSum{ 0 };
  65.     for (int i = 0; i < 5; i++) {
  66.         std::cout << "Podaj liczbe: ";
  67.         std::cin >> number;
  68.  
  69.         DigitCountSum_pointers(&number, &digits, &digitsSum);
  70.         std::cout << "pointers  #Liczba " << number << " sklada sie z " << digits << " cyfr, a ich suma to " << digitsSum << "\n";
  71.  
  72.         DigitCountSum_reference(number, digits, digitsSum);
  73.         std::cout << "reference #Liczba " << number << " sklada sie z " << digits << " cyfr, a ich suma to " << digitsSum << "\n\n";
  74.     }
  75.  
  76.     std::cin.get();
  77.     return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement