/* Program cikcak v1.0 Adam Sádovský 27.11.2004 30. Napište program, který umístí znak * do 39. sloupce 13. řádky obrazovky, poté čte obsah zadaného souboru a reaguje takto: po přečtení znaku L pohne znakem * o jednu pozici vlevo, po přečtení znaku T pohne znakem * o jednu pozici nahoru, po přečtení znaku R pohne znakem * o jednu pozici vpravo, po přečtení znaku B pohne znakem * o jednu pozici dolů, po přečtení znaku ~ nebo při dosažení konce souboru program skončí s vydáním hlubšího tónu po dobu 1 sec. Pokud pohyb kurzoru překročí hranice obrazovky, program skončí a vydá dvě výstražná pípnutí. Mezi pohyby vložte vhodnou časovou prodlevu. volání: cikcak jmeno_souboru */ #include #include #include /* pauza mezi kroky */ #define PAUZA 200 /* pipne na urcenou dobu */ void beep(int delka) { sound(150); delay(delka); nosound(); } /* pipne n-krat */ void nbeep(int pocet) { for (int i = 0; i < pocet; i ++) { sound(400); delay(200); nosound(); delay(100); } } /* vykresli * na urcene souradnice v urcene barve a zkontroluje meze - vraci false pri prekroceni */ int bod(int x, int y, int barva) { if ((x < 1) || (x > 80) || (y < 1) || (y > 25)) return 0; textcolor(barva); gotoxy(x, y); putch('*'); return 1; } int main(int argv, char *argc[]) { if (argv != 2) { // ocekava jeden argument printf("Pouziti:\n"); printf(" cikcak.exe [jmeno_souboru]\n"); return 0; } FILE *soubor = fopen(argc[1], "rt"); // otevri pro cteni v textovem rezimu if (soubor == NULL) { // povedlo-li ci ne-li se otevreni souboru printf("Chyba pri praci se souborem - mozna spatne zadany nazev\n"); return 0; } int c = 0, x = 39, y = 13; // c - nacteny znak int OK = 1; // OK - boolean - stav behu programu clrscr(); while (((c = fgetc(soubor)) != EOF) && (c != '~')) { // dokud neni konec souboru nebo neni nacten znak ~ bod(x, y, 0); // smaz bod switch (c) { case 'L': x --; break; case 'T': y --; break; case 'R': x ++; break; case 'B': y ++; break; default : continue; // jakykoli jiny znak -> jdi na zacatek ciklu a cti znovu } OK = bod(x, y, 15); // zobraz bily bod - uloz zda se povedlo if (!OK) break; // pri chybe ukonci cyklus delay(PAUZA); } textcolor(7); // vrat barvu textu clrscr(); if (fclose(soubor) == EOF) printf("chyba - nepodarilo se zavrit soubor\n"); // zavri soubor - chybu ohlas if (OK) beep(1000); // program zkoncil vpohode else nbeep(2); // program zkoncil predcasne return OK; // vrat stav behu programu }