» Poradna » Programy

Céčkaři, pomoc!!!

 |   | 

Jsem začátečník v Céčku a potřeboval bych poradit. Mám napsat program, který vyhledá ve zdrojovém souboru N-té reálné číslo a vypíše ho na obrazovku. Volání: dohledej  zdroj_soubor  NVůbec nevím, jak na to. Jaký příkazy mám použít?

Odpovědi na otázku

 |   | 

Najprv si nastuduj prednasky (predpokladam ze to mas zadanie do skoly) a potom zacni trochu rozmyslat, ak sa ti zda rozmyslanie tazke tak sa na programovanie vykasli.Otvoris subor na citanie, potom napr. v cykle nacitavas znaky, porovnavas s povolenymi znakmi, nejakymi stavovymi premennymi si ukladas ci to je real. cislo a pocitas realne cisla, ak sa pocet bude rovnat n, vypises, koniec cyklu, zavries subor.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

... otvorenie/zatvorenie suboru napr. stary Cckovsky streamovy fopen, fclose (ak aplikacia pre win32 tak CreateFile, CloseHandle), cyklus je snad jasny, for alebo while alebo do-while, na citanie znaku napr. fgetc (ak mas subor otvoreny cez fopen), testovanie na cislo si snad urobis ak trochu porozmyslas (prikaz if - ano, toto je prikaz), na testovanie cisla je podla mna fscanf v tomto pripade nepouzitelne ptz. nevracia pointer kde konverzia skoncila, na vypisanie stringu napr. puts alebo printf.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Díky moc, aspoň že teď znám ty příkazy.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Nějak jsem to dal dohromady, ale nevím, jak napsat, aby to četlo třeba 20. číslo. Mně to čte jenom první.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Existuje taka vec co sa vola debugger, obycajne byva spolu s compilerom. Tam si to pekne odkrokuj a pozeraj si v kazdom kroku premenne a ze kam ti to leze.Sorry nevidim ti cez chrbat do zdrojakov , ale aj tak najlepsie bude ak na to prides sam s pomocou debuggera, aby si si aj nieco z toho zapamatal...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Mám jenom něco málo, ale chodí to blbě   #include <stdio.h>int main(void){FILE *vstup;int ii,N;char aa;clrscr();printf("Zadejte, kolikaty znak se ma vytisknout: ",N);scanf("%d",N);vstup = fopen("ZDROJ.TXT","r");for (ii=1; ii<N; ii++) aa = fgetc(vstup); putch(aa);close(vstup);return 0;}

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Si sa ale slabo ucil . Trochu aj rozmyslaj.1. ak chces vstupne parametre prik. riadky (mas to v zadani) tak fcia main ma 2parametre:int main(int argc, char *argv[ ])argc je pocet parametrov (vcetne nazvu samotneho programu)argv je pole retazcov char (argv[0] je nazov programu, argv[1] je prvy parameter atd., vsetko su stringy = polia char) !t.j. napr.int main(int argc, char *argv[ ]){  if(argc != 3)  {     printf("Nespravny pocet parametrov!\n");     printf("... tu bude nejaky help k programu .... \n");     exit(0);  }  vstup = fopen(argv[1],"r");  //testovat navratovu hodnotu !!!!!!!!!!!!!!!!!!! Co ak subor neexistuje? Vypisat chybu a skoncit.  //do scanf musis odovzdat adresu parametra aby ho vedela fcia zmenit, mas to popisane v helpe k scanf resp. sscanf  if(sscanf(argv[2], "%d", &N) != 0)  {  // vypisat chybu a skoncit, 2.parameter nie je cislo!  } // teraz mas spravne N aj spravny otvoreny subor, takze mozes si vyhladat N-te realne cislo. // BTW. asi vies, ak robis cyklus tak musis telo cyklu uzavriet do { } ak je to viac ako jeden prikaz. // v zadani mas  vyhladat N-te realne cislo, nie znak, ale najprv si to mozes skusit s tym znakom.// Ak budes hladat tie realne cisla tak cyklus bude az pokial fgetc nevrati EOF alebo pokial sa nenajde N-te realne cislo, realne cislo budes hladat napr. tak ze si musis pamatat predchadzajuci stav - ci predch. znak patril realnemu cislu alebo nie. Ak ano a aj terajsi znak patri realnemu cislou (ak znak je '1' az '9' alebo ',' alebo '.') tak ides len na dalsi znak. Ak predch. znak nepatril real. cislu a terajsi patri, zvysis si pocitadlo a porovnavas s N. Jasne?// Uz to musis zvladnut, a nabuduce davaj v skole pozor ked sa snazia ta nieco naucit ! .}

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

sorry, chyba, v riadkuif(sscanf(argv[2], "%d", &N) != 0)malo byt samozrejme if(sscanf(argv[2], "%d", &N) == 0) - vtedy je chyba (0 parametrov skonvertovanych na cislo, t.j. 2.parameter nie je cislo).

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

a na konci musi byt samozrejme fclose, nie close (samozrejme vykonat len ak bolo fopen uspesne - t.j. ak vstup != NULL). To ti prekladac zozral to close ???

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

S tím close to taky chodí.Céčko se učím teprve od tohohle semestru a moc jsme neprogramovali , druhá skupina má jinýho vyučujícího a programují pořád.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Ved sa snazim ta naviest, ale ak si na vyske tak sa ocakava uz aj ze si budes zhanat informacie aj sam, v praxi ti nikto nic nenaserviruje v prednaskach a programator musi stale ziskavat nove informacie (stale prichadzaju nove veci)...Snaz sa to urobit aspon tak ako som pisal, ten algoritmus na testovanie real.cisel si musis vediet vymysliet, citak program a rozmyslaj, mas cyklus, v kazdom priebehu cyklu jeden znak, mozes mat v nejakych premennych ulozene nejake informacie o tom co bolo v predch. znaku / znakoch (ci to bol platny znak cisla), a teda vies sa v kazdom priebehu cyklu rozhodnut ci zacoina nove cislo alebo nie... Dokoncenie si uz vymysli sam.Samozrejme mozu byt aj ine mozne sposoby, mozes si pozriet fcie ANSI C aby si mal aspon prehlad co vsetko sa da v zakladnom C-cku, ak prides na lepsi sposob mozes si to potom vylepsit...Som si spomenul - close myslim nie je ANSI C fcia ale prekladace ju poznaju, ale je to ina fcia, close chce parameter ktory vratila fcia open, prekladac ti to sice zozere ale nie je to korektne (nezavre to spravny subor). Ak otvoris fciou fopen, tak zatvorit fciou fclose (pretoze tie fcie pracuju inac s inymi parametrami, f... funkcie su buffrovane, a open, close, read, ... nie su buffrovane, je to "priamejsi pristup"). Lepsie je pre teba teraz fopen, fgetc, ...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

BTW. na to ze C sa ucis jeden semester si to vyhladanie N-teho znaku v suboru napisal celkom dobre (aj ked zadanie ulohy je trochu zlozitejsie), v podstate ak si tam opravis to scanf tak by to uz malo vypisat N-ty znak suboru.Chybicky ktore tam mas (aby si sa priucil ):1. netestujes navratove hodnoty (uz som pisal vyssie)2. v printf ak nemas vo formatovacom retazci ziaden formatovaci znak (t.j. ziadne %d apod.), tak netreba dalsie parametre, t.j.printf("Zadejte, kolikaty znak se ma vytisknout: ");     // netreba tu parameter ,Nk printf trochu na poucenie:napr. printf("%d. znak suboru je %c.\n", N, aa);  // treba 2 parametre, prvy je typu int (%d), druhy typu char (%c)To \n znamena v C novy riadok (prekladac namiesto toho vytvori v retazci znak s ASCII kodom 13). V C je definovanych viac takychto "hashov", napr. \t je tabelator (ASCII 9 ?), \r navrat na zaciatok riadku (ASCII 10), ak chces v C napisat napr. do retazca znak \ tak ho musis zdvojit, t.j. napr. printf("test\\"); ti vypise test\3. scanf - parameter musi byt pointer ako som uz pisal4. fclose namiesto close - uz som tiez pisal.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Ještě jednou díky moc za rady. Máš pravdu, lepší je, když na to přijdu sám, ale dá to práci, aspoň si to budu pamatovat.Informace si samozřejmě sháním.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Ak budes mat nejaky problem ktory nebudes vediet vyriesit napis sem.Hlavne sa nauc robit aj s debuggerom, neviem aky prekladac/vyvojove prostredie pouzivas, niekde tam musis mat v menu "start debug"...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

me taky

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Reálné číslo


Určitě si přečtěte

Šmírování kamerami Googlu: Koukněte, co šíleného se objevilo na Street View

Šmírování kamerami Googlu: Koukněte, co šíleného se objevilo na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 6

Nejlepší notebooky do 10 000 korun: Co koupit a čemu se raději vyhnout

Nejlepší notebooky do 10 000 korun: Co koupit a čemu se raději vyhnout

** Do deseti tisíc korun lze dnes koupit slušné notebooky ** V nabídce ale i tak převládají zastaralé a pomalé modely ** Poradíme, jak dobře vybrat i s omezeným rozpočtem

David Polesný | 99

Že by konečně revoluce? Nové chytré hodinky od Garminu mají průhledný solární panel

Že by konečně revoluce? Nové chytré hodinky od Garminu mají průhledný solární panel

** Chytré hodinky mají relativně malou výdrž ** Sportovní fénixy od Garminu jsou na tom ale lépe ** Poslední verze nabízí dokonce transparentní solární panel

Jakub Čížek | 56


Aktuální číslo časopisu Computer

Megatest 20 procesorů

Srovnání 15 True Wireless sluchátek

Vyplatí se tisknout fotografie doma?

Vybíráme nejlepší základní desky