Lista 4 -- Wstęp do informatyki, W. Hebisch

Zadanie 1

Napisać funkcje obliczajace:
  1. przybliżoną wartość funkcji wykładniczej
  2. silnię
(zmodyfikować w tym celu programy z ćwiczeń 1 i 4 z listy 2). W obu przypadkach napisać program główny który wywoła funkcję i wypisze wynik.

Zadanie 2

Poniższy program dodaje liczby reprezentowane przez ciągi cyfr.
#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:
  1. dodawanine było oddzielną funkcją,
  2. program porównywał liczby,
  3. program odejmował liczby.

Zadanie 3

Napisać procedurę (funkcję w C) mnożącą dwa ciągi cyfr (liczby).

Zadanie 4

Co robi poniższa funkcja?
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?