[WikiDyd] [TitleIndex] [WordIndex

Jimp1

Pytania z zaliczeń 2007

Drugie kolokwium

Zadanie 1

Grupy A i B razem:

   1 #include <stdio.h>
   2 #include <stdlib.h> /* malloc,realloc */
   3 #include <string.h> /* memcpy */
   4 
   5 typedef struct {
   6         double *elementy;
   7         int wielkosc;
   8         int akt_liczba_elementow;
   9 } wektor_t;
  10 
  11 int wypelnij( wektor_t *w, int a, int b )
  12 {
  13     int liczba_el = b - a + 1;
  14     int i;
  15     if( liczba_el < 0 )
  16         return 0;
  17     if( w->wielkosc < liczba_el ) {
  18         if( w->wielkosc == 0 && (w->elementy= malloc( sizeof *w->elementy * liczba_el)) == 0 )
  19             return 0;
  20         else if( realloc( w->elementy, sizeof *w->elementy * liczba_el ) == NULL )
  21             return 0;
  22     }
  23     w->akt_liczba_elementow = b - a + 1;
  24     for( i= 0; a <= b; a++, i++ )
  25         *(w->elementy+i) = a;
  26     return 1;
  27 }
  28 
  29 int polacz( wektor_t *w, wektor_t *v )
  30 {
  31     int liczba_el= w->akt_liczba_elementow + v->akt_liczba_elementow;
  32     if( liczba_el > w->wielkosc ) {
  33         if( realloc( w->elementy, sizeof *w->elementy * liczba_el ) == NULL )
  34             return 0;
  35         else
  36             w->wielkosc = liczba_el;
  37     }
  38     memcpy( w->elementy+w->akt_liczba_elementow, v->elementy, sizeof *v->elementy * v->akt_liczba_elementow );
  39     w->akt_liczba_elementow += v->akt_liczba_elementow;
  40     return 1;
  41 }
  42 
  43 void wypisz_wektor( char *nazwa, wektor_t *w, FILE * out )
  44 {
  45     int i;
  46     fprintf( out, "%s[ ", nazwa );
  47     for( i= 0; i < w->akt_liczba_elementow; i++ )
  48         fprintf( out, "%g ", *(w->elementy+i) );
  49     fprintf( out, "]\n" );
  50 }
  51 
  52 int main()
  53 {
  54     wektor_t w;
  55     wektor_t v;
  56 
  57     w.wielkosc= v.wielkosc = 0;
  58 
  59     wypelnij( &w, 10, 18 );
  60     wypelnij( &v, 23, 35 );
  61     wypisz_wektor( "w=", &w, stdout );
  62     wypisz_wektor( "v=", &v, stdout );
  63     polacz( &w, &v );
  64     wypisz_wektor( "w&v=", &w, stdout );
  65 
  66     return 0;
  67 }

Zadanie 2

Grupa A

Grupa B Wykorzystanie pliku nagłówkowego x.h do sprawdzania poprawności wywołań funkcji f polega na tym, że

  1. Umieszczamy w nim prototyp funkcji f
  2. Włączamy x.h do pliku, gdzie zdefinowana jest f
  3. Włączamy x.h do wszystkich plików, gdzie f jest wywoływana

Kompilator kompilując plik z def. sprawdza, czy prototyp zgadza się z definicją, a kompilując pliki, gdzie f jest wywoływana sprawdza, czy wywołanie zgadza się z prototypem i w ten sposób (przechodniość relacji) sprawdza pośrednio, czy wywołanie zgadza się z definicją.

Funkcję można ,,zasłonić" przed innymi plikami deklarując ją jako static.

Zadanie 3

Grupa B

Moduły:

Baza-danych: przechowuje informacje o dotąd przeczytanych listach. Jej interfejs to funkcje:

Analizator-listy-nadawcow: czyta liste nadawcow. Interfejs:

Analizator-logu: czyta log. Interfejs:

Formater-wyników: pisze plik wynikowy. Interfejs

Main: steruje całością

Każdy moduł poza main składa się z pliku nagłówkowego z deklaracją f. interfejsu i ew. struktur danych oraz pliku z kodem. Moduł main składa się tylko z pliku z kodem.


2015-09-23 06:44