Lab 09

background image

Laboratorium nr 9

Temat: Alokacja tablic. Program z poprzedniego wiczenia zmodyfikowa tak, aby okre lał liczb

danych, alokował tablic , pobierał dane i na zako czenie zwalniał pami .

1)

Alokacja tablicy, pobranie danych oraz wy wietlenie rekordu.

# include <stdio.h>
# include <conio.h>
# include <malloc.h>
struct baza {
char imie[56];
char nazwisko[56];
char telefon[56];
};

int utworz_dane(struct baza *dane, int *ilosc){
FILE *wsk_pliku;
char znak;
if((wsk_pliku=fopen("baza.txt","r"))!=NULL) {
do {
znak=fgetc(wsk_pliku);
if (znak=='\n') *ilosc+=1;
} while (fscanf(wsk_pliku,&znak)!=EOF);
if ((dane=(struct baza*) malloc(*ilosc*sizeof(struct baza)))==NULL)
printf("\nNie zarezerwowano pamieci !\n");
fclose(wsk_pliku);
}
else printf("\nNie mozna otworzyc pliku !\n");
return(0);
}

int pobierz_dane(struct baza *wsk){
FILE *wsk_pliku;
char znak,bufor[256];
if((wsk_pliku=fopen("baza.txt","r"))!=NULL) {
while ((fgets(bufor,256,wsk_pliku)!=NULL)) {
sscanf(bufor,"%s%s%s",&wsk->imie,&wsk->nazwisko,&wsk->telefon);
wsk++;
}
fclose(wsk_pliku);
}
return(0);
}

int wyswietl_rekord(struct baza *wsk){
int rekord;
printf("Podaj numer rekordu = "); scanf("%d",&rekord);
printf("\nDane osoby[%i]\n",rekord);
printf("Imie: %s\t Nazwisko: %s\t Telefon: %s\n",wsk[rekord].imie,
wsk[rekord].nazwisko, wsk[rekord].telefon);
return(0);
}

int zwolnij_dane(struct baza *wsk){
free(wsk);
return(0);
}

main() {
struct baza *wsk_bazy;
int ilosc_danych=0;
utworz_dane(wsk_bazy, &ilosc_danych);
pobierz_dane(wsk_bazy);
wyswietl_rekord(wsk_bazy);
zwolnij_dane(wsk_bazy);
getch();
return(0);
}

background image

Uwaga:

a. Przed uruchomieniem programu utwórz plik "baza.txt" oraz wpisz, np. 4 rekordy, wg. schematu:

imie00 nazwisko00 telefon00
imie01 nazwisko01 telefon01
imie02 nazwisko02 telefon02

b. Funkcje alokowania pami ci

Funkcja

Działanie

malloc()

Alokacja pami ci

calloc()

Alokacja pami ci z wyzerowaniem obszaru

free()

Zwalnianie przydzielonej pami ci

realloc()

Zmiana wielko ci alokowanej tablicy

c. Przykład zastosowania funkcji alokowania tablicy jedno-wymiarowej

# include <stdio.h>
# include <conio.h>
# include <malloc.h>
# include <stdlib.h>
# define PI 3.14;

main () {
float tab[10];
int i;
for(i=0;i<10;i++) {
tab[i]=rand()/PI;
printf("Tab[%i]=%f\n",i,tab[i]);
}
getch();
return(0);
}

# include <stdio.h>
# include <conio.h>
# include <malloc.h>
# include <stdlib.h>
# define PI 3.14;

main () {
float *tab;
int i;
tab=(float*)calloc(10,sizeof(float));
for(i=0;i<10;i++) {
*(tab+i)=rand()/PI;
printf("Tab[%i]=%f\n",i,*(tab+i));
}
getch();
free(tab);
return(0);
}

gdzie:

tablica[i] jest tłumaczone przez kompilator jako:

*(&tablica[0]+i*sizeof(typ_danych)) lub *(tablica+i*sizeof(typ_danych))

• wyra enie tablica[i] jest równowa ne wyra eniu *(tablica+i).

• wyra enia tablica++ odnosi si do arytmetyki wska ników i oznacza dost p do nast pnego

elementu w tablicy, tzn. tablica[i+1].

2)

Zadanie: Zmodyfikuj program bazy danych z poprzedniego wiczenia tak, aby: pozwalał na

wprowadzanie danych ze spacja, okre lał liczb danych, alokował tablic o wymaganej wielko ci a na

zako czeniu zwalniał pami .

Uwaga: Przykładowe menu programu:

1.

Wprowad rekord

2.

Zapisz dane na dysk

3.

Pobierz dane z dysku

4.

Wy wietl dane

5.

Wy wietl rekord

6.

Wy wietl pole

7.

Koniec

Przykładowy plik danych:

Imie 00 nazwisko 00 telefon 00
Imie 01 nazwisko 01 telefon 01
Imie 02 nazwisko 02 telefon 02


Wyszukiwarka

Podobne podstrony:
Lab 09 2011 2012
2011 Lab 09 BER NBIid 27452
pa lab [09] rozdział 9(2) BMFSHQCHKVG2QCZVCPO3YKQ6WZ2ZBUF2J7ABZRI
lab 09
Lab 09 2011 2012
lab 09 id 257545 Nieznany
Lab 09
2011 Lab 09 BER NBI
lab 09 window
Lab 09 Lancuchy znakow
pa lab [09] rozdział 9(1) FL47B3DNFIGJ7XUYDZMG3EONK2APXQGS47HX3WQ
fiz lab 09 id 173414 Nieznany
pa lab [09] rozdział 9 AOQ7DJAA6FOKNGVWVTOH6ORKFUQ4YR2TPCGTPZQ
lab 09, Studia, Fizyka, laborki
2011 Lab 09 sortowanie
pa lab [09] wskazówki praktyczne KZKEOIDN5NFMECZ23YZQHMMUWM462I3F3L24JWY
Lab 09 2011 2012
2011 Lab 09 BER NBIid 27452

więcej podobnych podstron