Priklady C - pre zaciatocnikov

C,C++,C#

Moderátori: psichac, Moderátori

Používateľov profilový obrázok
Loloone
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1369
Dátum registrácie: 29 Aug 2010, 00:00
Bydlisko: the Sered DC
Vek: 51

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa Loloone » 28 Apr 2016, 21:25

dneska mi to vobec nepali, mal som tazky den a uz som si dal 2 piva (Postřižinské ležáky)

to zadanie som pochopil tak, ze budem tukat do klavesnice nahodne znaky do vtedy, az zmacknem x a vtedy program skonci a nieco vypise

ale neviem jak to urobit ze ked stlacim napr.: x (bez enter) aby to nieco vypisalo
0
"sukani je pro decka ...chlapi si vypijou"

DPS pre stavbu programatora - UsbPicProg alebo AVR-USBasp

Používateľov profilový obrázok
lh
Pokročilý člen
Pokročilý člen
Príspevky: 715
Dátum registrácie: 23 Mar 2013, 14:02
Bydlisko: z južnej strany Poľany
Vek: 46

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa lh » 28 Apr 2016, 21:57

Urob to tak, že ten enter budeš stláčať... bez toho by to bolo myslím komplikované.
0

Používateľov profilový obrázok
scd
Stály člen
Stály člen
Príspevky: 150
Dátum registrácie: 17 Apr 2009, 00:00
Bydlisko: Dubnica nad Váhom
Vek: 35

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa scd » 29 Apr 2016, 08:55

Ak chces nacitat znak bez potvrdenia enterom pouzi funkciu getch() alebo getche(). Popis rozdielov medzi nimi:
http://www.c-lang.thiyagaraaj.com/archi ... tchar-in-c
To nacitavanie znaku zaobal do cyklu 'do while' v ktorom budes spocitavat znak 'a' a v podmienke testovat ci uzivatel nenapisal 'x'. po dokonceni cyklu vypises pocet znakov 'a'.
0
Keyboard not present. Press ENTER to continue...

Používateľov profilový obrázok
Loloone
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1369
Dátum registrácie: 29 Aug 2010, 00:00
Bydlisko: the Sered DC
Vek: 51

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa Loloone » 29 Apr 2016, 09:57

ani getch() ani getche() mi nefunguje :-)
hadze mi to chybu na 7. riadku - undefined reference to 'getch'

Kód: Vybrať všetko

#include <stdio.h>

main()
{

    char ch;
    ch = getche();
    printf("Input Char Is :%c",ch);

}
:-(
0
"sukani je pro decka ...chlapi si vypijou"

DPS pre stavbu programatora - UsbPicProg alebo AVR-USBasp

Používateľov profilový obrázok
scd
Stály člen
Stály člen
Príspevky: 150
Dátum registrácie: 17 Apr 2009, 00:00
Bydlisko: Dubnica nad Váhom
Vek: 35

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa scd » 29 Apr 2016, 10:12

asi pozivas linux a getch nieje standard, tak asi nieje obsiahnuta v tvojich knizniciach.
Funkcie si asi este neprebral al ak hej, tak si ju skus naimplementovat sam, toto by ti mohlo fungovat:

Kód: Vybrať všetko

#include <stdio.h>
#include <unistd.h>
#include <termios.h>
int getch ( void ) {
  int ch;
  struct termios origterm, tmpterm;
 
  tcgetattr ( STDIN_FILENO, &origterm );
  tmpterm = origterm;
  tmpterm.c_lflag &= ~( ICANON | ECHO );
  tcsetattr ( STDIN_FILENO, TCSANOW, &tmpterm );
  ch = getchar();
  tcsetattr ( STDIN_FILENO, TCSANOW, &origterm );
 
  return ch;
  }
ak nie tak sa na to vykasli, pouzi standardny getchar() a potvrdzuj to entrom, aj tak tu funkciu asi velmi nevyuzijes v buducnosti.
0
Keyboard not present. Press ENTER to continue...

Používateľov profilový obrázok
Loloone
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1369
Dátum registrácie: 29 Aug 2010, 00:00
Bydlisko: the Sered DC
Vek: 51

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa Loloone » 29 Apr 2016, 10:31

no jo no, mam ubuntu, vyskusam to na win...
zatial vdaka

edit: skusal som to vo W7 > code::blocks vsetko chodi jak ma :thumbup:
hadam sa to da rozchodit aj v Linuxe pod code::blocks
getch() a getche() su udajne nejake prastare, DOSovske volania tak preto to nefunguje
po doinstalovani nejakych (?) kniznic to hadam rozchodim
0
"sukani je pro decka ...chlapi si vypijou"

DPS pre stavbu programatora - UsbPicProg alebo AVR-USBasp

Používateľov profilový obrázok
Loloone
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1369
Dátum registrácie: 29 Aug 2010, 00:00
Bydlisko: the Sered DC
Vek: 51

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa Loloone » 29 Apr 2016, 18:26

tak som si zas nasiel trochu casu
bola to dost fuska :-) ale konecne mi to funguje

Kód: Vybrať všetko

#include <stdio.h>
main()

{
char c;
int i=0;

printf("napis nieco a nakoniec stlac znak ''x'' \n");
  do
  {
  c = getche();
  if (c == 'a')
  i++;
  }
  while (c != 'x');
  {
  printf("\n\n");
  printf("\nacko bolo stlacene %d krat :-)\n",i);
  printf("\n\n");
  }
return 0;
}
dlho som na to nemohol prist, stale to ratalo nejake tycoviny az ked som "vynuloval" premennu int i=0;

isiel som nato podla rady od csd, vychadzal som z tohoto prikladu

Kód: Vybrať všetko

    char pis;
    printf("Napis A!\n");
    do
    {
        pis = getchar();
        if (pis != 'A')
            printf("Hovoril som A!!! Takze znovu: Napis A!\n");
    } while (pis != 'A');
    printf("Hura, naozaj je to A!\n");
co ale nechapem je ten negativny operator v podmienke while (c != 'x');
daval som tam stale ==, ale potom som to odkukal z toho prikladu a zacalo to fungovat
PS: ta logika mi dava zabrat :-) idem si to este postudovat....
0
"sukani je pro decka ...chlapi si vypijou"

DPS pre stavbu programatora - UsbPicProg alebo AVR-USBasp

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa peterple » 29 Apr 2016, 19:18

Cyklus sa opakuje dovtedy dokiaľ je podmienka pravdivá.

Kód: Vybrať všetko

c =='x'
je nepravdivá pre všetky znaky okrem x takže cyklus skončí na akékoľvek písmeno okrem x. Keby si stláčal x tak by sa pri tejto podmienke neukončil. Preto je použitá opačná podmienka nerovná sa.

Ďalej si objavil že lokálne premenné nie sú inicializované na žiadnu hodnotu a ich obsah je náhodný. Dokonca aj keď by si nejakú funkciu volal viackrát tak tá hodnota nemusí byť rovnaká.

Fungovanie terminálu je to dlhšia pesnička. Skús si prečítať rozdiel medzi kanonickým a nekanonickým módom. Ale ako písali predo mnou zatiaľ to nerieš.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
Loloone
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1369
Dátum registrácie: 29 Aug 2010, 00:00
Bydlisko: the Sered DC
Vek: 51

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa Loloone » 29 Apr 2016, 21:48

neviem ci sme sa rozumeli :-)
myslel som riadok c.15 - while (c != 'x');
prelozim to do slovenciny ze ci to spravne chapem:
---------------------------------------------------------------
vyzva "napis niecoo...

(do) vykonaj co je v kuceravych zatvorkach,
{
do premennej c nacitaj znak
(if) ak je to 'a'
inkrementuj premennu i
}
toto rob az dovtedy, (while) kym je pravda co je vzatvorke, cize premenna c nerovna sa 'x'
v opacnom pripade
{vytlac vysledok i }


az teraz ked som to prepisoval com si uvedomil ze je to spravne :-)
0
"sukani je pro decka ...chlapi si vypijou"

DPS pre stavbu programatora - UsbPicProg alebo AVR-USBasp

Používateľov profilový obrázok
lh
Pokročilý člen
Pokročilý člen
Príspevky: 715
Dátum registrácie: 23 Mar 2013, 14:02
Bydlisko: z južnej strany Poľany
Vek: 46

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa lh » 29 Apr 2016, 21:59

Je čas začať myslieť v angličtine :biggrin:
0

Používateľov profilový obrázok
Loloone
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1369
Dátum registrácie: 29 Aug 2010, 00:00
Bydlisko: the Sered DC
Vek: 51

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa Loloone » 29 Apr 2016, 22:15

jo :-)

ked clovek ziska nejake navyky, uz to ide lahsie a tak nejak automaticky, pre ludi co uz programuju napr. 5 rokov to moze byt smiesne co tu riesim :-)

dalsia lekcia:
Napíšte program, ktorý načíta znak z klávesnice.
Ak tento znak nie je písmeno, tak ho vypíše,
ak je to malé písmeno, vypíše k nemu zodpovedajúce veľké písmeno
a ak je to veľké písmeno, vypíše k nemu zodpovedajúce malé písmeno.
0
"sukani je pro decka ...chlapi si vypijou"

DPS pre stavbu programatora - UsbPicProg alebo AVR-USBasp

Používateľov profilový obrázok
lh
Pokročilý člen
Pokročilý člen
Príspevky: 715
Dátum registrácie: 23 Mar 2013, 14:02
Bydlisko: z južnej strany Poľany
Vek: 46

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa lh » 29 Apr 2016, 22:51

Skús si najprv predchádzajúci program prerobiť tak, že miesto 'x' dáš 120 a miesto 'a' dáš 97. Skús či funguje. Potom si pozri túto tabuľku, a nájdi tam prečo to funguje. A potom sa pozri na nové zadanie.

getchar() pracuje s premennymi typu int a nie char, takze pri deklarácii premenných napíš int c; Teraz Ti to nevadí, ale pri spracovaní súborov by mohlo... tak aby si si na to zvykol.
0

Používateľov profilový obrázok
Loloone
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1369
Dátum registrácie: 29 Aug 2010, 00:00
Bydlisko: the Sered DC
Vek: 51

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa Loloone » 29 Apr 2016, 23:23

maka to spravne,
je mi to jasne ze kazdy znak ma nejake cislo (v desiatkovej a sesnastkovej sustave) a=97, x=120 ....
napisal som si program co vypisuje decim. cislo ku kazdemu znaku a ked zmackes enter (13) tak skonci :-)

docital som sa ze float uklada desatinne cislo, int uklada cele cisla a char jednotlive znaky
tak nechapem ze preco int ked idem pracovat so znakmi... :pain:

-- Spojený príspevok 29 Apr 2016, 22:33 --

podmienka pre dalsiu ulohu, pre male pismena by mohla vyzerat takto nejak:

Kód: Vybrať všetko

(ch >= 'A' && ch <= 'Z')

alebo

Kód: Vybrať všetko

(ch >= 65 && ch <= 90)
ch je premenna
0
"sukani je pro decka ...chlapi si vypijou"

DPS pre stavbu programatora - UsbPicProg alebo AVR-USBasp

Používateľov profilový obrázok
lh
Pokročilý člen
Pokročilý člen
Príspevky: 715
Dátum registrácie: 23 Mar 2013, 14:02
Bydlisko: z južnej strany Poľany
Vek: 46

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa lh » 29 Apr 2016, 23:37

Pretože funkcia getchar pracuje s premennými typu int, proste tak je definovaná. Char je tiež len celočíselný typ, ale nadobúda hodnoty od 0..255. Znak konca súboru (teda nie je to znak, ale neviem ako to nazvať... príznak), má int hodnotu -1. To je už mimo char

-- Spojený príspevok 29 Apr 2016, 22:45 --
Loloone napísal: podmienka pre dalsiu ulohu, pre male pismena by mohla vyzerat takto nejak:

Kód: Vybrať všetko

(ch >= 'A' && ch <= 'Z')

alebo

Kód: Vybrať všetko

(ch >= 65 && ch <= 90)
ch je premenna
výraz bude pravda, keď budú písmená veľké. Tou tabuľkou som Ti chcel naznačiť, že aj písmená môžeš sčitovať a odčitovať. c -= ' ' Ti z veľkého písmena spraví malé. (v úvodzovkách je medzera ASCII 32 :D )

edit: char += ' ';

a ešte doplním... kvôli prehľadnosti je možno fajn napísať c -= ('a'-'A') pre premenu z malých na veľké a c -= ('A'-'a') veľkých na malé.
0

Používateľov profilový obrázok
Loloone
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1369
Dátum registrácie: 29 Aug 2010, 00:00
Bydlisko: the Sered DC
Vek: 51

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa Loloone » 30 Apr 2016, 00:11

to ma presne napadlo ze budem musiet odcitavat a pricitavat

tu je ten kod co vypisuje ASCII
edit: opravil som tu deklaraciu int a rozsiril, teraz vypisuje aj dec aj hex cislo

Kód: Vybrať všetko

#include <stdio.h>
main()

{
int c;
do
    {
    c = getche();
    {
    printf(" %d dec. %X hex.\n",c,c);
    }

    }

while (c != 13);
    printf("\nadios :-)\n");

    return 0;
}
a presne jak si vravel, niektore znaky hadzu zaporne cisla
ked zmenim deklaraciu char na int je to v poriadku

ak to nieje tajne, ako dlho programujes?
0
"sukani je pro decka ...chlapi si vypijou"

DPS pre stavbu programatora - UsbPicProg alebo AVR-USBasp

Používateľov profilový obrázok
lh
Pokročilý člen
Pokročilý člen
Príspevky: 715
Dátum registrácie: 23 Mar 2013, 14:02
Bydlisko: z južnej strany Poľany
Vek: 46

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa lh » 30 Apr 2016, 00:35

Tajomstvo to nieje :D Ale programátor nie som. Len taký kutil. Prvý program sme s bratrancom naťukali na Didaktik kompakt v Basic-u pred vyše 20 rokmi :rolleyes:
0

Používateľov profilový obrázok
Loloone
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1369
Dátum registrácie: 29 Aug 2010, 00:00
Bydlisko: the Sered DC
Vek: 51

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa Loloone » 30 Apr 2016, 11:09

tak fajn v sestdesiatke mozno budem vediet slusne programovat :-) ja sa chcem naucit Cecko hlavne kvoli mikroprocesorom...

teraz na to min. dva dni nesiahnem a v pondelok mozem zacat od znova :-)

inak ak by niekto mal nejaky kurz "C pre AVR" aj s prikladmi, vhodne pre zaciatocnika, ocenim :thumbup: (nieco pre atmega alebo attiny... mam aj nejake PICka), mam e-knihu od Zawina tu na fore ju chvalia neviem ale ci je uplne pre zaciatocnika ako ja :pain:
0
"sukani je pro decka ...chlapi si vypijou"

DPS pre stavbu programatora - UsbPicProg alebo AVR-USBasp

Sender
Pokročilý člen
Pokročilý člen
Príspevky: 535
Dátum registrácie: 26 Máj 2008, 00:00

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa Sender » 30 Apr 2016, 11:49

Jde to i jinak -naučit se Pascal a přejít na C (C++).Ono je to o syntaxi a v C je to trochu i jinak.Z Pascalu na C se jednodušeji přechází.
Pokud si někdo vystačí s PIC (případně koupí licenci pro AVR ap.),může u Pascalu zůstat.
0

Používateľov profilový obrázok
scd
Stály člen
Stály člen
Príspevky: 150
Dátum registrácie: 17 Apr 2009, 00:00
Bydlisko: Dubnica nad Váhom
Vek: 35

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa scd » 30 Apr 2016, 14:57

Ak to učenie myslíš vážne tak by som ti odporučil takýto postup:
1-Nájdi si na nete nejaký dobrý tutoriál (C v konzole) cez ktorý sa budeš snažiť prelúskať + oplatí sa nejaká knižka, ktorá ti môže byť dobrým poradcom (Pavel Herout)
2-pokús sa spraviť nejaký vlastný jednoduchý projekt, na ktorom sa budeš vlastne učiť a keď sa ti ho podarí dokončiť, tak ťa to povzbudí :)
3-opakuj krok 2, opakuj krok 2... musíš si proste vysedieť mozole na zadku :)
4-odporúčam knižku resp. seriál C++ pod lupou (cca do prvej polovice je to rovnaké pre C aj C++) Je to asi zo začiatku ťažšie čítanie pretože sa tam ide úplne do podrobnosti. Ale stačí si to viac krát celé prečítať a začne ti to všetko do seba zapadať. Nájdeš tam odpoveď asi na akúkoľvek maličkosť a nezrovnalosť ktorú potrebuješ vysvetliť.
5-začni za pomoci knižky od Zawina programovať AVR a už ti to zaručene nebude robiť problémy pochopiť.

Ak to vážne nemyslíš a chceš len niečo rýchlo naprogramovať, tak sa pusti rovno do Arduina a čosi už pozliepaš, aj keď tomu nebudeš dokonale rozumieť. Ale odporúčam prvý zdĺhavý postup, lebo ak sa raz naučíš C, tak napríklad aj iný jazyk sa zmákneš naučiť behom chvíľky.
0
Keyboard not present. Press ENTER to continue...

Používateľov profilový obrázok
lh
Pokročilý člen
Pokročilý člen
Príspevky: 715
Dátum registrácie: 23 Mar 2013, 14:02
Bydlisko: z južnej strany Poľany
Vek: 46

Re: Priklady C - pre zaciatocnikov

Príspevok od používateľa lh » 30 Apr 2016, 16:41

Úplne súhlasím s scd. Vlastný projekt a mozole na zadku a mozgu by som podčiarkol :-D

k Pascalu: Do toho by som sa nepúšťal, má inú syntax, a zbytočne by ťa to mýlilo. Dobre si pamätám, keď som začal s PHP(bližšie k C), a predtým som robil s Delphi (pascal) tak ma to stálo veľa zbytočných chýb a času.
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok