Lista 4 -- Wstęp do informatyki, W. Hebisch
#include <stdio.h>
#include <stdlib.h>
#define ILOSC_CYFR 40
void wczytaj_liczbe(char a[ILOSC_CYFR])
{
int c;
int i, j;
for(i=0; i < ILOSC_CYFR; i = i + 1) {
a[i] = 0;
}
c = getchar();
/* Zapisujemy cyfry w tablicy a, zaczynając od końca */
i = ILOSC_CYFR;
while( c >= '0' && c <= '9' ) {
if( i == 0) {
printf("Zbyt duża ilość cyfr, maksymalnie %d\n",
ILOSC_CYFR);
exit(1);
}
i = i - 1;
a[i] = c - '0';
c = getchar();
}
/* Przesuwamy liczbę do początku tablicy a */
for(j=i; j < ILOSC_CYFR; j = j + 1) {
a[j - i] = a[j];
}
for(j=ILOSC_CYFR-i; j < ILOSC_CYFR; j = j + 1) {
a[j] = 0;
}
}
int main(void)
{
char a[ILOSC_CYFR];
char b[ILOSC_CYFR];
char c[ILOSC_CYFR];
int i;
int przeniesienie=0;
printf("Podaj pierwszą liczbę:\n");
wczytaj_liczbe(a);
printf("Podaj drugą liczbę:\n");
wczytaj_liczbe(b);
for(i=0; i<ILOSC_CYFR; i=i+1) {
c[i] = a[i] + b[i] + przeniesienie;
if( c[i]>9 ) {
przeniesienie = 1;
c[i] = c[i] - 10;
} else {
przeniesienie = 0;
}
}
if( przeniesienie != 0) {
printf("Nadmiar!!\n");
exit(1);
}
printf("Wynik = ");
for(i=ILOSC_CYFR-1; i>=0; i=i-1) {
putchar(c[i]+'0');
}
putchar('\n');
return 0;
}
Wypróbować program. Pominąć drukowanie nieznaczących cyfr
wyniku. Sprawdzić że zmiana stałej ILOSC_CYFR zmienia
maksmalną dostępną ilość cyfr. Przerobić program tak
by:
int zagadka(int a, int b)
{
int c = 0;
if(b<0) {
a = -a;
}
while( b>0 ) {
c = c + a;
b = b - 1;
}
return c;
}
Czy jest to dobra metoda?