9.4. Napisati rekurzivne funkcije koja ispisiju dekadne cifre datog cijelog broja, a zatim ispisiju dekadne cifre datog celog broja u obrnutom redoslijedu. Test primjer: 1234567 1 2 3 4 5 6 7 7 6 5 4 3 2 1.
Opis programa: Funkcija izdvoji_cifru: Za ispis cifara slijeva u desno prvo se izvodi izdvajanje svih cifara izdvoji_cifru(n1/10), pa ispis cifara.
Funkcija izdvoji_cifru: Izdvojena cifra se odmah štampa pa se onda izdvaja slijedeća cifra.
Tabela 1. Izdvojenu cifru poredi sa tekućim maksimumom
Funkcija ispis |
Opis funkcije ispis |
Funkcija ispis2 |
Opis funkcije ispis2 |
izdvoji_cifru(n1/10)
|
Izdvaja cifru
Rekurzija funkcije za izdvajanje cifre
|
printf("%d ", n2%10)
| Ispis izdvojene cifre |
printf("%d ", n1%10)
| Prvo se izvodi izdvajanje svih cifara rekurzijom (izdvoji_cifru(n1/10)) prethodna naredba;
pa se onda pri povratku
Ispisu cifre. |
izdvoji_cifru2(n2/10) |
Prvo se izvodi ispis izdvojene cifre (prethonda naredba);
Pozivom funkcije - rekurzija izdvaja se slijedeća cifra |
if (n1 < 10)
printf("%d ", n1);
| Provjera da li završeno izdvajanje cifara?
Na kraju rekurzije počinje ispis izdvojenih cifara |
if (n2 < 10)
printf("%d ", n1);
| Provjera da li ima još cifara?
Na kraju rekurzije završava ispis izdvojenih cifara. |
Listing programa:
// 09411128
#include <stdio.h>
void izdvoji_cifru(int n1) {
if (n1 < 10) // posljednja cifra sdesna?
printf("%d ", n1); // na kraju rekurzije pocinje ispis izdvojenih cifara
else
{
izdvoji_cifru(n1/10); // smanji broj; novo izdvajanje cifara;
printf("%d ", n1%10); // ispis cifre dobijene u ovom prolazu kroz funkciju
}
}
void izdvoji_cifru2(int n2) {
if (n2 < 10) // posljednja cifra sdesna?
printf("%d ", n2); // na kraju rekurzije posljednji ispis
else
{
printf("%d ", n2%10); // ispis cifre dobijene u ovom prolazu kroz funkciju
izdvoji_cifru2(n2/10); // smanji broj; novo izdvajanje cifara;
}
}
int main()
{
int n;
printf("Broj: ");
scanf("%d", &n);
printf("Cifre su: ");
izdvoji_cifru(n);
printf("\n");
printf("Obrnut redoslijed: ");
izdvoji_cifru2(n);
return 0;
}
Ispis na ekranu:
Broj: 1234567
Cifre su: 1 2 3 4 5 6 7
Obrnut redoslijed: 7 6 5 4 3 2 1
Index
|
 |