Jednosmerný lineárny zoznam
Súčet veľkých prirodzených čísel
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 uzol {
int cifra;
struct uzol *dalsi;
} TUzol;
-----------------------------------------------------------------------------
void pridaj(TUzol **z, int c) /* pridanie prvku na začiatok zoznamu */
{
TUzol *novy = (TUzol*)malloc(sizeof(TUzol));
novy->cifra = c;
novy->dalsi = *z;
*z = novy;
}
-----------------------------------------------------------------------------
void precitaj_cislo(TUzol **z, FILE *f) /* zo súboru */
{
int c;
while ((c = getc(f)) != EOF) {
c = c - '0'; /* prevod prečítaného znaku na číselnú hodnotu */
pridaj(z, c);
}
}
-----------------------------------------------------------------------------
void vypis(TUzol *p)
{
while (p != NULL) {
printf("%d", p->cifra);
p = p->dalsi;
}
}
-----------------------------------------------------------------------------
void sucet(TUzol **s, TUzol *z1, TUzol *z2)
{
int pom;
int prenos = 0;
while ((z1 != NULL) && (z2 != NULL)) {
pom = z1->cifra + z2->cifra + prenos;
pridaj(s, pom % 10);
prenos = pom / 10;
z1 = z1->dalsi;
z2 = z2->dalsi;
}
if ((z1 == NULL) && (z2 == NULL) && (prenos != 0)) pridaj(s, prenos);
else
if (z1 != NULL) {
while (z1 != NULL) {
pom = z1->cifra + prenos;
pridaj(s, pom % 10);
prenos = pom / 10;
z1 = z1->dalsi;
}
if (prenos != 0) pridaj(s, prenos);
}
else {
while (z2 != NULL) {
pom = z2->cifra + prenos;
pridaj(s, pom % 10);
prenos = pom / 10;
z2 = z2->dalsi;
}
if (prenos != 0) pridaj(s, prenos);
}
}
-----------------------------------------------------------------------------
void main(void) /* hlavný program */
{
TUzol *a, *b, *sucet;
FILE *fr1, *fr2;
/* vytvorenie prázdnych zoznamov */
a = NULL;
b = NULL;
sucet = NULL;
/* otvorenie vstupných suborov - bez testu návratovej hodnoty funkcie fopen! */
fr1 = fopen ("a.txt", "rt");
fr2 = fopen ("b.txt", "rt");
clrscr();
/* vstup */
precitaj_cislo(&a, fr1);
precitaj_cislo(&b, fr2);
/* výpočet */
sucet(&sucet, a, b);
/* výstup */
printf("\na + b = ");
vypis(sucet);
fclose(fr1);
fclose(fr2);
getch();
}
|