Telefoní seznam – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Telefoní seznam – C / C++ – Fórum – Programujte.comTelefoní seznam – C / C++ – Fórum – Programujte.com

 

16. 12. 2019   #1
-
0
-

Dobrý den, rád bych měl dotaz jak začít, nebo jak postupovat při mém zadaném úkolu.

zadání 

Vytvořte jednoduchý adresář telefonních čísel, který  bude fungovat takto:

    - uživatel zadá telefonní číslo, nebo jméno člověka (na standardní vstup) program se podívá do adresáře, jestli již zadané číslo nebo jméno obsahuje.

    - Pokud adresář číslo nebo jméno neobsahuje, zeptá se program uživatele, zda chce do adresáře přidat nový záznam. Pokud uživatel záznam zadá, uloží si jej program do adresáře.

    - Pokud počítač v adresáři zadný údaj najde, vypíše ho.

Jsem teprve začátečník a nevím si s tím vůbec rady .

děkuji 

Nahlásit jako SPAM
IP: 195.178.92.–
16. 12. 2019   #2
-
+1
-
Zajímavé

c nebo c++?

Začni načtením vstupu. Pokud zadaný řetězec představuje číslo, půjde zkonvertovat na číslo. Pozor - do int velkého 32 bitů se telefonní číslo nemusí vejít, vyber si větší typ, Buď celočíselný 64 bitů nebo float. tak poznáš, jestli uživatel zadal jméno nebo číslo.

Je otázka, zda má mít existující tel. seznam v souboru (pamatuje si i po ukončení aplikace) nebo jen v paměti (po ukončení aplikace vše zapomene). Každopádně potřebuješ nějak utvořit pár jméno - číslo, použij např strukturu. Telefonní seznam pak můžeš uložit jako pole, v C++ by byl lepší vector. Nebo použít spojový seznam. Nevím, co jste probírali

A pak vyhledávání: Projdu pole, vector nebo spojový seznam a každou položku porovnám se zadanou - bud jméno, nebo číslo podle toho, co uživatel zadal. Při shodě vypíšu jak číslo tak jméno. Pokud dojdu na konec a nenajdu, zeptám se, zda uživatel chce zadat nový záznam do tel. seznamu.

hu

Ještě pozn.: Při práci se souborem bys nemusel mít ani pole, vector nebo spojový seznam, mohl bys to číst rovnou ze souboru a porovnávat se zadanou hodnotou. Např. když to uložím ve tvaru číslo;jméno, každý takový pár na jeden řádek textového souboru, Tak načtu řádek a rozdělím ho na jméno a číslo, porovnám se zadaným ....

Nahlásit jako SPAM
IP: 195.178.67.–
17. 12. 2019   #3
-
0
-

#2 hlucheucho
Zdravím, 

děkuji za postup, ale mohl by jste mi ukázat začátek řetězce, jelikož pořád si s tím nevím rady. Jinak může to být i v té jednoduší verzi jak jste psal a tvořím v C jazyku. 

Děkuji. 

PS: Ano vážně si nevím rady :) 

Nahlásit jako SPAM
IP: 217.112.164.–
gna
~ Anonymní uživatel
1891 příspěvků
18. 12. 2019   #4
-
0
-

Napiš si program, který přidá záznam (číslo+jméno) do souboru. fopen-fprintf-fclose.

A program, který vypíše obsah toho souboru. fopen-fscanf/fgets-fclose.

Pak to spoj dohromady. Uživatel ti něco zadá, ty projdeš soubor a vypíšeš odpovídající záznam(y). Když žádný takový nenajdeš, tak ho do souboru přidáš.

Píšu to samé, co napsal hlucheucho, víc nepotřebuješ. Úkoly vždy stojí na tom, co jste probírali. Nebo se zeptej na konkrétní věc, na které ses zaseknul.

Nahlásit jako SPAM
IP: 213.211.51.–
Kevil0
Návštěvník
18. 12. 2019   #5
-
0
-

#2 hlucheucho
Standardní tel. číslo 999 999 999 se v pohodě do 32 bitů vejde. Viz log10 999 999 999 / log10 2 = 29,90 bitů.

Nahlásit jako SPAM
IP: 89.177.163.–
18. 12. 2019   #6
-
0
-

#5 Kevil
ale v mezinárodním formátu už ne

hu

Nahlásit jako SPAM
IP: 2001:af0:ffe4:85f4:e9f7:20c4:2446:f73d...–
Kevil0
Návštěvník
18. 12. 2019   #7
-
0
-

#6 hlucheucho
Zadání nevypadá, že by mělo jít o čísla v mezinárodním formátu. I tak na ně stačí 40 bitů tj. 32+8 ;-).

Nahlásit jako SPAM
IP: 89.177.163.–
19. 12. 2019   #8
-
0
-

#7 Kevil
Mnohem jednodušší je ve sscanf použít %f. Druhá možnost je po jednotlivých znacích zjišťovat, zda je to cifra (a u prvního znaku +). Vymýšlet si svůj datový typ a k tomu ještě konverzi je pro tento účel blbost. Jde jen o to poznat, zda je zadáno číslo nebo jméno.

Pokud to v zadání není, neznamená to, že při zkoušení na to nemůže dojít. Mně osobně by "národní" telefonní seznam byl k ničemu když mám přátele i v zahraničí.

Dokonalost by byla, kdyby v zemi, kde se program používá, uměl číslo vyhledat bez ohledu na formát čísla. Pro vylepšení známky za školní úlohu by možná i stačilo, kdyby to dělal jen pro ČR.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
KIIV
~ Moderátor
+43
God of flame
19. 12. 2019   #9
-
0
-

#8 hlucheucho
%f - jako ze by to nacetl do floatu? Float se nepouziva ani v ucetnictvi, jelikoz je nepresnej.

uint64_t je mnohem vhodnejsi. Zvlada cisla na 19 mist.

Nicmene MSISDN a i IMSI sme meli vzdy jako retezec. Pokud si dobre pamatuju, tak o maximalni delce asi 20 ci 25 znaku

Nahlásit jako SPAM
IP: 37.48.58.–
Program vždy dělá to co naprogramujete, ne to co chcete...
19. 12. 2019   #10
-
0
-

#9 KIIV

Začni načtením vstupu. Pokud zadaný řetězec představuje číslo, půjde zkonvertovat na číslo. Pozor - do int velkého 32 bitů se telefonní číslo nemusí vejít, vyber si větší typ, Buď celočíselný 64 bitů nebo float. tak poznáš, jestli uživatel zadal jméno nebo číslo.

Hned první odstavec to řekl vše: jen detekce jestli bylo zadáno jméno nebo číslo, upozornění na nevhodnost datového typu int často velkého 32 bitů a návrh řešení této námitky. Zkrátka neptat se uživatele, co chce hledat, když to jde poznat ze zadaného.

Co jsem nenapsal: porovnávat řetězce. Konverze na číslo ztratí + na začátku čísla v mezinárodním formátu.

Na co jsem ani nepomyslel:
1. mezinárodní formát čísla může začínat na 00.
2. místo jména může být zadána přezdívka např. z chatu a tak může být první znak číslice

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

Telefoní budky — založil Zelenáč

OS seznam — založil Bengo

C++ Seznam — založil _Daffy_

Seznam — založil tom9k

Seznam z raw_input — založil Pepa Rohlik

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý