» Poradna » Programy

Pomoc s programovaním v C

 |   |  Microsoft Windows 10 Chrome 74.0.3729.169

#include <stdio.h>#include <stdlib.h>int pole [800];int i;for (i = 10000, i < 18000, i++){ pole[i] = i;}for (i = 10000, i < 18000, i++){ printf("%d ", pole[i]);}Code::blocks mi pořád hazí chybu u for s závorkami ale já tu chybu nevidím

Mohlo by vás také zajímat

Odpovědi na otázku

 | Macintosh OS X AppleMAC-Safari 5.0

fakt je tak tezky se podivat do nejakeho tutorialu, a zjistit, ze v tom foru maj bejt strednimy?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 74.0.3729.169

to mi moc nepomohlo

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 74.0.3729.169

Kdyby ses podával do toho tutoriálu, nebo vůbec na jakýkoli příklad na webu, který je asi milion, tak to uvidíš hned. Musíš se podívat na příklad syntaxe cyklu for.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 74.0.3729.169

S takovou napis zive at to tu zavre, protoze pres google se najde 100% toho na co se tu lidi ptaji :) Porad to zive, urcite to oceni.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 74.0.3729.169

I když tam dám uvozovky tak je to error

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 74.0.3729.169

Jaké uvozovky proboha? Podívej se na syntaxi cyklu for...máš tam něco místo něčeho...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 74.0.3729.169

Podle random webu na internetu to mám dobře

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 74.0.3729.169

Ježíš jaký random web? Náhodný web? A fakt to nemáš dobře. Hned první odkaz:https://www.programiz.com/c-programming/c-for-loopA to "random" je v češtině debilita na entou.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Android Chrome 74.0

Pořád je tam ta samá chyba. Jak to má být správně?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 74.0.3729.169

STŘEDNÍK. Závorky máš sice zbytečně, ale jsou syntakticky dobře.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Android Chrome 74.0

I když čárky nahradím za středníky tak je to pořád chyba

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 74.0.3729.169

Teda ty složené závorky za for jsou zbytečném, když tam máš jen jeden příkaz. Ty "obyčejné" ve for být musí.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Edge 17.17134

Já bych ty složené závorky tolik neodsuzoval. Kolikrát jsem viděl, že někdo po někom upravoval kód a nevšiml si chybějících závorek u podmíněného bloku, pouze odsadil text a pak se nestačil divit, proč triviální úprava nefunguje.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 74.0.3729.169

Jo a pokud tam máš v tom cyklu for jen jeden příkaz, tak ty složené závorky vůbec použít nemusíš. Ani třeba v podmínce if atd., ty složené závorky jsou jen pro dva a víc příkazů.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 74.0.3729.169

A mimochodem, v deklaraci máš alokovanou velikost pole 800, ale počítač od 10000 do 18000, takže budeš plnit 8000 "chlívků" pole. To ti přeteče.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 66.0

Ono to v podstate nepretece, uz prvni iterace mu spadne, kdy i = 10000. Nepodari se mu zapsat ani jednu hodnotu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 74.0.3729.169

Nespadne, začne na 10000 a skončí na 17999.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 66.0

Ok, precejenom je to Ccko, mozna to nepadne. Ale rozhodne do toho pole nezapise nic. A nebo to taky padne, protoze mu OS zahlasi, ze ten adresni prostor uz neni jeho.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 74.0.3729.169

Jo tak to jo, pokud je to aplikace na OS (Win, Linux). Já už jsem zblbý z MCU, tam to nepadne ani na Arduinu ani na PICu, prostě to začne zapisovat kam nemá.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 66.0

S Cckem mimo OS nemam zadne zkusenosti, tam nevim jak se sprava pameti chova. Automaticky jsem predpokladal, ze clovek s takovymi znalostmi se to teprve uci a tim padem jsem predpokladal, ze jeden na Win/Linux.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 74.0.3729.169

Jasné v pohodě, moje blbost

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Chrome 74.0.3729.172

Já tam chybu vidím.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 74.0.3729.169

jj, ty čárky místo středníků. Ale prý mu to nepomohlo...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Chrome 72.0.3626.122

Některým lidem nepomůže nic.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 67.0

Níže máš funkční řešení. Podívej se na deklaraci délky toho pole. Tak jak to máš Ty, to buď okamžitě sletí. Nebo pokud bude překladač chytřejší, tak to ani nezkompiluješ.To jak jsem to udělal dole je funkční, ale velmi nečisté řešení!Není správné alokovat takto dlouhé pole, když využiješ jen část. Ale nechám na Tobě, ať přijdeš na správné řešení. Nemá smysl za Tebe napsat domácí úkol. int pole [18000]; int i; for (i = 10000; i < 18000; i++)pole[i] = i; for (i = 10000; i < 18000; i++) printf("%d ", pole[i]);

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Edge 17.17134

Akorát mi není jasné, proč tam má dva cykly for, když oba ty příkazy múže dát do jednoho cyklu for.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 67.0

Řekl bych, že zadání je naplnit pole. A pak ho vypsat.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Edge 17.17134

Jistě, avšak tak by ho zaplňoval a vypisoval prúběžně počas jednoho prúchodu cyklu for.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 67.0

Je to nějaký domácí úkol.Neznáme zadání.Ale čekal bych něco jako:1. naplnit pole2. vypsat pole

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 74.0.3729.169

https://pastebin.com/XKPEqNJdPřiprav si odůvodnění toho modula v indexu pole :) PS: z hlavy, ale mělo by to být OK.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Macintosh OS X AppleMAC-Safari 5.0

Jezis to je prasecina. Holt proc delat neco spravne a jednoduse, kdyz to jde blbe a slozite...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 74.0.3729.169

Edukativní důvod tě nenapadl? Tedy vztah mezi pamětí vyhrazenou pro pole a indexem pole? Z hlediska funkčnosti je jedno, jestli z od toho indexu odečteš a nebo aplikuješ modulo (které je safe). A to, že první prvek pole neleží na začátku pole - who cares?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 67.0

Mohl by jsi mne vysvětlit proč používáš to modulo?Sice neznáme přesné zadání. Ale předpokládám, že to má vypsat čísla 10000 až 18000.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 74.0.3729.169

Protože pole má při běhu programu v RAM paměti vymezenou velikost (a začátek - tedy adresu). A ty se musíš pohybovat, skrze ten index pole, uvnitř této vymezené paměti. C za tebe nehlídá, jestli budeš psát mimo. A pokud budeš (tzn. neohlídáš si index toho pole), buď to povede k pádu a nebo nepředvidatelnému chování - budeš přepisovat jiné proměnné. C je něco jako lepší assembler, je to systémový jazyk, kde se pracuje s pamětí na low level úrovni.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 74.0.3729.169

Co takhle místo mínuskování argumentovat?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 67.0

Asi si nerozumíme.Předpokládám, že zadání je že to má vypsat čísla 10000 až 18000.To co jsi vyprodukoval s modulo, Ti vypisuje úplně něco jiného.Nestačí, že se vejdeš to deklarovaného rozsahu pole. Taky by to mělo dávat smysluplný výsledek.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 74.0.3729.169

Když adresuješ to pole, tak ten index toho pole se MUSÍ pohybovat od 0 do 799, protože tak veliké pole je deklarované. Tedy pole[0] = 10000; pole[1] = 10001; ...; pole[799] = 10799. Pokud ten index bude větší, budeš psát ZA to pole, budeš přepisovat nějakou neznámou/cizí paměť. Teď se dívám na ten kód a aby se vypisovaly čísla od 10000 do 17999, tak se musí změnit ta definice LEN na 8000. Tedy správně: #define LEN 8000. Těch 800 jsem (slepě) převzal z dotazu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 67.0

#define LEN 8000for (i = 10000; i < 18000; i++) pole[i % LEN] = i;První průchod:I == 1000010000 % 8000 = 2000Takže v prvním průchodu tu hodnotu vkládáš to indexu 2000Máš to algoritmicky blbě!

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 74.0.3729.169

Tak si to zkompiluj a spusť. Index při zápisu a při čtení tvořím STEJNÝM způsobem. Pokud je zadání JEN vypsat čísla v poli, které neklesají, je to OK a z toho jsem vycházel. Pokud je zadání mít naplněné pole neklesající řadou integerů, tak to OK není. Ale předpokládám, že zadávajícímu šlo o to, aby si dotyčný uvědomil to o čem jsem psal, tedy že index pole nemůže být větší než velikost pole. A pro jistotu: nemůže být ani záporný.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 67.0

Celou dobu vycházíme z toho, že to má vypsat čísla 10000 až 18000.Pokud to má být edukativní v podstatě tím, že to má pseudonáhodně poskakovat po indexech pole tak budiž. Ale to nejspíš ne.To jak skáčeš po indexech pole je spíš edukativní v tom jak algoritmus vypadat nemá.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 74.0.3729.169

@zadáníČísla to z toho pole podle "zadání" vypíše správně - vzestupně. @pseudonáhodnéPseudonáhodné poskakování to není, jen to nezačíná na začátku - jsou posunutá o "offset" aneb kruhový buffer. @edukativníJeden z problémů toho původního kódu bylo to, že se psalo MIMO hranice pole, což jsem vyřešil tím modulo. Pokud by tazatel ten můj kód začal zkoumat, měl by si začít lámat hlavu nad tím, proč tam to modulo je a to by jej ideálně mělo dovést k tomu, jak je v C uloženo pole v paměti a měl by si to upravit, protože by bylo jasné, že zadávajícímu to bude podezřelé. Nechtěl jsem, aby to bylo bez práce, systémem ctrl+c ctrl+v.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 67.0

Ty si fakt myslíš, že je pro člověka co se zjevně učí úplné základy edukativní, aby místo aby zapisoval do pole od začátku do konce, zapisoval do pole od indexu 2000 až do konce pole a pak skočil na začátek a pokračoval do 2000, v situaci kdy to nedává vůbec žádný smysl? Jediný smysl pro to aby to dělal takto zmateně je použití toho modula.Navíc pokud by takto používal pole zkušený programátor, tak je to hodně nepřehledné. Takové to základy by se přece vůbec neměl nikdo učit.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 74.0.3729.169

Důvod jsem vysvětlil výše. A IMO je ten příklad naprosto v pohodě.Tak trochu jsem čekal, že se v tom začne někdo "přehrabovat", tak to má tazatel i s výkladem.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 67.0

V pohodě to není.Pokud se takto naučí programovat, tak z něj nebude programátor, ale čuně a v jeho kódu se nikdo nevyzná.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 67.0

Jen pro ujasnění. Ty mínusy Ti nedávám já.

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: #include, Blocks