Škôlka jazyka C

Fórum o programovaní v jazyku C založené 3. januára 2012

Aktuálny čas je 18 Apr 2024, 22:23

Všetky časy sú v GMT + 1 hodina


Vyhľadávanie našlo 12 výsledkov

Autor Správa

 Skočiť do kategórie   Skočiť do témy

 Predmet príspevku: Re: Úlohy 1_lekcia
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

 Predmet príspevku: Re: Úlohy k 8. lekcii
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

 Predmet príspevku: Re: Úlohy 2_lekcia
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...
Obrázok
Dobre napísané kódy.
libcosenior

 Skočiť do kategórie   Skočiť do témy

 Predmet príspevku: Re: 1. úloha odovzdanie
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 8-)

 Skočiť do kategórie   Skočiť do témy

 Predmet príspevku: Re: Úlohy 3_lekcia
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

 Predmet príspevku: Re: Úlohy 5_lekcia
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

 Predmet príspevku: Re: Úlohy 4_lekcia
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

 Predmet príspevku: Re: Úlohy 6_lekcia
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

Napísal:  

 Skočiť do kategórie   Skočiť do témy

 Predmet príspevku: Re: Úlohy 7_lekcia
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

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... =)
Stránka 1 z 1 [ Vyhľadávanie našlo 12 výsledkov ]


Všetky časy sú v GMT + 1 hodina


Skočiť na:  
cron
Powered by phpBB® Forum Software © phpBB Group

Hosted by FreeSpace SK