
Jazyk C
Dobrý den, narazil jsem na Vaši poradnu a řekl jsem si, že by mě odtud někdo mohl pomoc. Potřeboval bych pomoc s projektem v Jazyku C, který mám na VŠ. Nejsem ještě moc zběhlý v programování a tento projekt je pro mě dost obtížný. Chtěl bych se zeptat jestli je tu někdo ochotný mně s tím trochu pomoc. Děkuji mockrát.
Změna kategorie, původně: Ostatní (Kurt)
Mohl byste mě s tím někdo pomoct prosím? Už mě začíná tlačit čas a moc toho nemám. Děkuju
Až se zeptáš, s čím máš konkrétně problém, určitě zde nalezneš spoustu rad. Dotaz typu "Ještě potřebuju udělat výběr sloupců" opravdu není konkrétní problém.
Viz MS:
Tady je můj kód co zatim mám:
No a otázka tedy zní jak? S kterou částí kódu máš problémy?
Jen drobnost - osobně bych testování na zadaný parametr řešil spíše pomocí switch - case, připadá mi to přehlednější než hejno else-if: c12.php
Konkrétní problém je v tom že nevím jak napsat ty podprogramy pro max, min, sum,... a výpis sloupce a řádků.
No a to je přece základ, pak už je to snadné - jak ti už bylo poraděno:
Až budeš tohle mít, budeš schopen zjistit hodnotu v každé přečtené buňce, že?
Pak lze třeba podprogram pro zjištění maxima algoritmizovat následovně:
- MAX = 0
- čti ze souboru, dokud nedojdeš na jeho konec
- je-li přečtená hodnota v buňce větší než MAX => MAX = hodnota
Minimum, suma apod. je podobný.
Já furt nevim jak zprovoznit ten výpis řádků. Nevim prostě jak na to.
Tak řádky mám, teď potřebuju sloupce,ale to už jsem v háji, když jsem viděl kód kámoše jak to má, tak je jasný že tohle nezvládnu :/
Nech si to od kámoše vysvětlit. Nepočítej s tím, že tady uděláme všechno za Tebe!
poradna jak stehno tady :D :D
všichni se ti snaží pomoci, ale ty pomoc evidentně nepotřebuješ, ty chceš pracanta, co ti to napíše za tebe..
Já jsem psal že bych potřeboval poradit s tím jak mám udělat výběr sloupců a na to mě nikdo neodpověděl, ale na urážení je tady každej pohotovej
A to teda máme čmuchat nebo hádat, jak přesně to máš doteď uděláno? Tvůj problém lze vyřešit mnoha způsoby - například já bych to dělal pomocí dvourozměrného pole třeba takto:
Společná část - naplnění pole (provede se vždy)
- načtu řádek
- rozparsuji dle oddělovače
- naplním odpovídající řádek onoho dvourozměrného pole rozparsovanými hodnotami - tj. a[i,j] kde i je zafixováno, j se mění od 1 do počtu prvků v řádku
- opakuji do dosažení konce souboru
Výpis řádku:
- vypíšu prvky a[i,j] kde i je zafixováno (odpovídá požadovanému číslu řádku), j se mění od 1 do počtu prvků v řádku
Výpis sloupce:
- vypíšu prvky a[i,j] kde j je zafixováno (odpovídá požadovanému číslu sloupce), i se mění od 1 do celkového počtu řádků
Ale co když třeba doteď s polem nepracuješ? To se budeš zase ptát, jak to máš skloubit s tím, co už máš?
Zeptej se konkrétně - tj. vlepíš sem kus kódu a napíšeš "na pátým řádku mi to hází tu a tu chybu", "mezi řádky 15 až 16 bych chtěl to rozdělení do sloupců", atd.,
Teď mám zatim udělaný tohle na ty sloupce, ale vypisuje mě to jen prázdnej řádek:
teda takhle to mám
Pokud jsem to správně pochopil, očekáváš jako oddělovač sloupců mezeru?
Pokud ano, tak proč zvušuješ počitadlo sloupců cols i v případě, že načteš jiný znak, než mezeru?
Proč tam vůbec máš tu proměnnou predZnak?
Kde ji plníš před prvním průchodem?
Proč ji v každém průchodu přiřazuješ stále stejnou hodnotu proměnné c (predZnak = c)?
Co vlastně obsahuje ta proměnná c a kde ji plníš?
Jaký má smysl do proměnné znak uložit hodnotu proměnné c (char znak = c), když ji pak okamžitě přpíšeš načtenou hodnotou ze souboru (znak=getchar())?
P.S.: pokud jsem něco pochopil špatně, omlouvám se, Céčko jsem potkal asi tak před 10 lety jen z rychlíku, jinak dělám v Delphi nebo VBA.
tu proměnnou predZnak tam má proto abych mohl porovnávat např. jestli to je mezera nebo znak a porovnávám to s proměnnou znak
Co je mezera nebo znak?
S proměnnou znak ji určitě neporovnáváš, protože první test
značí - když je predZnak mezera a znak není mezera, pak ...
A druhý test
zase - když predZnak není mezera a znak je mezera, pak ...
Pochopil bych, kdyby proměnná predZnak obsahovala dělící znak mezi sloupci (klidně by ses na ten oddělovač mohl zeptat na začátku programu) a měl bys při tom načítání místo těch dvou testů jediný:
Ale s tím nahoře opravdu nevím, jaký máš úmysly.
Zkus ještě odpovědět:
Leze to z Tebe jak z chlupatý deky.
Promiň já teď řeším víc věcí na jednou. Teď jsem si uvědomil že ten predZnak = c je blbost. Já jsem chtěl prostě udělat podmínky a nějak to na kombinovat se sloupcema, ale teď jsem se do toho tak zamotal že už nevím jak to udělat. Možná by to bylo jednodušší to načítat do pole kazdej řádek jako buffer který může mít max 1024 znaků na řádek se a rozdělit ho nějak na sloupce ale nevím jak.
Už to zase zesložiťuješ. Tvůj hlavní problém je ten, že neumíš algoritmizovat, tj. rozložit si logicky úkol na jednodušší části a slovně popsat přesný postup řešení problému. A "vo tom to je", tohle je naprosto nezbytný základ každého programátora!
Myslím tím třeba tohle:
- nastavím počitadlo sloupců na 1
- načtu znak ze souboru (opakuji, dokud není přečten znak EOF)
- je načten konec řádku?
- - pokud ano, vypíšu na výstup znak oddělovače a nastavím počitadlo sloupců na 1
- je načten znak oddělovače sloupců?
- - pokud ano, zvětším počitadlo sloupců o 1
- odpovídá počitadlo sloupců zadanému sloupci?
- - pokud ano, vypíšu načtený znak
- jdu zpět na načtení dalšího znaku
Znak pro oddělovač sloupců si v předchozím programu buď pevně zadáš nebo vypíšeš na obrazovku požadavek, ať jej zadá uživatel a znak pro oddělovač odtud načteš.
Ve výstupu (což má být výpis sloupce) tak budou vypsány všechny prvky daného sloupce, oddělené stejným oddělovačem, jako ve vstupním souboru.
Samozřejmě to jde i jinak - třeba přes ten buffer, nebo přes dvourozměrné pole, nebo dalšími dvaceti pěti způsoby, ale vyšel jsem z toho, co ses pokusil naprogramovat.
Zápis do Céčka už dokáže z toho popisu vyrobit každá lépe vycvičená opice:
Díky moc, trošku jsem to poupravil a už to funguje, ještě bych potřeboval pomoct vypisovat interval od nějakého řádku po nějaký řádek. Měl by jít upravit nějak tenhle kód, ale nevim jak. Děkuju za pomoc.
Stačí přece před výpis přihodit test (napíšu to obecně, Céčko mě minulo široký obloukem, takže ten uvedený kód ani nezkoumám):
Příčemž:
aktuální_řádek - číslo právě zpracovávaného řádku
řádek_start - počáteční řádek, která se má vypsat (zadaná hodnota)
řádek_konec - koncový řádek, která se má vypsat (zadaná hodnota)
Opravdu se prvně nauč algoritmizovat!