Stránka 1 z 1

Jazyk C zoradenie mien abecedne

Napsal: ned 16. říj 2011, 18:27
od buckynho
Prosím Vás veľmi pekne nemohol by mi sem niekto napísať zdrojový kód na tento príklad ?? bol by som moc vďačný :)

Na standardnom vstupe je dana postupnost mien osob; kazdy riadok obsahuje jednu osobu -- dve mena (krstne meno a priezvisko) oddelene medzerou. Vasou ulohou je na vystup vypisat mena osob v usporiadanom poradi podla priezviska vzostupne (zacinaju priezviska s A, potom B, potom C, ... az Z). Ak maju dve osoby rovnake priezvisko, tak skor vypiste osobu s abecedne mensim krstnym menom. Pocet osob na vstupe nie je zadany, citajte do konca vstupu, a potom vypiste na standardny vystup vysledok.

Pomocka c.1: Do konca vstupu citate pokym vam scanf vracia kladne cislo.
Pomocka c.2: Koniec vstupu si bezne (ked pouzivat scanf) neviete nasimulovat, skuste si zadefinovat nejake specialne meno napr. BYE BYE, ktore program ukonci. Slubujem vam, ze meno BYE BYE nie je na vstupe.
Pomocka c.3: Mena si mozete reprezentovat v strukture, teda ako: struct Osoba { char *meno, *priezvisko; }
Pomocka c.4: Pri nacitavani pouzivajte scanf. Prosim vas, nepouzivajte %c to je len pre jeden znak (char) ... pouzivajte %s ... to je na retazec znakov (napr. char buf[100])
Pomocka c.5: Mena mozete nacitavat nejako takto: while (scanf("%s %s", buf2, buf2) > 0)
Pomocka c.6: pri nacitani do retazca (char buf1[100]) nepouzivajte v scanf adresu &, lebo buf1 je sam o sebe adresa pola ... cize: char buf1[100], buf[200];
while (scanf("%s %s", buf1, buf2) > 0)
{
if (!strcmp(buf1, "BYE")) // pre retazce musite pouzit na porovnanie funkcie strcmp, ktora je v string.h kniznici break;
}
Pomocka c.7: Na abecedne usporiadanie dvoch retazcov pouzivajte funkciu strcmp v string.h
Pracuje nasledovne: strcmp(buf1,buf2) vrati hodnotu 0 ak su retazce totozne, vrati -1 ak je prvy retazec abecedne mensi ako druhy, a vrati +1 ak je prvy vacsi ako druhy ... NEPOROVNAVAJTE RETAZCE KADEJAKO PO PISMENKACH, POUZITE FUNKCIU STRCMP... priklad: strcmp("Obama", "Obama") vrati 0, strcmp("Adam", "Eva") vrati -1, strcmp("Zelovoc", "Potraviny") vrati 1.
Pomocka c.8: Na usporiadanie mozte zvolit dva pristupy: Alebo budete presuvat cele sturktury, a potom to len vypisete od 0 po n-1, alebo si spravite nove pole pre nepriamu adresaciu... Nazvyme to pole T, chcete aby osoba[T[0]] bola najmensia osoba, osoba[T[1]] druha najmensia, atd ... na zaciatok je T[0]=0,T[1]=1,T[2]=2,...,T[n-1]=n-1. Uloha je preusporiadat T tak, aby platilo, ze osoba na indexe T[0] bola najmensia mozna... teda napr. ze T[0] je 3 - ak stvrta (lebo indexujeme od nuly) osoba na vstupe ma abecedne najmensie priezvisko.
Pomocka c.9: Zvolne si priame presuvanie struktur. Jazyk C obsahuje vstavanu funkciu na triedenie -- qsort. Ak mate osoby v strukture struct Osoba osoby[500]; tak utriedite to volanim: qsort(osoby, n, sizeof(struct Osoba), osoba_cmp); kde n je pocet osob, a osoba_cmp je porovnavacia funkcia -- aby vedel sort, ako to chcete triedit. Zostava spravit porovnavaciu funkciu osoba_cmp.
Pomocka 10: Porovnavacia funkcia osoba_cmp vracia rovnake hodnoty ako pri porovnavani retazcou s strcmp. Len teraz porovnavame cele osoby. Ak by sme porovnavali len podla priezviska tak potom:
int osoba_cmp(const void *va, const void *vb)
{
struct Osoba *oa = (struct Osoba*)va, *ob = (struct Osoba *)ob;
return ???;
}
Poznamka c. 11: ked uz mam scanfom nacitane pole znakov (retazec), napr. buf1, tak potom musim este nacitane meno prekopirovat do pola s osobami... teda osoba.meno = strdup(buf1);

ĎAKUJEM !!!

Re: Jazyk C zoradenie mien abecedne

Napsal: ned 16. říj 2011, 21:35
od Maranov
Laskavě si vezmi tento urážlivý pokus o podvod a vrať se tam, kde jsi ho získal. Jako by nešlo dokonce všechno tohle vygooglit.

Re: Jazyk C zoradenie mien abecedne

Napsal: ned 16. říj 2011, 22:54
od OndraSter
Kolik zaplatíš, buckynho? :P

LOCK.

Re: Jazyk C zoradenie mien abecedne

Napsal: pon 17. říj 2011, 00:53
od beardie
domace ulohy ee, spytaj sa kamaratov