c++ zadanie z matury probnej, wie ktos jak ?

0

Witam:) mam problem z napisaniem takiego programu w c++. napisz algorytm:  umieszczający poszczególne cyfry liczby k w tablicy tab_cyfr[] w kolejności od najmniej do najbardziej znaczącej  zwracający liczbę cyfr jej zapisu dziesiętnego. Specyfikacja: Dane: k – liczba całkowita dodatnia. Wynik: n – liczba cyfr (całkowita dodatnia) w zapisie dziesiętnym liczby k, tab_cyfr[] – tablica zawierająca kolejne cyfry zapisu dziesiętnego liczby k, w kolejności od najmniej znaczącej do najbardziej znaczącej.
Pomoze ktos ?

0

Ale w czym konkretnie masz problem?

0

Myslalem zeby wczytac zlozona liczbe k, potem rozdzielic ja na pojedynczy cyfty i wczytac fo tabicy a potem ja uporzadkowac, tylko nie wiem jk np k=2831 tozdzieic na (2,8,3,1) ?

1

Policz sobie na kartce (dla paru liczb): modulo 10, modulo, 100 ... a potem wynik rzutowania na (int) z dzielenia przez 10, 100 ...
wnioski pozostawiam tobie.

1

Użyj operatora modulo (%).
Do przechowywania możesz użyć tablicy o rozmiarze:

numeric_limits<int>::digits10

gdzie int to typ wczytywanej liczby.

Ew. dodatki:

  • użycie stosu zamiast tablicy (czytelniejsze - do szkoły, wolniejsze)
  • użycie typedef lub decltype do powtórzenia typu zmiennej w tablicy
  • obsługa liczb ujemnych

Jak użyć modulo?

int liczba = 123;
int ostatnia_cyfra;

ostatnia_cyfra = liczba % 10;
liczba = (liczba - ostatnia_cyfra) / 10;

powtarzasz dopóki liczba != 0.

0

Okej juz dam rade dzieki :)

0

Ma ktos pomysl jeszcze to tego probramu na jakas funkcje ktora bd sprawdzala czy jest to liczba narcystyczna(armstronga)??

0

Z poprzednich postów wiesz jak wyłuskać poszczególne cyfry, więc możesz je sumować i liczyć ile cyfr ma liczba. Do podniesienia do potęgi użyj funkcji pow() z math.h własnej funkcji mojePow która liczy potęgi liczb całkowitych i zwraca np. int

Może to wyglądać mniej więcej tak

bool czyAmstronga( int liczba )
{
     size_t sumaCyfr, iloscCyfr;

     //liczysz sume cyfr i ich ilość
    
    return mojePow( sumaCyfr, iloscCyfr ) == liczba;
}

edit jak wspomniał @kaczus możesz mieć problemy z pow, więc łatwo możesz napisać swoją funkcję podnoszącą do potęgi co trudne nie jest

0
#include <cstdlib>
#include <iostream>

using namespace std;

void tablica(int tab_cyfr[], int k, int n)
{
 do{
    tab_cyfr[n]=k%10;
    k=k/10;
    n++;
 }while(k!=0);
}

int potega(int a, int n)
{
   if (n==0)
   return 1;
   else 
   return potega(a, n-1)*a;
}

int main()
{
 int k,tab_cyfr[100];
 int n=0, j=0;
 cout<<"podaj k: ";
 cin>>k;
 do{
    k=k-potega(tab_cyfr[j],n);
    j++;
    }while(j<n);
 if(k==0)
 cout<<"PRAWDA";
 else
 cout<<"FALSZ";
 cin.ignore();
 getchar();
 return 0;
}
0

czemu dla kazdej liczby wychodzi fałsz? :/

0

tab_cyfr jest niezainicjalizowane.

0
#include <cstdlib>
#include <iostream>

using namespace std;

void tablica(int tab_cyfr[], int k, int n)
{
 do{
    tab_cyfr[n]=k%10;
    k=k/10;
    n++;
 }while(k!=0);
}

int potega(int a, int n)
{
   if (n==0)
   return 1;
   else 
   return potega(a, n-1)*a;
}

int main()
{
 int k,tab_cyfr[100];
 int n=0, j=0;
 cout<<"podaj k: ";
 cin>>k;
 tablica(tab_cyfr,k,n);
 do{
    k=k-potega(tab_cyfr[j],n);
    j++;
    }while(j<n);
 if(k==0)
 cout<<"PRAWDA";
 else
 cout<<"FALSZ";
 cin.ignore();
 getchar();
 return 0;
}

próbowałem dodać do funkcji głównej funkncje tablica(tab_cyfr) ale sie nie kompiluje ...

0
tablica(tab_cyfr,k,n);
0

zmieniłem ale dalej nie działa poprawnie ...

0

Nie jesteśmy wróżbitami, więc przy całej chęci pomocy nikt nie zgadnie co jest nie tak, skoro jedyną informację, jaką podajesz to nie działa poprawnie.... Opisz problem, co to znaczy niepoprawnie, jakie są dane wejściowe, jakie wyjściowe, jakie oczekiwane wyjściowe itd.
Natomiast jeśli oczekujesz, że ktoś to odpali, przetestuje i powie co jest nie tak, to załóż temat w dziale "Ogłoszenia drobne" z odpowiednią kwotą.

1 użytkowników online, w tym zalogowanych: 0, gości: 1