Autor |
Správa |
Skočiť do kategórie Skočiť do témy |
cukamart |
Napísal: 28 Jan 2013, 11:04
|
|
|
Zatial pridavam len 7 uloh lebo pri 7 som sa celkom zasekol, program ma porovnat ci su zhodne alebo odlisne subory pokial su odlisne tak vypise v kolkych znakoch... Pride mi to dost tazke pretoze ked do stredu suboru vlozim jeden znak tak automaticky bere vsetko od toho znaku ze je ine... kazdopadne to ma az tak nestve ako jadro programu: while ( !feof(fr1) || !feof(fr2) ){ if ( (c=getc(fr1)) != (d=getc(fr2)) ) x++; continue; } jedna sa o tuto podmienku while ( !feof(fr1) || !feof(fr2) ) mam 2 subory fr1 aaa fr2 aaabbb podla mna by v tomto pripade malo vypisat ze su zhodne... prva podmienka je splnena kedze je tam || druha sa nepozera a malo by ist prec z cyklu...no aj napriek tomu vypise ze su rozdielne v 3 znakoch :?: Tak to má byť, rozdiel je vo veľkosti súboru práve o tie 3 znaky. || znamená alebo, teda kým platí aspoň jedna z podmienok, cyklus pokračuje.
http://www.ulozisko.sk/obrazky/477730/vcielka1.jpg generovanie - zle, súbor nemá obsahovať čísla ale znaky, 1. úloha - nespĺňa zadané podmienky - opraviť Upravil som ti kód, aby spĺňal podmienky úlohy: do{ switch((c=getc(fr))){ case ('0') : printf("Bola to 0.\n"); break; case ('1') : printf("Bola to 1.\n"); break; case ('q') : printf("Quit\n"); goto koniec; default : break; } }while( (c!= EOF) ); 2. úloha - OK, na konci výpisu mohol byť pridaný odriadkovač, nie každý súbor končí Entrom - opravené, len malá poznámka, na výpis jedného znaku sa spravidla používa putchar('\n'); a nie printf("\n"); ale v podstate je to asi jedno.
3. úloha - aj Enter je znak - opravené
4. úloha - posledný riadok nemá žiadne znaky? - opravené
5., 6., 7. úloha - OK 8. úloha - OK 9. úloha - OK
10. úloha - skoro dobre, ale má byť 1 - 10 A/N 11 - 20 ... - opraviť - stále to ešte nie je to pravé 1 - 10 A/N 10 - 20 A/N 20 - 30, malo byť 11 - 20, 21 - 30
11. úloha - OK libcosenior
Všimol som si, že si až v dvoch úlohách použil príkaz goto. Má sa používať čo najmenej - skoro vôbec, len v najnutnejších prípadoch, napr.: vo viacnásobne vnorených cykloch. Skoro vždy sa dá nahradiť inými, bežnými príkazmi alebo funkciami. |
|
|
Skočiť do kategórie Skočiť do témy |
cukamart |
Napísal: 23 Jan 2013, 16:20
|
|
|
Tak pridam svoje riesenia k uloham z opakovania lekcie 8 1-15 (okrem 13. robil som to v autobuse na ceste domov a to by som si musel rozpisat na papier :D) - par uloh som mierne upravil aby mohli byt pouzite globalne nie len na 1 specificke zadanie - za pripadne problemy so system("Pause") sa ospravedlnujem :) ps: s programovanim som len na zaciatku takze za akekolvek odborne postrehy budem rad :) http://www.ulozisko.sk/obrazky/477730/vcielka1.jpg Vidieť, že si veľmi šikovný. Úlohy sú napísané dobre a sú ošetrené voči chybám. Ale aj tak mám niekoľko poznámok. - Programy sú vačšinou málo prehľadné, nerobíš bloky, druhým sa zle čítajú. Ak by si písal väčší program (napr. 500 riadkov), stratíš sa v ňom aj ty. - Pri niektorých blokoch je dobre písať komentáre, lebo keď sa k tomu sám vrátiš za rok, možno budeš mať problém rýchlo pochopiť o čo ide. - Niektoré programy si napísal príliš zložito, mohli byť podstatne jednoduchšie. (5, 10, 12, 15) Porovnaj si ich s Pomocníkom a odovzdanými úlohami od iných členov. - V 10. úlohe si to riešil pomocou jednorozmerného poľa, to je nad úroveň škôlky. Navyše po spustení programu užívateľ nevie čo má robiť, program sa mu zdá nefunkčný. - Zbytočne si includoval knižnicu math.h. Ak si si myslel, že do nej patrí príkaz abs(x), nie je to pravda, ten patrí do stdio.h. - 11 úloha nie je splnená. - V 14. a 15. úlohe si zmenil podmienky úloh. - Namiesto viacnásobného if je vhodné používať if else if else napr. 2. úloha. - Vôbec nepoužívaš podmienený výraz a ten je tiež niekedy vhodný, napr. 11. a 12. úloha.
Ale celkove si ukázal veľmi dobré znalosti. Zvlášť sa mi páčilo toto (8. úloha): for (i=a; i<=b; i++){ if (abs(i)%2==0) // otočenie keď je a vačšie ako b - šikovné ....}
PS. Čo sa týka 12. úlohy, pozri sa poriadne na: do { }while;
libcosenior |
|
|
Skočiť do kategórie Skočiť do témy |
cukamart |
Napísal: 30 Jan 2013, 12:35
|
|
|
1. uloha som si nie velmi isty tym vstupom... Asi by to bolo velmi pomale pri velkych vstupoch...
Dobre napísané kódy. libcosenior |
|
|
Skočiť do kategórie Skočiť do témy |
cukamart |
Napísal: 31 Jan 2013, 08:18
|
|
|
No je to sice naivnym algoritmom ale snazil som sa to napisat co najprehladnejsie tak snad sa bude pacit |
|
|
Skočiť do kategórie Skočiť do témy |
cukamart |
Napísal: 31 Jan 2013, 20:08
|
|
|
Na 7dmicku sa musim vyspat :) resp. lepsie povedat precitat si teoriu, zajtra dodam :) edit: 7dma uloha je teda rozdelena do dvoch suborov HLAVNI.c MAKRO.c , nic tazke ako som sa docital :) http://www.ulozisko.sk/obrazky/477730/vcielka1.jpg 1 - ok 2 - ok 4 - ok, ale makro: #define je_velke(c) ( ( isupper(c) ) ? 1 : 0 ) mohlo byť jednoduchšie: #define je_velke(c) (isupper(c)) 5 - ok, ale makro: #define lze_tisknout(c) ( ( (c)>=32 && (c)<=126 ) ? 1 : 0 ) mohlo byť jednoduchšie: #define lze_tisknout(c) (isprint(c)) 6 - ok 7 - ok 8 - oklibcosenior |
|
|
Skočiť do kategórie Skočiť do témy |
cukamart |
Napísal: 06 Feb 2013, 18:30
|
|
|
K trojke by som sa rad spytal preco ked dam return(volanie++); napise, ze sa funkcia zavolala 1141krat a ked dam volanie++; return(volanie); napise 1142 :geek:
Toto sa predsa rieši v škôlke. :? Pri return(volanie++); sa posledný krát ++ neuskutoční. Pri volanie++; return(volanie); sa uskutoční aj posledný krát, pretože prejdeš na ďalší riadok
Je to riešené v 2. lekcii škôlka
Mimochodom, ešte som ti nemohol úplne ohodnotiť úlohy zo 4. lekcie, pretože ich tam ešte niekoľko chýba. ;)
1 - OK 2 - OK 3 - OK 4 - OK
libcosenior |
|
|
Skočiť do kategórie Skočiť do témy |
cukamart |
Napísal: 04 Feb 2013, 19:56
|
|
|
No. nieje to ziadna slava postupne popridavam zvysok ale aspon som dobojoval so 7dmickou teda aspon dufam ze to ide :) http://www.ulozisko.sk/obrazky/477730/vcielka1.jpg 1 - OK, dobre použitá knižnica math.h s funkciou pow() - umocňovanie, použil si register aj keď ten program sa myslím nejak výrazne nezrýchli 2 - OK, s medzerami je to samozrejme krajšie, použil si register aj keď ten program sa myslím nejak výrazne nezrýchli 3 - OK, pekne a jednoducho 4 - OK, pekne napísane, len som si všimol už pri viacerých úlohách, že výpočty robíš zásadne mimo funkcie printf(), aj keď je to prehľadnejšie, nie vždy je to žiadúce, príklad.: máš to takto: x=vyskyt(fr, c); printf("Zadany znak sa v subore nachadza %d krat.\n", x); a môže to byť aj takto (ušetríš premennú x): printf("Zadany znak sa v subore nachadza %d krat.\n", vyskyt(fr, c)); 5 - OK, len maličkosť, na výpis jedného znaku (po znakoch) sa spravidla používa funkcia putchar(), nie printf() 6 - OK, teraz to presne plní svoju funkciu :) 7 - OK, dobre napísané, malá pripomienka: 32 riadok - vo funkcii else if() si veľmi dlhý výraz(podmienku) napísal do jedného riadku, teda poriadne presahuje viditeľnú oblasť, to sa robí tak, že sa dlhý riadok zalomuje aby jeho obsah bolo vidieť spolu s celým kódom čiže nie takto: else if ( (meno[0]=='k') && (meno[1]=='.') && (meno[2]=='t') && (meno[3]=='x') && (meno[4]=='t') || (meno[0]=='K') && (meno[1]=='.') && (meno[2]=='t') && (meno[3]=='x') && (meno[4]=='t') ) ale takto: else if ( (meno[0]=='k') && (meno[1]=='.') && (meno[2]=='t') && (meno[3]=='x') && (meno[4]=='t') || (meno[0]=='K') && (meno[1]=='.') && (meno[2]=='t') && (meno[3]=='x') && (meno[4]=='t') ) 8 - OK, pekne napísane, ale jedna časť je napísaná opačne ako je zaužívané: while ( !feof(fr) ){ c=getc(fr); printf("%c",c); } putchar('\n'); putchar('\n'); putchar('\n'); } malo by to byť while ( !feof(fr) ){ c=getc(fr); putchar(c); }
printf('\n\n\n'); } 9 - OK, pripomienka, v chate si písal, že si mal problém, ale v súbore fce.c si predsa len nenapísal úplné funkčné prototypy funkcií, myslím obidva, nechápem prečo :shock: 10 - OK 11 - OK 12 - OK, úplný funkčný prototyp funkcie tam nemá čo robiť 13 - do prílohy som dal projekt1 pre dev-cpp, pozri si ho, tak nejak by to malo vyzerať projekt1.zip 14 - OK 15 - OK 16 - OK 17 - OKlibcosenior
PS Musím ťa pochváliť, že si si vzal za svoje rozdeľovať kód do blokov. Som presvedčený, že takýto kód sa ti vidí prehľadnejší a aj tebe sa páči. ;) |
|
|
Skočiť do kategórie Skočiť do témy |
cukamart |
Napísal: 08 Feb 2013, 17:28
|
|
|
Tak nakoniec po precitani to az take tazke nebolo este 2 ulohy a finito :) edit: pridane 5 a 6... dopredu sa ospravedlnujem za ten horor v 5ke, za inych okolnosti by som pouzil qsort, tu 3 si este musim nechat prejst hlavou... http://www.ulozisko.sk/obrazky/477730/vcielka1.jpg 1 - OK, pekne a jednoducho 2 - OK, pekne a jednoducho 3 - nesplnil si podmienku úlohy: "Ďalej definuj pole znakov, ktoré inicializuj počiatočnými (alebo prístupovými) znakmi jednotlivých pozdravov." nemáš pole znakov ! "Vytvor program, ktorý bude čítať znaky z klávesnice, rozpozná ich a vytlačí príslušný pozdrav pomocou pointeru na funkciu." mal by si vytvoriť program, ktorý bude plniť uvedené úlohy a používať POZDRAVY.C a HLAVNY.C ! 4 - OK, ale s tým pokecom na začiatku programu nemáš pravdu, pozri si ako to je spravené v pomocníkovi 5 - OK, ale zase tam máš "goto", vôbec tam nemusí byť, veľmi sa na "goto" spoliehaš, skús naň zabudnúť, navyše keď porovnám rýchlosť tvojho programu s pomocníkovým, tvoj je o poznanie pomalší 6 - OK libcosenior |
|
|
Globálne oznámenie Skočiť do témy |
Hosť |
|
|
|
|
Skočiť do kategórie Skočiť do témy |
cukamart |
Napísal: 12 Feb 2013, 20:00
|
|
|
Prvych 5 uloh :)
1 - OK, pekne a jednoducho 2 - OK, pekne a jednoducho, správne si použil na kopírovanie funkciu strncpy(), použil si uvoľnenie pamäti od dynamicky alokovanej pamäti, nebolo to nevyhnutné ale ani chybné, význam to má, keď program pokračuje ďalej. 3 - OK 4 - OK 5 - OK, fajn ;) 6 - OK, ale lepšie je použiť na výpis adresy %#X alebo %#x, vyskúšaj si to ;) 7 - OK, veľmi pekne, logicky a jednoducho si to napísal 8 - OK, to isté ako predchádzajúca úloha 9 - OK, ale zbytočne zložito Dobre, dám do zadania úlohy v lekcii nápovedu, aby to bolo ľahšie. 10 - OK, otázky riešenia vydiskutované v chate :D 11 - OK, pekne a jednoducho 12 - OK 13 - OK, zaujímavo (mňa by to nenapadlo, lebo som ešte o nej nevedel) použitá funkcia memset() z knižnice string.h, je zhruba popísaná v Heroutovi 2. diel, škoda, že si do programu nedal popis, chvíľu mi trvalo, kým som došiel na to, ako to funguje :roll: 14 - OK
libcosenior |
|
|
Skočiť do kategórie Skočiť do témy |
cukamart |
Napísal: 23 Máj 2013, 08:44
|
|
|
Tu pridavam svoju verziu programu, pisane v C++ vyhodou oproti klasickemu C su stringy ( nikdy nepojdem mimo pola nech je meno hocijako dlho, v klasickom C by trebalo zakazdym pozerat dlzku popripade reallocovat ) + objektovy navrh cez classy
- program po spusteni zisti presny cas a nacita databazu klientov - v hlavnom menu sa daju pridavat novy uzivatelia ( neprida noveho uzivatela ak date rovnake meno ako sa uz v databaze nachadza ), dalej mozte zadavat platby, vypisat vsetkych uzivatelov (pre spristupnenie hesla uzivatela treba zadat administratorske heslo "root"), samozrejmostou je aj vyhladavanie uzivatelov a nakoniec zoznam neplaticov - vypise uzivatelov ktory nikdy nezaplatili + vypise uzivatelov ktory zaplatili ale k dnesnemu datumu uz im vyprsala platnost
- v dalsej verzii by som chcel pridat moznost editacie udajov klienta ( meno pojde zmenit len ak ma vyrovnane vsetky ucty - nesmie byt na listine neplaticov ) + vymazavanie klientov
tot vse, pozrite, pytajte sa, kritizujte... =) |
|
|
|