• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyszukiwanie binarne

Object Storage Arubacloud
0 głosów
128 wizyt
pytanie zadane 7 kwietnia 2016 w C i C++ przez Jędrzej Dembowski Użytkownik (740 p.)

Witam. Napisałem dwie funkcje, stworzyłem strukturę. 

typedef struct {
  char imie[IMIE_MAX+1];
  char nazwisko[NAZW_MAX+1];
  int pensja;
} osoba;

osoba spis[IL_OSOB];

int my_compare (const void * a, const void * b)
{
    char const *aa = (char const *)a;
    char const *bb = (char const *)b;

    return strcmp(aa, bb);
}

int  znajdz_imie (char im[NAZW_MAX+1], char na[IMIE_MAX+1], int *p)
{
	int *a=bsearch(im, spis, IL_OSOB, sizeof(osoba), my_compare);
	if(a!=0)
    {
    	strcpy(na,spis[a].nazwisko);
    	*p=spis[a].pensja;
    	return 1;
	}
	else
  	return 0;
}

Program polega na wczytaniu z bazy danych o kilku osobach (imie,nazwisko,pensja), potem ten spis trzeba posortować(sortuje po imionach) i teraz przez uzytkownika zostaje podane jakieś imię i muszę sprawdzić czy to imię występuje w spisie (jeśli nie to zwracamy wartość 0) jeśli tak to 1 z zapisanymi wartościami nazwiska i pensji. Muszę użyć wyszukiwania binarnego i tu pojawia się problem(oczywiście ciało funkcji, którą podałem jest błędne i nie bardzo wiem jak to poprawić). Funkcja wyznacza mi wskaźnik na element w spisie. Jak wykorzystać ten wskaźnik aby podmienić potem zmienną na i pensje na wartości przypisane do znalezionego imienia? Za wszystkie odpowiedzi będę bardzo wdzięczny!

1 odpowiedź

0 głosów
odpowiedź 7 kwietnia 2016 przez draghan VIP (106,230 p.)

Kluczem do rozwiązania Twojego problemu jest dokumentacja. Powinieneś najpierw sprawdzać, czy wskaźnik zwrócony przez bsearch jest równy NULL. Jeśli tak to podjąć akcje, przewidziane dla sytuacji gdy nic nie znaleziono.

Zaś jeśli nie wartość otrzymana != NULL, musisz rzutować otrzymany wskaźnik na typ osoba i użyć operatora wyłuskania, żeby dostać się do składowych struktury osoba. W Twoim drugim wątku pokazałem Ci, jak to zrobić.

komentarz 7 kwietnia 2016 przez Jędrzej Dembowski Użytkownik (740 p.)
Wszystko działa jak powinno, sortowanie też, dzięki wielkie za pomoc.
komentarz 7 kwietnia 2016 przez draghan VIP (106,230 p.)
No i pozytywnie. Miłego wieczoru życzę. :)

Podobne pytania

0 głosów
1 odpowiedź 123 wizyt
pytanie zadane 23 października 2016 w C i C++ przez maste2 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 301 wizyt
pytanie zadane 10 czerwca 2016 w Java przez uczeń1998 Obywatel (1,930 p.)
0 głosów
2 odpowiedzi 453 wizyt

92,576 zapytań

141,425 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...