Programovani v jazyce C

Programovacie jazyky, rady, poradňa...
BE11
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 224
Registrovaný: 04 dec 2011, 8:34

Re: Programovani v jazyce C

Príspevok od používateľa BE11 »

Tie stránky už mám za sebou, ale aj tak som sa na http://skolka-jazyka-c.freespace.sk/ naučil ešte viac.
Netvrdím, že škôlka jazyka je bezchybná stránka, to byť ani nemôže, ale verím, že časom sa to zlepší.
Aj Herout, resp. ak má nato ľudí aktualizujú vidania aby sa 1.Zbavily chýb.
2.Aby sa prispôsobily súčastnosti.

Inak čo majú všetci s tou knihov od Herouta o C .
Ked som s programovaním začínal a chcel som sa z nej učiť, nedalo sa to.
Casom, ked som mal už za sebou základy Javy, to čítam ako rozprávku, ale žeby sa z toho učily úplny začiatočnícy to si neviem predstaviť.
:nono: :nono: :nono:
LukasqoO
King
King
Príspevky: 1647
Registrovaný: 08 okt 2011, 19:54

Re: Programovani v jazyce C

Príspevok od používateľa LukasqoO »

Mám obi dva diely od herouta a nie je to od tadiaľ ľahké sa učiť ak nemáte základy...
BE11
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 224
Registrovaný: 04 dec 2011, 8:34

Re: Programovani v jazyce C

Príspevok od používateľa BE11 »

LukasqoO napísal:Mám obi dva diely od herouta a nie je to od tadiaľ ľahké sa učiť ak nemáte základy...
Prestne o tom som písal. Aj ja mám oba. Herout to písal viac manuálovo ako Tutoriálovo.
manager666
Star
Star
Používateľov profilový obrázok
Príspevky: 642
Registrovaný: 12 aug 2007, 13:29

Re: Programovani v jazyce C

Príspevok od používateľa manager666 »

BE11 napísal: Manager666, ked máš také vzdelanie, prečo nepomôžeš iným? Nie musia to robiť iný čo, ked chcú pomôcť iným, dostávajú len kritiku?!
Podľa mňa je tá stránka kvalitná, aspoň pre zažiatočníkov.
Ked niekto začína nezaujímajú ho vecy do detailu. Detaily ho znechutia a už sa k tomu večšinou nechce ani vrátiť. Deataily môže skúmať, ked nato bude mať.

Kvalitné knihy? Jedine v angličtine, a tý čo sa neučily anglinu čo potom?
Jediný kvalitný zdroj je internet a vlastná túžba dozvedať sa nové vecy, skúšať to až kým to nejde.

Smernik - ukazatel!
Sú to len slová, ktoré niekto vymyslel.
Jednu vec môžme pomenovať viacerými slovami, ale aj tak to bude len pomenovanie, ktoré sa časom aj tak zmení, nič viac!
Tí, čo vedia svoje vzdelanie využiť, zvyčajne nemajú čas ho predávať ďalej. :lol:
Netvrdil by som, že sú kvalitné knihy iba v angličtine. No bez angličtiny to ďaleko nedotiahneš. Odporúčam sa naučiť. :wink: A aj pravopis. :wink:
Numline1
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 858
Registrovaný: 04 dec 2006, 18:04

Re: Programovani v jazyce C

Príspevok od používateľa Numline1 »

BE11 napísal:
Prestne o tom som písal. Aj ja mám oba. Herout to písal viac manuálovo ako Tutoriálovo.
Herout a C zhrnute v prvej knihe je skolkarska uroven, ak je toto pre teba/vas narocne, tak na to radsej kaslite a nepoucujte ostatnych, ako je terminologia zbytocna.
libcosenior
Novice
Novice
Príspevky: 8
Registrovaný: 04 aug 2012, 8:47

Re: Programovani v jazyce C

Príspevok od používateľa libcosenior »

Určite si dobrý programátor v céčku.

Od rána sa borím s touto úlohou a zatiaľ to nemám vyriešené.
Ty to určite zvládneš ľavou zadnou? Budeš ochotný to sem aj zavesiť?

"Vytvor program, ktorý pomocou funkcie fgets() prečíta súbor a uloží ho do pamäti po riadkoch pomocou jednosmerne zoradeného zoznamu štruktúr. Položkami štruktúry budú okrem iného reťazec max. dĺžky 80 a aktuálna dĺžka riadku. Vytlač najdlhší riadok súboru."

BTW, našiel som na nete riešenie , ale zdá sa mi veľmi zložité. Musí to ísť aj jednoduchšie.
metthal
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2475
Registrovaný: 26 jan 2006, 18:32
Bydlisko: Nitra / Brno

Re: Programovani v jazyce C

Príspevok od používateľa metthal »

Vseobecne tu na fore plati pravidlo (ktore je mozno niekde aj pisane), ze cele ulohy tu nikto nebude riesit. Ukaz co vies, my ti poradime s tym co nevies. Ak nevies nic tak ta tu kazdy odkaze len precitat si Herouta.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Programovani v jazyce C

Príspevok od používateľa BX »

metthal napísal:Vseobecne tu na fore plati pravidlo (ktore je mozno niekde aj pisane)...
http://www.hojko.com/citajte-pred-zaloz ... 23064.html

libcosenior: Zdá sa to byť dlhé, ale to preto, že je to dobre okomentované. Vidím tam síce pár zastaralých konštrukcií, ktoré sa už nepoužívajú, ale inak je to správne a nejak výrazne sa to skrátiť nedá.

Takže si buď preštuduj herouta v okolí tohoto zdrojáku, alebo študuj len samotný zdroják. V každom prípade ak budeš potrebovať niečo dovysvetliť, určite napíš sem :)
libcosenior
Novice
Novice
Príspevky: 8
Registrovaný: 04 aug 2012, 8:47

Re: Programovani v jazyce C

Príspevok od používateľa libcosenior »

Takže dostal som sa sem:
(niečo je zakomentované)

Mám problém v tom, že neviem urobiť cyklus na vytvorenie ďalších prvkov.
Proste, 1. prvok vytvorím, ďalší by som tiež vedel, atď, ale potrebujem to ohraničiť, a to neviem ako.

Kód: Vybrať všetko

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_DLZKA 80 /* maximalna dlzka riadka */

/* pomocne premenne k diakritike */
char ss = 231, uu = 163, z = 167, l = 150, t = 156, ii = 161, aa = 160, ae = 132, yy = 236;

typedef struct riadok {
    char riadok[MAX_DLZKA];
    int aktualna_dlzka;
    struct riadok *p_dalsi;
} RIADOK;

/* funkcia - dynamická alokácia prvku, ak je pamat alokovana, vrati sa struktura */
RIADOK *alokuj_a_testuj(void)
{
  RIADOK *p_pom;
  p_pom = (RIADOK *) malloc(sizeof(RIADOK));
  if (p_pom == NULL) {
        printf("Malo pamati\n");
        exit(1);
  }
  return p_pom;
}
/*
void napln(RIADOK *p_riadok, char *obsah_riadku, int dlzka)
{
    strcpy(p_riadok->riadok, obsah_riadku);
    p_riadok->aktualna_dlzka = dlzka;
}
*/
int main(void)
{
    int i, max_dlzka = 0;
    RIADOK *p_prvy = NULL,
           *p_aktualny,
           *p_pomocny;
    FILE   *fr;

    /* otvorenie suboru */
    if ((fr = fopen("SUBOR.TXT", "r")) == NULL) {
        printf("\nS%cbor sa ned%c otvori%c! \n", uu, aa, t);
        return;
    }

    /* vytvorenie prveho prvku struktury */
    p_prvy = alokuj_a_testuj();
    if (fgets(p_prvy->riadok, MAX_DLZKA - 1, fr)) {
        p_prvy->aktualna_dlzka = strlen(p_prvy->riadok) - 1;
        p_aktualny = p_prvy;

        //puts(p_aktualny->riadok);
    }
        p_prvy->p_dalsi = NULL;
        p_aktualny = p_prvy;

        puts(p_aktualny->riadok); /* napise cely retazec, aj '\n' */
        printf("prvy = %d\n", p_aktualny->aktualna_dlzka);
    /* vytvorenie vsetkych ostatnych prvkov */
    do {
        p_aktualny->p_dalsi = alokuj_a_testuj();
        p_aktualny = p_aktualny->p_dalsi;
        if (fgets(p_pomocny->riadok, MAX_DLZKA - 1, fr) != NULL) {
            p_pomocny->aktualna_dlzka = strlen(p_pomocny->riadok);
            //printf("%d\n", p_pomocny->aktualna_dlzka);
            if (max_dlzka < p_pomocny->aktualna_dlzka) {
                max_dlzka = p_pomocny->aktualna_dlzka;
                //printf("%d\n", max_dlzka);
            }
            p_aktualny = p_pomocny;
            puts(p_aktualny->riadok);
            p_aktualny->p_dalsi = NULL;
        }
    } while (fgets(p_pomocny->riadok, MAX_DLZKA - 1, fr) == NULL);

     /* zavretie suboru */
    if (fclose(fr) == EOF)
        printf("\nS%cbor sa ned%c zavrie%c! \n", uu, aa, t);
   /*
   for (p_aktualny = p_prvy; p_aktualny->p_dalsi != NULL; p_aktualny = p_aktualny->p_dalsi) {
        printf("\n%d\n", pocet);
        if (max_dlzka == p_aktualny->aktualna_dlzka)
            puts(p_aktualny->riadok);
        puts(p_aktualny->riadok);
        putchar('\n');
        pocet++;
    }
*/
    return 0;
}
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Programovani v jazyce C

Príspevok od používateľa BX »

No dobre, vysvetlím ti, ako to tu funguje. My sme ľudia zanepráznení, často unavení a naozaj sa nám nechce veštiť z dlhánskych kódov, čo je vo veci.
Preto je v tvojom záujme najlepšie prísť sem s konkrétnym problémom, ktorý čo najpresnejšie popíšeš.

Capnúť sem 100 riadkov kódu a nič k tomu nenapísať je ukážkový prípad, ako by si to nemal robiť.
Keď, tak už aspoň slovne popíš postup, čo sa snažíš kde urobiť.
libcosenior
Novice
Novice
Príspevky: 8
Registrovaný: 04 aug 2012, 8:47

Re: Programovani v jazyce C

Príspevok od používateľa libcosenior »

Ďakujem, si fajn, že si sa ozval. A dokonca už 2X. Díky.
Držte sa tu. :smt006
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Programovani v jazyce C

Príspevok od používateľa BX »

libcosenior napísal: Mám problém v tom, že neviem urobiť cyklus na vytvorenie ďalších prvkov.
Proste, 1. prvok vytvorím, ďalší by som tiež vedel, atď, ale potrebujem to ohraničiť, a to neviem ako.
Je to spoják, takže každý novo vytvorený prvok by si mal nastaviť na defaultné hodnoty. Hlavne teda ukazateľ na ďalší prvok určite musíš nastaviť na NULL.
Takže do funkcie alokuj_a_testuj pridaj defaultné nastavenie.

Potom, keď ti dojdu riadky, posledný prvok bude ukazovať na NULL a tak neskôr aj poznáš, že si na konci.

Inak pracuješ so spojákom klasicky, vždy máš ukazateľ na prvý prvok a na aktuálny(pri pridávaní posledný) prvok. Prvý nesmieš stratiť a aktuálny musíš posúvať (kým môžeš - teda kým ďalší nie je NULL)
libcosenior
Novice
Novice
Príspevky: 8
Registrovaný: 04 aug 2012, 8:47

Re: Programovani v jazyce C

Príspevok od používateľa libcosenior »

BX napísal: libcosenior: Zdá sa to byť dlhé, ale to preto, že je to dobre okomentované. Vidím tam síce pár zastaralých konštrukcií, ktoré sa už nepoužívajú, ale inak je to správne a nejak výrazne sa to skrátiť nedá.

Takže si buď preštuduj herouta v okolí tohoto zdrojáku, alebo študuj len samotný zdroják. V každom prípade ak budeš potrebovať niečo dovysvetliť, určite napíš sem :)
Mohol by si ma prosím poučiť, ktoré konštrukcie sú tam zastaralé?
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Programovani v jazyce C

Príspevok od používateľa BX »

BX napísal:Vidím tam síce pár zastaralých konštrukcií, ktoré sa už nepoužívajú
No, keď nad tým tak rozmýšľam, nemal som to napísať, lebo išlo čisto o moje subjektívne preferencie. Niekto iný by prišiel a vedel by mi za to vynadať. Ale teda vysvetlím.
Ošetrenie "málo pamäte" je trochu zbytočné, keď programuješ na dnešných počítačoch. Ale samozrejme sa to používa, keď sa programuje nad hw.
Tak isto kontrola zavretia súboru mi príde zbytočná.
Riadky cez spojový zoznam takisto zbytočnosť, keď tam môže byť pole (znovu ide o to, že dnes už je pamäte dosť a procesory sú rýchle, narozdiel od roku 1992)
A aj ten enum sa mi zdá divný a nikde som to dnes nevidel (Myslím tým použitie ako údajový typ. Stačí používať normálny int)
MeanSeriously
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 430
Registrovaný: 14 apr 2012, 15:07

Re: Programovani v jazyce C

Príspevok od používateľa MeanSeriously »

BX napísal:Tak isto kontrola zavretia súboru mi príde zbytočná.
A čo keď spadne program? Skade prídeš na to čo bolo v bufferi zapísané ako posledné?
libcosenior
Novice
Novice
Príspevky: 8
Registrovaný: 04 aug 2012, 8:47

Re: Programovani v jazyce C

Príspevok od používateľa libcosenior »

Ak vám to nebude vadiť. Dám sem svoj výtvor a pustite sa do mňa. :oops:
Ak to vadiť bude, zmažte to.

Kód: Vybrať všetko

/************************************************************************
 * Vytvor program, ktorý pomocou funkcie fgets() prečíta súbor          *
 * a uloží ho do pamäti po riadkoch pomocou jednosmerne zoradeného      *
 * zoznamu štruktúr. Položkami štruktúry budú okrem iného reťazec       *
 * max. dĺžky 80 a aktuálna dĺžka riadku. Vytlač najdlhší riadok súboru.*
 ************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_DLZKA 80 /* maximalna dlzka riadka */

/* struktura s dynamickým prvkom *p_dalsi */
typedef struct riadky {
    char riadok[MAX_DLZKA];
    int aktualna_dlzka;
    struct riadky *p_dalsi;
} RIADOK;

/* funkcia - dynamická alokácia prvku, ak je pamat alokovana, vrati sa struktura */
RIADOK *alokuj_a_testuj(void)
{
  RIADOK *p_pom;
  p_pom = (RIADOK *) malloc(sizeof(RIADOK));
  if (p_pom == NULL) {
        printf("Malo pamati\n");
        exit(1);
  }
  return p_pom;
}

int main(void)
{
    int i, j = 0, max_dlzka = 0;
    RIADOK *p_prvy = NULL,
           *p_aktualny;
    FILE   *fr;

    /* otvorenie suboru */
    if ((fr = fopen("SUBOR.TXT", "r")) == NULL) {
        printf("\nSubor sa neda otvorit! \n");
        return;
    }

    /* vytvorenie prveho prvku struktury */
    p_prvy = alokuj_a_testuj();
    if ((fgets(p_prvy->riadok, MAX_DLZKA - 1, fr)) != NULL) {
        p_prvy->aktualna_dlzka = strlen(p_prvy->riadok);
    }
    p_prvy->p_dalsi = NULL;
    p_aktualny = p_prvy;

    /* vytvorenie vsetkych ostatnych prvkov */
    for (;;) {
        p_aktualny->p_dalsi = alokuj_a_testuj();
        p_aktualny = p_aktualny->p_dalsi;
        if ((fgets(p_aktualny->riadok, MAX_DLZKA - 1, fr)) != NULL) {
            p_aktualny->aktualna_dlzka = strlen(p_aktualny->riadok);
            /* zistenie dlzky najdlhsieho riadku */
            if (max_dlzka < p_aktualny->aktualna_dlzka)
                max_dlzka = p_aktualny->aktualna_dlzka;
            /* posun na dalsiu strukturu */
            p_aktualny->p_dalsi = NULL;
        }
        else
            break;
    }

    /* zavretie suboru */
    fclose(fr); 

    /* v cykle najde najdlhsi riadok a vypise ho */
    printf("Najdlhsie riadky suboru maju %d znakov a su to tieto riadky:\n\n", max_dlzka);
    for (p_aktualny = p_prvy; p_aktualny->p_dalsi != NULL; p_aktualny = p_aktualny->p_dalsi) {
        if (max_dlzka == p_aktualny->aktualna_dlzka)
            puts(p_aktualny->riadok);
    }

    return 0;
}
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Programovani v jazyce C

Príspevok od používateľa BX »

MeanSeriously napísal: A čo keď spadne program? Skade prídeš na to čo bolo v bufferi zapísané ako posledné?
Čo chceš ešte zisťovať, keď program spadne?
Ak by som do súboru zapisoval, tak by to zmysel ešte malo(aj keď scenáre, kedy fclose() umrie, sú veľmi málo pravdepobdné. Samozrejme závisí čo a na čo programujem), ale keď si ho prečítam, je mi typicky dosť jedno, čo s tým súborom bude (o pointer každopádne prídem, aj keď fclose() umrie)
MeanSeriously
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 430
Registrovaný: 14 apr 2012, 15:07

Re: Programovani v jazyce C

Príspevok od používateľa MeanSeriously »

sry, ospravedlňujem sa nečítal som to celé a tak som prehliadol že on zo súboru len číta. Samozrejme som mal na mysli ten scenár, keď program padne pri zapisovaní do súboru.
Napísať odpoveď