Ahojte, mám prosbu nevěděl by někdo jak na tohle zadání úkolu. Vůbec netušim jak na to, takže byl bych docela rád za vypracování, potřebuju ispiraci když uvidim nějakej kód fční tak si to pak překopu na to svojí verzi, který bych rozumněl lépe.
Úkolem je realizovat C/C++ program, který ze standardního vstupu načte 2D matici desetinných čísel, tuto matici uloží v paměti a bude v ní přesouvat prvky "snake" způsobem o zadaný počet pozic.
Vstupem programu je nezáporné celé číslo posun a čtvercová matice desetiných čísel. Celé číslo posun udává počet pozic, o které se má obsah matice posunout. Vlastní matice je zadaná jako posloupnost desetinných čísel. Řádek na vstupu představuje vždy jednu řádku matice. Čísla na řádku jsou oddělená mezerami a tabulátory (bílé znaky). Počet bílých znaků před prvním číslem na řádku, mezi čísly na řádku a za posledním číslem na řádku není omezený. Vlastní desetinná čísla jsou zapsaná v C/C++ notaci (nepovinná desetinná tečka, nepovinná desetinná část, nepovinný exponent a nepovinné znaménko exponentu). Zápis jednoho desetinného čísla má nejvýše 50 znaků.
Výstupem programu je obsah matice po provedení požadovaného počtu přesunů prvků. Matice je zobrazena po řádcích (řádek matice = řádek na výstupu), mezi prvky matice je vždy právě jedna mezera, před prvním a za posledním prvkem matice na řádce nejsou žádné mezery. Čísla na výstupu jsou zobrazena s přesností na 2 desetinná místa. Za každou žádkou výpisu (tedy i za poslední) je odřádkování (\n).
Program detekuje chybu a generuje odpovídající chybovou hlášku pokud zjistí, že vstupní data nemají odpovídající formát nebo pokud matice není správně zadaná (není čtvercová, nekonzistentní počet čísel na řádce). Chyba je zobrazena okamžitě po jejím zjištění. Za chybovým hlášením je odřádkování.
Přesun prvků matice "snake" způsobem je naznačen na následujícím obrázku:
"Snake" procházení maticí
Vytvořený program je spouštěn v omezeném prostředí. Je zakázáno používat C++ datový typ string a kontejnery z STL (vector, list, ...). Jejich použití povede k chybě při kompilaci. Je omezena doba běhu programu (max. 3 sec na jedno spuštění, referenční řešení potřebuje na výpočet cca 0.1 sec) a je omezena velikost dostupné paměti (dostačuje pro uložení dvou matic v binární podobě).
Ukázka práce programu:
Zadejte velikost posunuti:
3
Zadejte ctvercovou matici (radek matice = radek na vstupu):
1 2 3
4 5 6
7 8 9
Vysledna matice:
7.00 8.00 9.00
3.00 2.00 1.00
6.00 5.00 4.00
Zadejte velikost posunuti:
5
Zadejte ctvercovou matici (radek matice = radek na vstupu):
1 2 3 4
4 5 6 7
8 9 0 1
2 3 4 5
Vysledna matice:
1.00 5.00 4.00 3.00
3.00 2.00 1.00 2.00
4.00 7.00 6.00 5.00
0.00 9.00 8.00 4.00
Zadejte velikost posunuti:
2000000000
Zadejte ctvercovou matici (radek matice = radek na vstupu):
9 8 7 6 5
4 3 2 1 0
0 1 2 3 4
5 6 7 8 9
1 3 5 7 9
Vysledna matice:
9.00 8.00 7.00 6.00 5.00
4.00 3.00 2.00 1.00 0.00
0.00 1.00 2.00 3.00 4.00
5.00 6.00 7.00 8.00 9.00
1.00 3.00 5.00 7.00 9.00
Zadejte velikost posunuti:
5
Zadejte ctvercovou matici (radek matice = radek na vstupu):
1.25 -5.7 0.43
2e3 -4.5e-1 6.32
0 5.3e2 6.66
Vysledna matice:
-0.45 2000.00 0.00
1.25 6.66 530.00
-5.70 0.43 6.32
Zadejte velikost posunuti:
2
Zadejte ctvercovou matici (radek matice = radek na vstupu):
1 2 3
2 3 4
4 5
Nespravny vstup.
Zadejte velikost posunuti:
3
Zadejte ctvercovou matici (radek matice = radek na vstupu):
4 5
7 error
Nespravny vstup.
Nápověda
* Prostor pro matici je potřeba alokovat dynamicky.
* Dynamicky alokovaná paměť musí být uvolněna.
* Pro zpracování desetinných čísel na vstupu použijte funkci sscanf.
* Nenačítejte do paměti celé řádky najednou - v testovacích vstupech jsou úmyslně řádky velmi dlouhé, s dlouhými sekvencemi bílých znaků (překračují velikost dostupné paměti).
* Požadovaný posun může být velké číslo. Iterace a posouvání po jednom může překročit přidělený časový limit. Použijte efektivnější algoritmus, přesuňte správně čísla jedním průchodem maticí.
Fórum › C / C++
Had
Tak jsem to střihl přesně na 50 řádek.
Nandal jsem tam všechna ta zadání co jsi napsal a jsou OK.
Jestli s tim máš nějakej problém, tak se na něco optej neni v tom žádný chyták.
Dal jsem tu :-)) exe, na začátku chce velikost posuvu. To pole načítá ze souboru pojmenovaného vstup souboru bez přípony.
To o-lox : Nechce se to nechat spustit. A nemohl bys mi pls poslat zdroják. Zajímá mě jak jsi udělal ty vstupy jsem úplnej začátečník v c a tak by mě zajímalo jak jsi to tam udělal. Když tak to pošli na ekkys@seznam.cz
Už jsem zadušený tim jak chce každej líně k hubě zdrojáky, nechápu tu NESPUSTITELNOST ! Nemá to žádný linkovaný dll jen user32,kernel, že by ses pokoušel o Linuxový zážeh :D ?
A zdroják tak ten jsem mám dojem neodeslal ani ve snech, které si z včerejšku na dnešek snil ať byly třeba jedny z těch nejpodařenějších snů. :D
** **
Načítám přes tyto funkce
float h;
getc(), ungetc(), scanf("%e",&h)
tak si zjisti která se na co hodí. nauč se s dynamickou pamětí float* a posuvem vždy o 1 prvek, trivialita.
víc ti tu můžu napsat už leda tak rovnou tu smyčku
Co se týče dynamický alokace, tam jsem moc nepochopil, když nevíš přesně velikost matice takže řešim realokací (minimálně u prvního řádku) pro případy matice 1000x1000.
Taky si ohlídej zda každej řádek splňuje stejný počet sloupců na to stačí jedna další proměnná.
---
Jinak máš psát člověče kolik deka koksu mi to hodí nebo posílat access na unikátní porno servery..
(nebo seknout s programovánim)
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
PyGame - pohyb hada — založil Pararam
Semestrální práce - Hra na hádání čísel — založil SarinkaP
Hadanicisel-maximalnipocetpokusu — založil MartinMartin12341234
Programovací hádanka (C#, Visual studio) — založil trumpeta
Moderátoři diskuze