Vajíčková mánie Vajíčková mánie
Probíhá výprodej HTML, JavaScript a Bootstrap. Slevy až 80 %
Vyšlehej si extra vědomosti! Až 100% bodů na prémiový obsah zdarma! Více zde

Diskuze: Program se spoustu chyb, kterým nerozumím

Aktivity (2)
Avatar
Alex
Redaktor
Avatar
Alex:30. března 19:26

Ahoj, onehda jsem se začal učit programovat, takže si udělám krásných pár programů, ale VISUAL STUDIO mi u nich hází chyby, které tam podle mě ani nejsou. Můžete mi nějak poradit
kód

#include pch.h <iostream>
#include <string>
using namespace std;
int main {
        int hoj;
ahoj = 56;
cout << ahoj << endl;
cin.get();
return 0;
 }

obrázek s chybami je v příloze

Zkusil jsem: zkusil jsem udělat mezery mezi znamínky apod.

Chci docílit: snažím se toho aby mi program VISUAL STUDIO sestavilo.
Díky za radu

Odpovědět 30. března 19:26
Pokud si myslíte že je váš program špatný, tak si zkuste pustit můj
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na Alex
patrik.valkovic:30. března 19:34

Ahoj, co je #include pch.h <iostream>? Dále definuješ proměnnout hoj, ale používáš ahoj. U mainu ti chybí závorky. Poud začínáš, doporučuji místní tutoriály.

#include <iostream>
#include <string>
using namespace std;
int main() {
    int ahoj;
    ahoj = 56;
    cout << ahoj << endl;
    cin.get();
    return 0;
}
Nahoru Odpovědět 30. března 19:34
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Ilja Židkov
Člen
Avatar
Odpovídá na Alex
Ilja Židkov:30. března 19:37
#include pch.h <iostream>
#include <string>
using namespace std;
int main() {
        int hoj; // Nemělo by to být "ahoj"?
ahoj = 56;
cout << ahoj << endl;
cin.get();
return 0;
 }

PS: Ještě jsem nezažil, aby někdo zdravil člověka číslem :D

PS PS: Jo a hezký motto :D

Editováno 30. března 19:39
 
Nahoru Odpovědět  +1 30. března 19:37
Avatar
Alex
Redaktor
Avatar
Odpovídá na patrik.valkovic
Alex:30. března 19:41

tady ta proměnná

ahoj

je tam jen tak,

Nahoru Odpovědět 30. března 19:41
Pokud si myslíte že je váš program špatný, tak si zkuste pustit můj
Avatar
Alex
Redaktor
Avatar
Odpovídá na patrik.valkovic
Alex:30. března 19:41

místní návody používám.
Díky za rady. Zítra zkusím

Nahoru Odpovědět 30. března 19:41
Pokud si myslíte že je váš program špatný, tak si zkuste pustit můj
Avatar
Alex
Redaktor
Avatar
Alex:30. března 19:43

p.s s tím pch.h jsem si nevěděl rady kam s ním, protože VISUAL STUDIO to po mě chtělo

Nahoru Odpovědět 30. března 19:43
Pokud si myslíte že je váš program špatný, tak si zkuste pustit můj
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na patrik.valkovic
Martin Dráb:30. března 21:26

co je #include pch.h <iostream>

To zřejmě souvisí s precompiled headers, což je ve výchozím nastavení projektů zapnuté. Mělo by se ale includovat stdafx.h, když už si člověk přeje komplikovat si život :-).

Jinak je lze vypnout v Project -> Properties -> C/C++ -> Precompiled Headers a v první položce dát Not Using.

Nahoru Odpovědět 30. března 21:26
2 + 2 = 5 for extremely large values of 2
Avatar
Alex
Redaktor
Avatar
Odpovídá na Martin Dráb
Alex:30. března 23:28

hele, počítej, že ohledně takovýchto blbostí tu budu otravovat dalších X měsíců (ne-li let).
P.S díky za další radu

Nahoru Odpovědět 30. března 23:28
Pokud si myslíte že je váš program špatný, tak si zkuste pustit můj
Avatar
Pluhtík
Člen
Avatar
Odpovídá na Alex
Pluhtík:31. března 18:22

Ahoj, neuč se programovat v Cčku, to je to nejhorší, co můžeš udělat. Daleko líp bys udělal, kdybys začal Pythonem. Je daleko lehčí a když tam uděláš chybu, tak IDLE ti řekne, na kterém řádku přesně ta chyba je. Nemá cenu se věci jako cykly, pole, funkce apod. učit v něčem jako je Cčko.

 
Nahoru Odpovědět  -1 31. března 18:22
Avatar
Alex
Redaktor
Avatar
Odpovídá na Pluhtík
Alex:31. března 19:54

Díky za radu, ale to už bych se radši učil v JAVě než s Pythonem

Nahoru Odpovědět 31. března 19:54
Pokud si myslíte že je váš program špatný, tak si zkuste pustit můj
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Pluhtík
DarkCoder:31. března 20:20

Ahoj, neuč se programovat v Cčku, to je to nejhorší, co můžeš udělat.

To si mě pobavil. Jak moc dobře znáš C že tohle o něm tvrdíš? Když už tak právě že jazykem C by měl začít a nikoli C++, ve kterém kód napsal. Konstrukce a pojmy, jako jsou proměnné, cykly, pole, funkce, jsou natolik základní, že spadají do obecné sekce programování nikoli pod konkrétní programovací jazyk.

Nahoru Odpovědět 31. března 20:20
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na DarkCoder
Martin Dráb:31. března 20:28

To si mě pobavil. Jak moc dobře znáš C že tohle o něm tvrdíš? Když už tak právě že jazykem C by měl začít a nikoli C++

Za mě je u C problém v tom, že člověka příliš brzy seznámí s dynamickou alokací (a to už jen kvůli řetězcům), tedy v době, kdy ještě nemá kapacitu se zabývat tím, co že to vlastně ten ukazatel je a jak dynamická alokace funguje (neb má plnou hlavu těch základních konstrukcí). C++ tomu samozřejmě moc nepomůže.

Nejsem si jistý, zda-li je Python vhodnější, protože je možná až moc "volný", takže pak případné setkání těchto lidí s nízkoúrovňovějším světem končí dosti nešťastně.

Nahoru Odpovědět 31. března 20:28
2 + 2 = 5 for extremely large values of 2
Avatar
Alex
Redaktor
Avatar
Alex:31. března 20:40

tak jsem se rozhod. Zatím dám C++ zbohem a zkusím to tedy s JAVou. Máte k tomu nějaké výtky?

Nahoru Odpovědět 31. března 20:40
Pokud si myslíte že je váš program špatný, tak si zkuste pustit můj
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Martin Dráb
DarkCoder:31. března 21:31

Za mě je u C problém v tom, že člověka příliš brzy seznámí s dynamickou alokací (a to už jen kvůli řetězcům), tedy v době, kdy ještě nemá kapacitu se zabývat tím, co že to vlastně ten ukazatel je a jak dynamická alokace funguje (neb má plnou hlavu těch základních konstrukcí).

Dynamická alokace a ukazatele mají k sobě vztah, ale nejsou tak pevně svázané. Práce s ukazateli je možná bez využívání dynamické alokace na rozdíl od práce s dynamickou alokací, která práci s ukazateli vyžaduje. Dynamická alokace i ukazatele jsou "bonus" pro efektivitu. Rozdíl je v tom, že znalost ukazatelů je bezpodmínečná kdežto znalost dynamické alokace je vysoce doporučená. Soubory, pole jako parametr, předávání struktůr, načítání proměnných a mnoho dalších vyžaduje znalost ukazatelů. Práce s ukazateli v C je všude bezdůvodně brána jako strašák, přitom je to obdobné jako práce s jinou proměnnou, jen trochu jinak. Co se týká základních konstrukcí, tam je situace jasná - nad tím se nepřemýšlí, znalost tohoto beru jako samozřejmost. C++ tomu opravdu nepomůže. C++ je C s nadbytky zabalené do líbivého obalu.

Nejsem si jistý, zda-li je Python vhodnější, protože je možná až moc "volný", takže pak případné setkání těchto lidí s nízkoúrovňovějším světem končí dosti nešťastně.

Přesně tak. Pochopení toho jak co funguje pak nabízí vícero možností jak co řešit. Rychleji a efektivněji.

Nahoru Odpovědět  -1 31. března 21:31
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
Pluhtík
Člen
Avatar
Pluhtík:31. března 21:33

DarkCoder - přesně tak. Konstrukce jako proměnné, cykly, funkce, podmínky apod. jsou natolik základní, že člověk, který začíná programovat, by měl bojovat s nimi a dokonale je ovládnout. A neřešit problémy tak složitého jazyka jako C, C++ apod.

Alex - jestli nechceš Python (napadá mě spousta důvodů, proč ho nechtít, ale jen pro zajímavost - jaký je ten tvůj?), tak Java je dobrá. Doporučuji ti co nejrychleji se naučit zmíněné věci (funkce, proměnné, datové typy, cykly, podmínky...) a také práci s poli a řetězci a potom se rozhodnout jak dál - buď do detailů ovládnout řetězce a pole (tady na ITnetowk je to sekce Algoritmy, ale to je jen minimum, dál si musíš zjistit na netu) a pracovat s tím. Nebo se tohle všechno učit za pochodu a místo toho se vrhnout na objektově orientované programování.
Klidně se ozvi, pokud si s něčím nebudeš vědět rady a dokud se nenaučíš základy, tak se drž daleko od jazyků jako C a C++.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 31. března 21:33
Avatar
Pluhtík
Člen
Avatar
Odpovídá na DarkCoder
Pluhtík:31. března 21:37

Práce s ukazateli v C je všude bezdůvodně brána jako strašák, přitom je to obdobné jako práce s jinou proměnnou, jen trochu jinak.

To jakože člověk, který včera zjistil, co jsou to datové typy, dnes si nastuduje cykly a podmínky, by měl zítra studovat ukazatele (nedejbože dynamickou alokaci)? To bych doporučil akorát lidem, které bych chtěl od programování odradit...

 
Nahoru Odpovědět 31. března 21:37
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na DarkCoder
Martin Dráb:31. března 22:02

Práce s ukazateli v C je všude bezdůvodně brána jako strašák

Z mého pozorování je ten "strašák" pravda. Plné pochopení, co je ukazatel a čeho s ním lze dosáhnout, dá lidem zabrat (i mně trvalo dlouho, než jsem s ním byl úplně sžitý). Moje zkušenost (pravda, na malém vzorku) je taková, že lidé snáze dokázali použít ukazatele v rámci dynamické alokace, než mimo ni, protože u alokace bylo možné použít abstrakci, která sice nebyla přesná, ale pro daný účel stačilo.

Říci, že ukazatel je prostě celé číslo, které je interpretováno jako adresa kamsi do paměti, a tedy že tam lze provádět různé věci (ukazatelová aritmetika), mi nikdy moc nefungovalo (na rozdíl od minulého odstavce).

Nahoru Odpovědět  +1 31. března 22:02
2 + 2 = 5 for extremely large values of 2
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Pluhtík
DarkCoder:31. března 22:20

Každý, nechť postupuje dle svých schopností. To, co by měl programátor znát před tím, než okusí kapitolu ukazatelů, je pro všechny jazyky stejné nebo velmi podobné. Rozdíl je akorát v syntaxi. Nikoho nenabádám, aby druhý den studoval ukazatele popř. dynamickou alokaci. Kapitola o ukazatelích je už celkem rozsáhlá, takže dynamickou alokaci brát druhý den je nesmysl. Nic v tom však nikomu nic nebrání, není na tom nic těžkého.

Klidně se ozvi, pokud si s něčím nebudeš vědět rady a dokud se nenaučíš základy, tak se drž daleko od jazyků jako C a C++.

Druhý příspěvek, ve kterém je zřetelně cítit tvá obava z C. A řekl bych, že na vině jsou právě ukazatele, popř. dynamická alokace paměti. Tímto akorát druhé bezdůvodně odrazuješ od toho, aby pocítili, jak extrémně mocný je jazyk C.

Nahoru Odpovědět  +1 31. března 22:20
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Martin Dráb
DarkCoder:31. března 22:57

Ano, kapitola ukazatelů je na jazyku C to nejtěžší právě proto, protože že je rozsáhlá a nepřirozená. Neexistuje totiž jen jeden ukazatel na rozdíl od jednoduchosti práce s běžnou proměnnou. Dále při prvním pohledu na ně je nepochopitelné, že když chci načíst hodnotu do proměnné, že nelze použít intuitivní:

int num;
scanf("%d", num);

ale musí se:

int num;
scanf("%d", &num);

Tedy aby funkce scanf() mohla měnit hodnotu svého parametru, musí se předávat ukazatel na proměnnou.

A to je to co musí pochopit.

Říci, že ukazatel je prostě celé číslo, které je interpretováno jako adresa kamsi do paměti, a tedy že tam lze provádět různé věci (ukazatelová aritmetika), mi nikdy moc nefungovalo (na rozdíl od minulého odstavce).

A to je právě to, že takto podané je to složité, nehledat v tom žádné složitosti. Přitom stačí:

Ukazatel je proměnná udržující adresu objektu.

Použití ukazatele v rámci dynamické alokace je jednodušší. Jedna věc je avšak pro ně stejná a tady je právě ta další a hlavní věc, která činí ukazatele náročnými. A tou jsou komplikované deklarace a s tím i jak už jsem psal, více než jeden ukazatel. Kdyby se mohla napsat deklarace ukazatele na typ stejně jako ukazatel na funkci mající dva celočíselné parametry vracející typ, bylo by to krásné.

int *pi = NULL;

int (*pf)(int, int) = NULL;

Naučit se správně číst a zapisovat komplikované deklarace je výchozí bod k tomu být s ukazateli kamarád.

Nahoru Odpovědět  +2 31. března 22:57
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
Alex
Redaktor
Avatar
Alex:31. března 23:18

Jsem nečekal že tu takový amatér jako já rozvíří takovou diksuzi.
Děkuji všem za pomoc.

Nahoru Odpovědět 31. března 23:18
Pokud si myslíte že je váš program špatný, tak si zkuste pustit můj
Avatar
patrik.valkovic
Šéfredaktor
Avatar
patrik.valkovic:1. dubna 10:22

Tak tohle je pěkný shitstorm. Nakonec jsem se neubránil a musím k tomu také něco napsat. Berte to jako můj názor, nemám až tak velké zkušenosti s učením, takže jsem si své výroky nemohl ověřit.

Máme tu takové tři skupiny jazyků - nízkoúrovňové C a C++, staticky typové vysokoúrovňové jazyky jako Java a C# a dynamicky typové jazyky Python, JavaScript a PHP (o tom ještě dále).
Dle mého názoru je pro začátečníky nejlepší začít s typovými jazyky. Co si budeme, i v těch dynamicky typovaných ty typy jsou, jen jsou skryty před programátorem. Dle mého by měl začátečník typový systém pochopit, jelikož to jednak pomáhá při kontrole kódu a jednak si uvědomí, že tam nějaké typy jsou.

Python (a v poslední době i JavaScript) se prezentují jako jazyky vhodné pro nováčky, vzhledem k jejich jednoduché syntaxi. Bohužel, jako programátor se nestačí naučit pouze jeden jazyk a dříve nebo později je potřeba se naučit nějaký jiný. Naneštěstí jak Python, tak JavaScript mají tak atypické konstrukce (viz třeba python for i in range(10) kde je použit generátor a iterátor), že je poté složitější přejít na C-like jazyky než opačně. Proto bych tuto cestu doporučil snad jen "data scientists" lidem, kde z výběru Python, R a Matlab je pořád Python ta nejlepší volba. Nicméně pro obecného programátora bych takový Python nedoporučoval (a tady předpokládám, že se s hodně lidmi neshodnu).
Teď ještě k tomu PHP. PHP má standardní C-like syntax a je dynamicky typovaný. Bohužel, PHP si mění typy kdy to jen jde (například text "12" na int). To si myslím, že je obrovský problém a jedná se snad o jediný jazyk, který to dělá (mění typy pod rukama). Dále PHP považuju za takový trochu nedodělaný jazyk, takže bych se jej nechtěl učit jako první.

No a zbývá nám C resp. C++ a C#/Java. C# můžeme považovat za trochu komplikovanější Javu. C++ považuju za nejkomplikovanější jazyk vůbec. Já osobně jsem se učil programovat v C++ a nelituju tohoto rozhodnutí. Ano, ovládnutí jazyka trvá dlouho a je to dřina, ale za odměnu máte nejvýkonější jazyk vůbec a obrovskou svobodu jak nějakou věc naimplementovat. Následný přechod z C++ na ostatní jazyky je snadný, ale hlavně si programátor uvědomuje co se děje pod kapotou a dokáže kód optimalizovat. Dokáže psát efektivní kód a myslím si, že je značně zredukována šance, že začne kód prasit.

Takže abych to nějak shrnul. Za mě nedoporučuji začínat s jazyky jako JavaScript a Python kvůli dost atypické syntaxi resp. jazykovým konstrukcím. Šel bych cestou silně typovaných jazyků a to Java (mainstream a klasicklý základ), C# (modernější, propracovanější a hezčí Java za cenu pár nových jazykových konstrukcí které je potřeba se naučit) nebo C++ (opravdu chceš problematice rozumět, ale člověk musí mít koule [dámy prominou] se tento komplikovanný jazyk naučit).

Howgh, domluvil jsem.

Nahoru Odpovědět  +5 1. dubna 10:22
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Alex
Redaktor
Avatar
Alex:1. dubna 15:48

Tak teď nevím co je lepší. Java nebo C++.

Nahoru Odpovědět 1. dubna 15:48
Pokud si myslíte že je váš program špatný, tak si zkuste pustit můj
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Alex
DarkCoder:1. dubna 17:01

Ne lepší ale vhodnější. A k tomu abychom Ti poradili musíš vědět jakým směrem se chceš ubírat. Zda-li to budou desktopový aplikace, webové aplikace, mobilní aplikace, zda-li to bude operační systém, kancelářské aplikace, hry, apod. a neopomeň pro jaký operační systém.

Nahoru Odpovědět 1. dubna 17:01
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
Alex
Redaktor
Avatar
Odpovídá na DarkCoder
Alex:1. dubna 17:16

Nejraději bych dělal pro windows. Operační systém rozhodně ne (to by dopadlo, když by nešel ani pustit) spíš hry a kacl. aplikace.

Nahoru Odpovědět 1. dubna 17:16
Pokud si myslíte že je váš program špatný, tak si zkuste pustit můj
Avatar
Ilja Židkov
Člen
Avatar
Odpovídá na DarkCoder
Ilja Židkov:1. dubna 17:35

...jsem se začal učit programovat...

On ale ani neví, co chce přesně dělat. Tvoje odpověď ho teď musela dodělat ještě víc. On neví jaký je rozdíl mezi desktopovou aplikací, webovkou, mobilní, natož operační systémy.

Alexi, doporučuju se učit základy (proměnné, větvení, funkce, OOP), ty jsou ve všech jazycích víceméně stejné.

Mrkni se na nějaký YouTube tutoriál a najdi si alespoň nějakou inspiraci. Vymysli si nějaký cíl (např. vytvoř kalkulačku v C++ a pak v ostatních jazycích). Hraj si. Striktně se učit C++ a pak zjistit, že tě vlastně vůbec nebaví skončí frustrací a nejspíše to zabalíš.

Samozřejmě, osobně bych ti doporučil C# nebo JavaScript (protože v tom pracuju :)) ) i když sám jsem začínal v C++ a mám na něj vynikající vzpomínky.

C# nebo JavaScript lze provozovat v jednoduchém, byť nejlepším textovým editoru - Visual Studio Code. Nepotřebuješ žádné komplikované IDE, ze kterého budeš mít noční můry.

Zkus HTML a CSS, což je asi to nejjednodušší (i když to nejsou programovací jazyky), možná tě chytnou webovky.

Neposlouchej specialisty, kteří v dané technologii pracují řadu let.

Dokud tvá volba obsahuje jazyky jako: Java, C#, PHP, Python, JavaScript, C/C++ (HTML, CSS, SQL), nemáš, kde udělat chybu. Jsou to nejvíce žádoucí technologie na trhu a StackOverflow nelže.

Závěrem:

Zkoušej, poznávej, dělej chyby, neboj se zeptat a hlavně hraj si s kódem. Jedině tak, v tom setrváš a vlastně tohle, bude tvůj každodenní chléb :)

Hodně štěstí!

 
Nahoru Odpovědět 1. dubna 17:35
Avatar
Alex
Redaktor
Avatar
Odpovídá na Ilja Židkov
Alex:1. dubna 18:41

Alexi, doporučuju se učit základy (proměnné, větvení, funkce, OOP), ty jsou ve všech jazycích víceméně stejné.

Tak část z toho ovládám (a.k.a jen proměnné) a už jsem trochu v minulosti programoval (Zkoušel jsem HTML a PHP ale u HTML to za mě de facto dělal IDE a u PHP jsem to neuměl otestovat [spíš nastavit zkušební servere) a proto jsem chtěl desktop (pokud vím tak je to pro PC). Trochu této terminologie jsem už pochytil a pár programů (v lego mindstorms jako je gimbal a automatické parkování) jsem už taky udělal, ale neumím vlastně žádný jazyk. Takže by jsi mi doporučili do základu abych mohl někdy vyvíjet.
Díky

Nahoru Odpovědět 1. dubna 18:41
Pokud si myslíte že je váš program špatný, tak si zkuste pustit můj
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 26 zpráv z 26.