MeHow Opublikowano 16 Grudnia 2004 Zgłoś Opublikowano 16 Grudnia 2004 (Poniezej umieszczam kod programu). Otoz mam taki program i chcialbym go podzielic na czesci i dac do roznych plikow. Wiem, ze nalezy zrobic #include "nazwa_pliku.h" , ale nijak mi to nie wychodzi :/ . Chcialbym, zeby program byl podzielony na 4 czesci. W jednym zeby byla struktura, w drugim funkcje int find_free( struct test_t[] ); void czyszczenie( struct test_t[] ); void usun_test( struct test_t[], int*, int ); void sort_nazw( struct test_t*, int, int ); void sort_trud( struct test_t*, int, int ); void sortuj( struct test_t[], int ); void mieszaj( struct test_t[], int ); int jestsplg( char );, a w trzecim funkcje int wybor_z_menu( void ); void wprowadz_test( struct test_t[], int* ); void wyswietl_testy( struct test_t[], int ); void przeprowadz_test( struct test_t[], int ); float ocen( struct test_t[], int, int, char[] ); . Jak to zrobic? Jak potem dorobic do tego makefile'a ? [php:1:3c33461129] #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #define ILOSC_PYTAN_W_TESCIE 5 #define MAX_ILOSC_TESTOW 20 struct pytanie_t { char polskie[30]; int ilosc_odpowiednikow; char angielskie[3][30]; }; struct test_t { char nazwa[80]; char stopien_trudnosci[20]; struct pytanie_t pytanie[iLOSC_PYTAN_W_TESCIE]; }; int find_free( struct test_t[] ); void czyszczenie( struct test_t[] ); int wybor_z_menu( void ); void wprowadz_test( struct test_t[], int* ); void wyswietl_testy( struct test_t[], int ); void usun_test( struct test_t[], int*, int ); void sort_nazw( struct test_t*, int, int ); void sort_trud( struct test_t*, int, int ); void sortuj( struct test_t[], int ); void mieszaj( struct test_t[], int ); void przeprowadz_test( struct test_t[], int ); float ocen( struct test_t[], int, int, char[] ); int jestsplg( char ); void instrukcja( void ); main( void ) { int ile_testow_w_bazie = 0; int choice; int nr; char string[10]; struct test_t test[MAX_ILOSC_TESTOW]; czyszczenie( test ); /* inicjalizacja tablicy struktur */ for(;;) { choice = wybor_z_menu(); switch( choice ) { case 1: wprowadz_test( test ,&ile_testow_w_bazie); break; case 2: sortuj( test, ile_testow_w_bazie ); break; case 3: wyswietl_testy( test, ile_testow_w_bazie ); break; case 4: usun_test( test, &ile_testow_w_bazie, ile_testow_w_bazie ); break; case 5: { printf("nPodaj numer testu.n"); fgets( string, 9, stdin ); nr = atoi( string ); if((nr > 20) || (nr < 1)) { printf("nie podales numeru testu"); break; } przeprowadz_test( test, nr ); break; } case 6: exit(0); } } } void wprowadz_test( struct test_t test[] , int* wsk) { int gdzie, i, t, pomoc; char c[20]; gdzie = find_free( test ); if( gdzie == -1 ) { printf("Baza jest pelna...n"); return; } while(1) { printf("nnPodaj nazwe testu:n"); fgets( test[gdzie].nazwa, 79, stdin ); if(isprint(test[gdzie].nazwa[0])) break; } (*wsk)++; while(1) { printf("Podaj stopien trudnosci tego testu:n"); fgets( test[gdzie].stopien_trudnosci, 19 , stdin ); if(isprint(test[gdzie].stopien_trudnosci[0])) break; } for( i=0; i<ILOSC_PYTAN_W_TESCIE; i++ ) { while(1) { printf("Pytanie nr %d:n", i+1); fgets( test[gdzie].pytanie.polskie, 29, stdin ); if(isprint(test[gdzie].pytanie.polskie[0])) break; } while(1) { printf("Ile odpowiednikow angielskich ma to slowo?n"); gets( c ); test[gdzie].pytanie.ilosc_odpowiednikow = atoi( c ); if(test[gdzie].pytanie.ilosc_odpowiednikow<=3 && test[gdzie].pytanie.ilosc_odpowiednikow>=1) break; } for( t=1; t<=test[gdzie].pytanie.ilosc_odpowiednikow; t++) { while(1) { printf("Podaj %d odpowiednik:n", t); fgets( test[gdzie].pytanie.angielskie[t-1], 29, stdin ); if(isprint(test[gdzie].pytanie.angielskie[0] [0])) break; } } } } /* WPROWADZ_TEST */ int find_free( struct test_t test[] ) { int t; for(t=0; test[t].nazwa[0] && t<MAX_ILOSC_TESTOW; ++t); if( t==MAX_ILOSC_TESTOW ) return -1; /* brak wolnych miejsc */ return t; }/* FIND_FREE */ void czyszczenie( struct test_t test[] ) { int t; for(t=0; t<MAX_ILOSC_TESTOW; ++t) test[t].nazwa[0] = '\0'; }/* czyszczenie */ int wybor_z_menu( void ) { char s[80]; int c; printf("nnn1. Wprowadz nowe dane.n"); printf("2. Sortuj testy.n"); printf("3. Wyswietl dostepne testy.n"); printf("4. Usun test.n"); printf("5. Przeprowadz test.n"); printf("6. Wyjdz z programu.n"); do { printf("nPodaj swoj wybor: "); gets(s); c = atoi(s); } while( c<1 || c>6); return c; }/* WYBOR_Z_MENU */ void usun_test( struct test_t test[], int* wsk, int ile_testow_w_bazie ) { int slot, pomoc; char s[80]; int i = 0; if( ile_testow_w_bazie == 0 ) { printf("nBaza jest pusta...n"); return; } printf("nPodaj numer testu, ktory chcesz usunac:n"); gets(s); slot = atoi(s); if( slot >= 1 && slot <= MAX_ILOSC_TESTOW) { test[slot-1].nazwa[0] = '\0'; if( ile_testow_w_bazie > 0 ) { (*wsk)--; } printf("nUsunieto test o numerze %d.n", slot); } if( ile_testow_w_bazie == 0 ) return; for( i=slot-1; i<MAX_ILOSC_TESTOW-1; i++ ) { if( test[i+1].nazwa[0] == '\0' ) break; test = test[i+1]; } test[ile_testow_w_bazie].nazwa[0] = '\0'; } void wyswietl_testy( struct test_t test[], int ile_testow_w_bazie ) { int i, j; printf("nW bazie dostepne sa nastepujace testy:n"); for( i=0; i<ile_testow_w_bazie; i++ ) { printf("%d. %s", i+1, test.nazwa); printf("trudnosc: %s", test.stopien_trudnosci); for( j=0; j<ILOSC_PYTAN_W_TESCIE; j++ ) printf("t%s", test.pytanie[j].polskie ); } } void sortuj( struct test_t test[], int ile_testow_w_bazie ) { char s[20]; int t; printf("n1. Sortuj wedlug nazw testow.n"); printf("2. Sortuj wedlug stopnia trudnosci.n"); do { printf("Wybierz kryterium sortowania:n"); gets( s ); t = atoi( s ); } while( t<1 || t>2 ); if( t==1 ) sort_nazw( test, 0, ile_testow_w_bazie ); else sort_trud( test, 0, ile_testow_w_bazie ); } void sort_nazw( struct test_t tab[], int skad, int dokad ) { int a, b; struct test_t temp; for( a=skad; a<dokad; a++ ) for( b=skad; b<dokad-1; b++ ) if( strcmp( tab.nazwa, tab[b+1].nazwa ) > 0 ) { temp = tab; tab = tab[b+1]; tab[b+1] = temp; } }/* SORT_NAZW */ void sort_trud( struct test_t tab[], int skad, int dokad ) { int a, b; struct test_t temp; for( a=skad; a<dokad; a++ ) for( b=skad; b<dokad-1; b++ ) if( strcmp( tab.stopien_trudnosci, tab[b+1].stopien_trudnosci ) > 0 ) { temp = tab; tab = tab[b+1]; tab[b+1] = temp; } } void mieszaj( struct test_t test[], int numer ) { int i, index; struct pytanie_t temp; int dz = RAND_MAX/ILOSC_PYTAN_W_TESCIE + 1; for( i=0; i < ILOSC_PYTAN_W_TESCIE; i++ ) { index = rand()/dz; temp = test[numer].pytanie; test[numer].pytanie = test[numer].pytanie[index]; test[numer].pytanie[index] = temp; } } void przeprowadz_test( struct test_t test[], int numer ) { int i; char odp[30]; float l_pkt = 0; float pkt = 0; mieszaj( test, numer-1 ); printf("n"); if(!isprint(test[numer-1].pytanie[0].polskie[0])) //zabezpieczenie, przed wykonywaniem pustych testow { printf("nie ma takiego testun"); return; } for(i=0; i<ILOSC_PYTAN_W_TESCIE; i++) { printf("%sn", test[numer-1].pytanie.polskie); printf("Twoja odpowiedz: "); fgets( odp, 29, stdin ); pkt = ocen( test, numer-1, i, odp ); printf("tt%.1f pktn", pkt); l_pkt += pkt; } printf("nnZdobyles %.1f punktow.n", l_pkt); } float ocen( struct test_t test[], int numer, int pyt, char odp[] ) { int i, j, k, n; char lan1[30], lan2[30]; for (i = 0; i< 30; i++) { lan1 = '\0'; lan2 = '\0'; } for(i = 0; i<test[numer].pytanie[pyt].ilosc_odpowiednikow; i++) if( !strcmp(test[numer].pytanie[pyt].angielskie, odp) ) return 1; n = strlen( odp ); for(i=0, j=0; i<n; i++ ) if( jestsplg( odp ) ) lan1[j++] = odp; for(i = 0; i<test[numer].pytanie[pyt].ilosc_odpowiednikow; i++) { n = strlen( test[numer].pytanie[pyt].angielskie ); for( j=0, k=0; j<n; j++) if( jestsplg( test[numer].pytanie[pyt].angielskie[j] ) ) lan2[k++] = test[numer].pytanie[pyt].angielskie[j]; if( !strcmp(lan1, lan2) ) return 0.5; } return 0; } int jestsplg( char c ) { if( isalpha( c ) && c != 'a' && c != 'e' && c != 'i' && c != 'o' && c != 'u' && c != 'y' ) return 1; else return 0; } [/php:1:3c33461129] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
KrzychuG Opublikowano 16 Grudnia 2004 Zgłoś Opublikowano 16 Grudnia 2004 W jednym pliku .h dajesz deklaracje funckji. Ten plik .h includujesz w kazdym z .c. W przypadku kompilera gcc mozna to skompilowac w taki sposob: gcc -c plik.c plik2.c plik3.c -o plik_wykonywalny Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...