Laboratorium nr 11
Temat: Definiowanie tablicy wska ników oraz sortowania tablic i tablic wska ników. Program sortuj cy i
porz dkuj cy tablic liczb losowych.
1)
Definiowanie tablicy wska ników.
# include <stdio.h>
# include <conio.h>
# include <stdlib.h>
# include <malloc.h>
int main () {
int i,**tab;
tab=calloc(10,sizeof(int *));
for(i=0;i<10;i++){
tab[i]=calloc(1,sizeof(int));
*(tab+i)=rand();
printf("Tab[%i]=%i\n",i,tab[i]);
};
getch();
return(0);
}
# include <stdio.h>
# include <conio.h>
# include <stdlib.h>
# include <malloc.h>
# include <string.h>
int main () {
int i;
char bufor[10],**tab;
tab=calloc(10,sizeof(char *));
for(i=0;i<10;i++){
itoa(rand(),bufor,10);
tab[i]=calloc(10,sizeof(char));
strcpy(*(tab+i),bufor);
printf("Tab[%i]=%s\n",i,tab[i]);
};
getch();
return(0);
}
Uwaga: wyra enie **tab oznacza tablic wska ników (tzn. wska nik to tablicy wska ników). W przypadku
tablicy wska ników nadal obowi zuje zapis tab[i], który jest równorz dny zapisowi *(tab+i)
2)
Sortowanie tablicy liczb losowych.
# include <stdio.h>
# include <conio.h>
# include <stdlib.h>
int losuj(int *tab){
int i;
for(i=0;i<10;i++) tab[i]=rand();
return(0);
}
int sortuj(int *tab){
int i,j,liczba;
for(i=0;i<10-1;i++){
for (j=0;j<10-1-i;j++){
if(tab[j]>tab[j+1]) {
liczba=tab[j];
tab[j]=tab[j+1];
tab[j+1]=liczba;
}
}
}
return(0);
}
int wyswietl(int *tab){
int i;
printf("\nTablica\n");
for(i=0;i<10;i++) printf("%i\t%i\n",i,tab[i]);
return(0);
}
int main () {
int tab[10];
losuj(tab);
wyswietl(tab);
sortuj(tab);
wyswietl(tab);
getch();
return(0);
}
3)
Sortowanie rekordów bazy danych.
# include <stdio.h>
# include <stdlib.h>
# include <conio.h>
# include <string.h>
# include <malloc.h>
struct baza {
char imie[100];
char nazwisko[100];
char telefon[50];
};
int utworz_baze(struct baza *wsk,int liczba){
char bufor[25];
int i;
for(i=0;i<liczba;i++){
itoa(rand(),bufor,10);
strcpy(wsk->imie,bufor);
strcpy(wsk->nazwisko,bufor);
strcpy(wsk->telefon,bufor);
wsk++;
};
return(0);
}
int wyswietl(struct baza *wsk, int liczba){
int i;
printf("Baza\nImie\tNazwisko\tTelefon\n");
for(i=0;i<liczba;i++){
printf("%s\t%s\t%s\n",wsk->imie,wsk->nazwisko,wsk->telefon);
wsk++;
}
return(0);
}
int sortuj(struct baza *wsk, int liczba){
struct baza *osoba;
int i,j;
osoba=(struct baza*) calloc(1,sizeof(struct baza));
for(i=0;i<liczba-1;i++){
for (j=0;j<liczba-1-i;j++){
if(atoi(wsk[j].imie)>atoi(wsk[j+1].imie)) {
*osoba=*(wsk+j);
*(wsk+j)=*(wsk+j+1);
*(wsk+j+1)=*osoba;
}
}
}
return(0);
}
int main() {
struct baza *wsk_bazy;
int ilosc=10;
wsk_bazy=(struct baza*) calloc(ilosc,sizeof(struct baza));
utworz_baze(wsk_bazy,ilosc);
wyswietl(wsk_bazy,ilosc);
sortuj(wsk_bazy,ilosc);
wyswietl(wsk_bazy,ilosc);
free(wsk_bazy);
getch();
return(0);
}
Uwaga: w przypadku sortowania ła cuchów nale y skorzysta z funkcji, porównuj cej dwa ła cuchy:
strcmp(const char *string1, const char *string2)
Zadanie: Zmodyfikuj „swój” program bazy danych tak, aby umo liwiał sortowanie danych:
a)
rosn co i malej co,
b)
według wybranych pól rekordów