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

Podobne dokumenty