Imi˛e i nazwisko: Wst˛ep do programowania 2008 – kolokwium 1
Transkrypt
Imi˛e i nazwisko: Wst˛ep do programowania 2008 – kolokwium 1
Imi˛e i nazwisko: Wst˛ep do programowania 2008 – kolokwium 1 Programy należy napisać zgodnie z poznanymi zasadami, krótko i czytelnie. Na ocen˛e b˛edzie miał wpływ także czas wykonania kolokwium (5 ptk). (5+15 pkt) Napisz plik nagłówkowy i implementacj˛e funkcji int prime(int n), sprawdzajacej ˛ czy podany argument jest liczba˛ pierwsza˛ (w tym przypadku zwraca 1, w p.p. 0). prime.h #ifndef _PRIME_H_ #define _PRIME_H_ /* Funkcja sprawdzajaca ˛ czy podany argument jest liczba˛ pierwsza˛ */ int prime(int n); #endif prime.c #include <math.h> /* sqrt() */ /* Funkcja sprawdzajaca ˛ czy podany argument jest liczba˛ pierwsza. ˛ Zwraca 1 jeśli jest, 0 w p.p. */ int prime(int n) { if( n < 2 ) return 0; if( n == 2 ) return 1; if( n%2 == 0 ) return 0; /* liczby parzyste, wi˛ eksze od 2 */ int i = 3, pierwiastek; pierwiastek = sqrt( n ); while( i <= pierwiastek ) { if( n%i == 0 ) return 0; /* liczba podzielna przez i */ i += 2; } return 1; } (20 pkt) Napisz program który sprawdza czy podane jako argumenty w linii poleceń liczby sa˛ pierwsze. Wykorzystaj zdefiniowane wcześniej pliki. Przykładowe działanie programu: ./primes 10009 0 aaa -3 1000 10009 - liczba pierwsza 0 - bł˛ edna dana aaa - bł˛ edna dana -3 - bł˛ edna dana 1000 - liczba złożona primes.c #include <stdio.h> /* printf() */ #include <stdlib.h> /* atoi() */ #include "prime.h" /* prime() */ int main(int argc, char *argv[]) { int i,n; for(i = 1; i < argc; i++) { n = atoi( argv[i] ); if( n < 2 ) printf("%s - bł˛ edna dana\n", argv[i]); else { if( prime(n) == 1 ) printf("%s - liczba pierwsza\n", argv[i]); else printf("%s - liczba złożona\n", argv[i]); } } /* for */ return 0; } (5 pkt) Napisz Makefile do obsługi kompilacji powyższego programu. CC = gcc CFLAGS = -Wall -c LFLAGS = -lm all: primes.o prime.o ${CC} ${LFLAGS} -o primes primes.o prime.o primes.o: primes.c prime.h ${CC} ${CFLAGS} primes.c prime.o: prime.c ${CC} ${CFLAGS} prime.c clean: rm -f *.o cleanall: clean rm -f primes