Ahoj všichni,mám malý problém,neak nemám tušení jak na to...............
Na vstupu je dán seznam nejvýše 100 jmen lidí. Každé jméno je uvedeno na samostatném řádku, je zapsáno pouze pomocí velkých písmen anglické abecedy, skládá se z křestního jména a příjmení, které jsou odděleny právě jednou mezerou. Vstupní seznam je ukončen řádkem obsahujícím jediný znak *.
Příklad takového seznamu:
BEDRICH SMETANA
LEOS JANACEK
ANTONIN DVORAK
*
Napište program, který všechna tato jména uspořádá podle abecedy a seřazená jména vypíše na obrazovku. Jména se řadí abecedně v první řadě podle příjmení, v případě shodného příjmení pak podle křestního jména.
Návod:
- můžete předpokládat, že žádné jméno není delší než 30 znaků, můžete je tedy ukládat do proměnných typu string[30]
- při čtení stringů ze vstupu nezapomeňte používat proceduru readln, nikoli read
- pomocí funkce POS nebo pomocí indexování stringu lze vyhledat pozici mezery ve jméně; pomocí dvojího zavolání funkce COPY je pak možné získat a uložit si zvlášť křestní jméno a zvlášť příjmení každého člověka (pro uložení jednoho jména člověka lze například použít záznam tvořený dvěma znakovými řetězci představujícími křestní jméno a příjmení)
- při porovnávání znakových řetězců tvořených pouze velkými písmeny anglické abecedy lze jednoduše využít standardní relační operátory nad typem string
- uvědomte si, že nemůžete jednoduše porovnávat načtené stringy s celými jmény lidí, neboť na vstupu se zadává vždy nejprve křestní jméno a pak příjmení člověka (při porovnávání celých jmen by se tedy provádělo řazení přednostně podle křestních jmen).
nevíte někdo jak na to?
Fórum › Pascal
Helpnete s úkolem
Deklaruj si dve pole retezcu (array of string).
Do prvniho nacti jednotlive radky ze souboru - cyklus, ktery pobezi tak dlouho, dokud nenacte radek s *.
U kazdeho radku zjisti pozici mezery (na to je funkce Pos - viz help), pomoci funkce Copy si z radku vytahni text pred mezerou (jmeno) a za mezerou (prijmeni) a zapis je do druheho pole v obracenem poradi (prijmeni, mezera, jmeno).
Ted muzes to druhe pole setridit beznym zpusobem porovnavani stringu (if jeden>druhy then je v abecede dal), protoze mas prijmeni vepredu.
Nakonec to zase otocene prekopiruj zpatky do prvniho pole a to vypis na obrazovku.
Samozrejme to jde i bez druheho pole - porovnavani jmen muzes udelat rovnou tak, ze najdes pozici mezery, prectes prijmeni, porovnas prijmeni, a kdyz jsou stejna, porovnas jeste jmena.
Kazdopadne budes potrebovat tohle (a nejspis nic jineho):
text, reset, readln, repeat - until, for, array, string, <, >, =, :=, pos, copy
vsechno najdes prehledne popsane v helpu, opisovat ho sem nebudu.
Moje stránka.
Jak podrobně to chceš?
http://mircosoft.ic.cz/texty/UKAZ.TXT
http://mircosoft.ic.cz/download/strom.pas
Moje stránka.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Problem s jednim programikom Helpnete pls — založil Dark
Problém s úkolem c++ — založil Michal
Pomoc s ukolem — založil Bronsky
Problém s úkolem c++ — založil Michal
Pomoc s úkolem — založil Malirka
Moderátoři diskuze