Obojsmerný lineárny zoznam
Faktoriál
Program EXE
/* pripojenie potrebných hlavičkových súborov */
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
/* definícia nového typu */
typedef struct prvok {
char cifra;
struct prvok *predch;
struct prvok *nasled;
} TPrvok;
-------------------------------------------------------------------------------------------
int vypis(TPrvok **prva, TPrvok **posl) {
int pocet = 0;
TPrvok *pom;
while (*prva != NULL) {
pocet++;
printf("%d", (*prva)->cifra); /* vypíše hodnotu */
pom = *prva; /* zruší uzol*/
*prva = (*prva)->nasled;
free((void*)pom);
}
*prva = *posl;
return(pocet); /* vráti počet cifier vo výsledku */
}
-------------------------------------------------------------------------------------------
void main(void) /* hlavný program */
{
TPrvok *cislica, *prva, *posl;
int n, i;
int prenos = 0;
int sucin = 1;
/* vstup */
clrscr();
printf("Vypocitam hodnotu n!\n");
printf("n = ");
scanf("%d", &n);
/* vytvorenie prvého prvku zoznamu, sucin == 1 */
prva = (TPrvok*)malloc(sizeof(TPrvok));
prva->cifra = 1;
prva->predch = NULL;
prva->nasled = NULL;
posl = prva;
/* výpočet n! */
for (i = 1; i <= n; i++) {
cislica = posl;
while (cislica != NULL) {
sucin = cislica->cifra * i + prenos;
cislica->cifra = sucin % 10;
prenos = sucin / 10;
cislica = cislica->predch;
}
while (prenos != 0) {
cislica = (TPrvok*)malloc(sizeof(TPrvok));
cislica->predch = NULL;
cislica->nasled = prva;
prva->predch = cislica;
prva = cislica;
cislica->cifra = prenos % 10;
prenos = prenos / 10;
}
}
/* výstup */
printf("Vysledok: ");
int poc = vypis(&prva, &posl);
printf ("\nPocet cifier vo vysledku: %d", poc);
getch();
}
|