Diskuze: Začiatočnicke "programy"
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 50 zpráv z 64.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Asi bych měl zapracovat na slovenštině, ale myslím že nepárnej pozice
bude nejspíš lichá a párnej bude nejspíše sudá.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int m[12]; // celočíselné pole s hodnotou 12+1 (0)
int deleni,i;
// zapisování do pole
for(i = 1; i < 13; i++)
{
deleni = i%2;
if(deleni == 0) // pokud i bude sudé
{
m[i] = 1;
}
else
{
m[i] = 0; // pokud i bude liché
}
}
// vypisuji pole
for(i = 1; i < 13; i++)
{
printf("%d",m[i]);
}
return 0;
}
Můžu mít dotaz? Jakto že indexuješ pole od 1 do 12 místo od 0 do 11?
Tak ještě jednou se všema popiskama aby jsi vše chápal jak je to správně a pořádně si to pročti, popřípadě mrkni na můj článek o C pole,cykly atd : http://www.itnetwork.cz/…ecko-zaklady
#include <stdio.h> // klasicka knihovna pro základní funkce
#include <stdlib.h> // IO
int main(void)
{
int m[12]; // celočíselné pole s hodnotou 12+1 (0)
int deleni,i; // deleni pro i%2
// zapisování do pole
for(i = 1; i < 13; i++) // cyklus projede 12x
{
deleni = i%2; // záskám zbytek po dělení
if(deleni == 0) // když zbytek po dělení vyjde 0 bude číslo sudé
{
m[i] = 1; // zapisuju do pole 1čku (sudé číslo)
}
else
{
m[i] = 0; // pokud bude číslo po dělení 1 číslo bude liché zapisuju 0
}
}
// vykresluju pole
for(i = 1; i < 13; i++)
{
printf("%d",m[i]);
}
return 0;
}
ano mam to do skoly, ale tych prikladov mam strasne vela, a nestiham to neak vsetko, nakolko sa C ucim cca iba dva mesiace co je strasne malo, ale dakujem, tvoje clanky som presiel vsetky, myslim si ze pre zaciatocnika ako som ja su perfektne,
Chtěl si vyplnit 1-12, pole začíná od nuly, takže jsem začal zapisovat
a vykreslovat až od jedničky
(kdyby jsi chtěl vše si samozřejmě podle vzoru už sám upravíš)
EDIT : jinak tohle pole má 13 hodnot včetně té nuly
EDIT2 : od jedničky začínám protože používám I i jako hodnotu na
dělení alias čísla 1-12 abych nemusel použít další proměnnou
Také nechápu to m[12] musí udělat 0-11 ne? Nelezeš z pole?
Stejně to máš stále blbě. 28tomino si to za domácí úkol opraví.
to že tam neni 0 je celkem jedno jenže ty indexuješ 12 a to už je mimo pole poslední prvek má index 11 ne? Měníš prvky 1 - 12 ale pole má prvky 0 - 11, vypíše se 12 hodnot tak jako tak.
chci pole m[12] <-
tohle pole má 13 hodnot né 12
přes žádné pole nelezu
Podle všeho co o céčku píší na netu a co o něm vím já by to mělo být od 0 do 11. Vypiš tohle:
sizeof(m)/sizeof(int);
Mělo by to vypsat že je tam 12 integerů.
Když deklaruješ pole M[12] tak nemá 13 prvků ale 12, pole je pointer a to číslo v závorkách určuje pro kolik prvků danýho typu se má alokovat paměť. Číslo v hranatý závorce určuje o kolik prvků v paměti se posouváš neboli M[0] je to samý jako *M a třeba M[5] je to samý jako *(M + 5), tzn logicky nemůžeš použít M[12] protože M + 12 je 13. prvek a pro ten už paměť neni alokovaná.
Nějak mě matete myslím že to mám to správně, však int pole[12] je to to samé jako
int pole[0];
int pole[1];
int pole[2];
...
int pole[12];
Akorát jsem vynechal nulu kůli dělení.
A céčko vesele hrábne pryč a nikdo ani nic nepozná, dokud se něco někde nepodělá. Řízený jazyk by vyhodil Index out of bounds.
Hmm to jsou mi novinky ale koukám, když jsem teda překročil pole stále
to funguje jak bylo požadováno
Protože céčko tě nechá psát za hranici pole. Zkoušel jsi ten
sizeof(m)/sizeof(int);
?
Ne už jsem to vypnul ale jdu to samé zkusit v C# nevěřim tomu na mě kujete pikle
Jojo už na mě křičí
blbé Céčko pak v tom má člověk akorát bordel :[
Céčko tě nechá dělat co chceš, jak řikam - pole je pointer a přes pointer můžeš sahat do paměti kam chceš. Často se stane že tim přepíšeš data který nemáš a pak program většinou padá, taky se ale nemusí stát nic. Každopádně na tohle si dávat pozor je celkem základní věc asi ve všech jazycích.
Jop já vím, já jsem pole projel už tehdy v Céčku rychle (brnkačka) a
Céčko mi to uznalo takže jsem si samozřejmě myslel že je to správně.
Aspoň má Tomino aspoň nějaký ten úkol teď poupravit pole
Věř tomu, že pole m[12] má indexy prvků v rozsahu 0..11. Když se pokusíš zapsat do "dvanáctého" prvku, tak to zapíše do nějaké jiné proměnné. Někdy to proces přežije, jindy vyhodí záhadnou chybu nebo v nejhorším případě pokračuje s chybou, která se projeví úplně někde jinde.
Jojo, jsem rád že jste mě upravili měl jsem vždy za to že pole[12] má 13 hodnot dík.
V řízených taky pokud děláš dynamický pole, debugger pokud vim neodhalí přetečení pole jehož velikost se určuje za běhu. V řízenym jazyce by se to ale mělo pak nějak ochránit za běhu. V C++ můžeš použít nějakou knihovnu která to šetří za běhu, můžeš si udělat i svojí. V klasickym C si musíš prostě dávat pozor.
Tady ale nejde o to kdy ji odhalí, ale že ji vůbec odhalí.
no viem budete sa asi smiat ale este by som potreboval jeden, nechce mi to neak nacitavat !!! Vytvorte program zodpovedajúci softvéru automatu na výdaj nemocničných návlekov. Návleky stoja 1.5€. Užívateľ môže vhadzovať do systému len 0.1, 0.2, 0.5 a 1-eurové mince. Logika automatu sčítava sumu vhodených mincí. Po zadaní požadovanej sumy vypíše hlásenie, aby si užívateľ vzal vydané návleky. Ak zadaná suma presiahne 1.5€, automat vypíše hlásenie, aby si užívateľ vzal návleky a výdavok (hodnotu výdavku vypočítať nemusí).
To záleži na tom jak se chová když ji odhalí. Jestli se třeba ukončí aplikace a nebo jenom dělá že nic a přezkočí tu chybnou instrukci, což nevim, nikdy sem to nezkoušel.
A to ses nad tím ani nepozastavil? Nebylo by lepší třeba zkoušet než se ptát? Co je těžkého na tom sčítat hodnoty do té doby, než přesáhnou danou hodnotu? Naprosto primitivní úloha, nemůžeš očekávat, že to za tebe někdo bude dělat, my tě nasměrujeme, rádi ti poradíme, ale musíš nám ukázat snahu.
Samozřejmě, že ji ukončí, když dělá nesmysly.
projeď si podmínky a zkus to sám... a pak nám ukaž příklad já za tebe
každý úkol dělat nebudu
sem přijď až budeš mít konkrétní problém a nebudeš si vědět rady,
mrkni se na podmínky http://www.itnetwork.cz/…cka-tutorial a zkus to prosím
sám
Neni to spíš tak že špatná indexace vyhazuje výjimku a pokud neni zachycená tak se ukončí? Já fakt nevim jenom se ptam, celkem mě to zajimá...
mate pravdu musim sa to naucit sam, ono to nie je az tak tazke ked clovek
rozmysla ale mam jednu
otazocku ako mam napisat toto do printf() aby mi to vypisalo presne takto: James
Bond \ "Agent 007" \ # 150% zaruka # / aj stymi uvodzovkami, lomitkami a
krizikmi ???
printf("James Bond \\ %cAgent 007%c \\ # 150% zaruka # /",'"','"');
int a;
scanf("%i", &a);
char b;
scanf("%c", &b);
float c;
scanf("%f", &c);
To co je za % je různý podle toho jakej datovej typ načítáš. Tady máš 3 příklady, ostatní si někde najdi já si je nepamatuju. V klasickym C moc nedělam.
%i?
podle mě spíš
int a;
scanf("%d", &a);
s ostatním souhlasím, ještě bych dodal že když máš třeba řetězec znaků tak se to dělá následovně:
char retezec[32];
scanf("%32s", &retezec);
ostatní mám napsané tady http://www.itnetwork.cz/…nfo-tutorial
Řídící sekvence
Já pro načítání int používam v C běžně %i, nevim jestli je v tom nějakej rozdíl. Každopádně programuju hlavně v C++, tam tohle řešit nemusim.
jojo já že od jakživa jsem v C používal pro celé číslo %d
osprevedlnujem sa ja som zle polozil otazku mam priklad v kotrom potrebujem
nacitavat premenu dajme tomu scanf("%d",&a); do urcitej hodnoty napr.
100,ale zadavat mozem len po 10, tak aku cyklus by tu bolo najlepsie a
najednoduchsie pouzit ? do while?? popripade zdrojovy kod ako by to malo
vyzerat
Bože nemůžeš se vyjadřovat trošku srozumitelněji? nějaké hodnoty 100 a 10 vůbec nevím co máš na mysli... jestli pole.. nebo co? Co má být výsledek? Chceš načítat hodnoty? Jako že výstup bude :
Zadej hodnotu : 10
Zadej hodnotu : 50
zadej hodnotu : 61
ale ze ta hodnota se nesmí rovnat 100+? Fakt nevím co po mě chceš pokud do pole tak je to takhle :
int pole[100];
for(i = 0; i < 100; i++)
{
scanf("%d", &a);
pole[i] = a;
}
Pokud chceš dynamickou hodnotu pole tak to musíš přes alokaci pole
http://www.itnetwork.cz/…okace-pameti
Ale pokud to myslíš jinak... tak napiš jak to má vypadat... čeho chceš
docílit.. moc jsem to nepochopil
EDIT : Nejlépe sem napiš zadání úkolu to by bylo ideální
skusim este raz, nejde o pole, ide o to ze neviem kedy ktory cyklus(for,
while, do while) mam pouzit, uz nieco mam nakodene len neviem asi podmienky
dobre urcit, alebo som tam zly cyklus zvolil
zadanie: Vytvorte program zodpovedajúci softvéru automatu.Užívateľ môže
vhadzovať do systému len 0.1, 0.2, 0.5 a 1-eurové mince. Logika automatu
sčítava sumu vhodených mincí. Po zadaní požadovanej sumy vypíše
hlásenie
Ukaž sem tvůj kód co už máš napsané (jinak použil bych while) hoď sem kód mrknem na to
Zobrazeno 50 zpráv z 64.