Program v jazyku C - Kruh

Programovacie jazyky, rady, poradňa...
maetoo
Light Star
Light Star
Príspevky: 263
Registrovaný: 24 okt 2009, 20:05
Bydlisko: Trenčín

Program v jazyku C - Kruh

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

Napísal som si program pre výpočet ovbodu a obsahu kruhu v jazyku C.
Program vyzera byť dobre napísany, kompilator mi ho spusti, ale vypočíta úplnu blbosť.

Zdrojovy kód:
//Program pre vypocet obvodu a obsahu kruhu

//Pouzite kniznice
#include <stdio.h>
#include <stdlib.h>

int main()
{
float S; //S=Obsah
float O; //O=Obvod
float l; //l=Rudolfovo cislo(3,14)
int r; //r=Polomer
printf("Zadajte hodnotu polomeru:\n"); //Vyzve uzivatela na zadanie polomeru
scanf("%d", &r); //Ulozi premennu "r" do pamäte
L=3,14; //Rudolfovo cislo
O=2*l*r; //Vzorec pre vypocet OBVODU
S=l*r*r*; //Vzorec pre vypocet OBSAHU
printf("Obvod kruhu %f.2\n",:O); //Zobrazi vysledny obvod kruhu
printf("Obsah kruhu %f.2\n",:S); //Zobrazi vysledny obsah kruhu

return 0;
}

Ako vidieť v prilohe, zadal som číslo: 5.
Obvod vyšiel 20 a obsah 50.
To je zlé. Správne to je takto.
Obvod 31,4 a obsah 78,5.
Skušal som už všeliako upraviť kód, ale nepodarilo sa. Kde v zdrojovom kóde mám chýbu, keď nepočita spravne?
Ako by ste to vyriešili?
Prílohy
Program na vypocet.png
lowmanek
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 977
Registrovaný: 04 apr 2010, 8:53
Bydlisko: 221B Baker Street

Re: Program v jazyku C - Kruh

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

Najskôr vytvoríš premennú l, ale potom priradíš hodnotu do L - C je case-sensitive, takže l a L berie ako dve rozdielne premenné. Preto v l môže byť teraz ľubovoľná hodnota a preto ti tvoj program píše blbosti. Stačí zmeniť L na l :)

Ešte jednu vec mám na srdci:
V akom prostredí robíš? Kompilátor by ti toto mal vypísať ako chybu. Pohľadaj v nastavenia zobrazenia warningov a pod.
maetoo
Light Star
Light Star
Príspevky: 263
Registrovaný: 24 okt 2009, 20:05
Bydlisko: Trenčín

Re: Program v jazyku C - Kruh

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

Opravil som to, ako si poradil, ale žiadna zmena, resp. program stále zle počita.

Opraveny zdrojak:
//Program pre vypocet obvodu a obsahu kruhu

//Pouzite kniznice
#include <stdio.h>
#include <stdlib.h>

int main()
{
float S; //S=Obsah
float O; //O=Obvod
float l; //l=Rudolfovo cislo(3,14)
int r; //r=Polomer
printf("Zadajte hodnotu polomeru:\n"); //Vyzve uzivatela na zadanie polomeru
scanf("%d", &r); //Ulozi premennu "r" do pamäte
l=3,14; //Rudolfovo cislo
O=2*l*r; //Vzorec pre vypocet OBVODU
S=l*r*r*; //Vzorec pre vypocet OBSAHU
printf("Obvod kruhu %f.2\n",:O); //Zobrazi vysledny obvod kruhu
printf("Obsah kruhu %f.2\n",:S); //Zobrazi vysledny obsah kruhu

return 0;
}

Programujem v open source programe - CodeBlocks.
Kompilator mi napiše chýbu, aj za riadkom, kde je chýba zobrazi červeny štvorec.

Kompilator mi vypiše tutp chybu:
||=== Build: Debug in Vypočet S a O kruhu v.1 (compiler: GNU GCC Compiler) ===|
E:\Dokumenty-all\Programovanie C\Vypočet S a O kruhu\main.c||In function 'main':|
E:\Dokumenty-all\Programovanie C\Vypočet S a O kruhu\main.c|17|error: expected expression before ';' token|
E:\Dokumenty-all\Programovanie C\Vypočet S a O kruhu\main.c|18|error: expected expression before ':' token|
E:\Dokumenty-all\Programovanie C\Vypočet S a O kruhu\main.c|19|error: expected expression before ':' token|
E:\Dokumenty-all\Programovanie C\Vypočet S a O kruhu\main.c|10|warning: variable 'O' set but not used [-Wunused-but-set-variable]|
E:\Dokumenty-all\Programovanie C\Vypočet S a O kruhu\main.c|9|warning: variable 'S' set but not used [-Wunused-but-set-variable]|
||=== Build failed: 3 error(s), 2 warning(s) (0 minute(s), 1 second(s)) ===|
||=== Run: Debug in Vypočet S a O kruhu v.1 (compiler: GNU GCC Compiler) ===|
||=== Run: Debug in Vypočet S a O kruhu v.1 (compiler: GNU GCC Compiler) ===|

Ale teraz som trochu zmäteny. Ako je možne, že keď v programe je nejaka chýba, kompilator mi program preloži a spusti?
Prílohy
Zdrojak.png
Chyba.png
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Program v jazyku C - Kruh

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

Teraz tam máš hviezdičku naviac za r. A 3,14 s čiarkou ti prekladač zoberie?
Každopádne si môžeš urobiť jednoduchú kontrolu - pred samotným výpočtom si vypíš všetky premenné a uvidíš, ktorá je zle nastavená.
Solo_Kamen
King
King
Používateľov profilový obrázok
Príspevky: 1928
Registrovaný: 10 dec 2012, 21:27

Re: Program v jazyku C - Kruh

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

V jazyku C som nejaký čas nepísal ale v tom riadku 18 a 19 nespôsobuje problémy tá dvojbodka pred premennými O a S vo funkciach printf?

//autoeditácia príspevku (09 Okt 2015, 22:48)
FTFY :)

//Pouzite kniznice
#include <stdio.h>
#include <stdlib.h>
int main()
{
float S; //S=Obsah
float O; //O=Obvod
float l; //l=Rudolfovo cislo(3,14)
int r; //r=Polomer
printf("Zadajte hodnotu polomeru:\n"); //Vyzve uzivatela na zadanie polomeru
scanf("%d", &r); //Ulozi premennu "r" do pamäte
l=3,14; //Rudolfovo cislo
O=2*l*r; //Vzorec pre vypocet OBVODU
S=l*r*r; //Vzorec pre vypocet OBSAHU
printf("Obvod kruhu %f.2\n",O); //Zobrazi vysledny obvod kruhu
printf("Obsah kruhu %f.2\n",S); //Zobrazi vysledny obsah kruhu

return 0;
}

1. hviezdička navyše, ako písal BX
2. dvojbodky v riadkoch 18 a 19 tam nemaly čo robit.
3. udivilo ma, že kompilátor mi zožral tú čarku v 3.14 :)
A to ma nechceli zamestnat ako testera :D
Ale tá presnost je teda plus mínus autobus :D Program ti ignoruje desatinné čiarky... sa mi zdá.
Fabo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6810
Registrovaný: 16 nov 2007, 17:23
Bydlisko: 's Chravenhache
Kontaktovať používateľa:

Re: Program v jazyku C - Kruh

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

maetoo: kompilator ti nezozral novy kod, vyhodil chybu a spustil staru binarku. Trochu nedobry dizajn prostredia ale co uz.

ciarka tam nema byt ale bodka. je mozne ze to prostredie schrume, ale je mozne ze to schrume ako 3 a so zvyskom neviem co urobi. Neviem ako by to malo byt spravne ale tusim by to malo vsetko za ciarkou zahodit (a teda mas l=3. Dalsia poznamka, preco vymyslas l, L a podobne? ved daj

const pi = 3.14; //pripadne zvysit presnost

a pouzivaj 'pi'. Nikto ti nekaze pouzivat kratne nazvy premennych, ba naopak je to zlozvyk ktoreho sa treba zbavit cim skor. O a S sa este daju ako tak pochopit, ale tiez v zaujme citatelnosti daj obvod a obsah radsej.

Dalsia vec, co chcu znamenat tie dvojbodky pri O a S v printf? Jedine co som nasiel pouzitie dvojbotky je v bitmaske resp. bitovom poli na urcenie bitovej dlzky clena

Solo_Kamen: teba je na testera skoda :D
Solo_Kamen
King
King
Používateľov profilový obrázok
Príspevky: 1928
Registrovaný: 10 dec 2012, 21:27

Re: Program v jazyku C - Kruh

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

bralo mu to ako celé číslo :D hned mi to prišlo nejaké čudesné. po oprave tých chýb, čo som našiel a tej jednej, ktorú si mi potvrdil to ide.
maetoo , ak toto bola úloha v 1. ročníka VŠ, tak sa radšej poriadne vyspi predtým ako budeš programovat niečo. osobná skúsenost... nie z VŠ ale s tým programovaním :smt023

//autoeditácia príspevku (09 Okt 2015, 23:17)
Fabo napísal:
Solo_Kamen: teba je na testera skoda :D
Ak by si mi vedel poradit vhodnejšie zamestnanie bez VŠ vzdelania, tak mi daj vediet a dostaneš štvrtinu mojej prvej výplaty tam :D
maetoo
Light Star
Light Star
Príspevky: 263
Registrovaný: 24 okt 2009, 20:05
Bydlisko: Trenčín

Re: Program v jazyku C - Kruh

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

BX napísal:Každopádne si môžeš urobiť jednoduchú kontrolu - pred samotným výpočtom si vypíš všetky premenné a uvidíš, ktorá je zle nastavená.
Ako si mám vypisať a skontrolovať premenne, ktoré su zle nastavene?
Solo_Kamen napísal:V jazyku C som nejaký čas nepísal ale v tom riadku 18 a 19 nespôsobuje problémy tá dvojbodka pred premennými O a S vo funkciach printf?

1. hviezdička navyše, ako písal BX
2. dvojbodky v riadkoch 18 a 19 tam nemaly čo robit.
3. udivilo ma, že kompilátor mi zožral tú čarku v 3.14 :)
A to ma nechceli zamestnat ako testera :D
Ale tá presnost je teda plus mínus autobus :D Program ti ignoruje desatinné čiarky... sa mi zdá.


Odstranil som chýby podľa bodu 1 a 2. Čisla, ktore program vypočita, vyzeraju hneď realnejšie.
Čo sa tyka čiarky v čisle 3.14, prišlo mi logicke medzi čislami dať čiarku, ako bodku, kedže predtym som v C neprogramoval.
Fabo napísal:Trochu nedobry dizajn prostredia ale co uz.
Ake dizajn resp. vyvojove prostredie by si odporučil?
Fabo napísal:const pi = 3.14; //pripadne zvysit presnost
Ako by si zapracoval tuto premennu do zrojoveho kodu? Pretože pri odstraneni troch chyb spomenutych vyšie program ako tak pracoval,
ale rozhodol som sa namiesto premennej l zapracovať do zrojoveho kodu premennu const pi = 3.14, ale program mi začal blbnuť,
tak som sa vratil radšej k premennej l.
Fabo napísal:a pouzivaj 'pi'. Nikto ti nekaze pouzivat kratne nazvy premennych, ba naopak je to zlozvyk ktoreho sa treba zbavit cim skor. O a S sa este daju ako tak pochopit, ale tiez v zaujme citatelnosti daj obvod a obsah radsej.
Vďaka za dobru radu. V buducnosti ju určite využijem.
Fabo napísal:Dalsia vec, co chcu znamenat tie dvojbodky pri O a S v printf? Jedine co som nasiel pouzitie dvojbotky je v bitmaske resp. bitovom poli na urcenie bitovej dlzky clena
Nič. To je moja chýba resp.neznamosť, že dvojbodky vo funkcií printf nemaju čo robiť a keď sa napišu, robia iba problémy.
Solo_Kamen napísal:ak toto bola úloha v 1. ročníka VŠ, tak sa radšej poriadne vyspi predtým ako budeš programovat niečo. osobná skúsenost... nie z VŠ ale s tým programovaním :smt023
Presne vystihnute. Bolo to zadanie v 1.ročniku na vš.

______________________________________________________________________________________________________________

V prilohe vidieť, že program robi realnejšie vypočty.

Obsah kruhu sa počíta ako obsah sa rovna pi krat r na druhu.
Teraz r na druhu mám zapisane ako r*r. Da sa toto v jazyku c zapisať aj inak?
Ako do programu zapisať napr.tento matematicky vyraz: (a+b).(c+d)? Jednoducho povedane,
aby najskor ščítal čisla v zatvorke a potom ich medzi sebou vynasobil?
Prílohy
Program--Odstranene chyby.png
Fabo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6810
Registrovaný: 16 nov 2007, 17:23
Bydlisko: 's Chravenhache
Kontaktovať používateľa:

Re: Program v jazyku C - Kruh

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

Solo_Kamen: zalezi kde, ale skus napr. akademie v SW firmach, momentalne napr. Ness KDC pre Python, bude aj Java...

maetoo:
konstanta ti musi fungovat normalne ako premenna ked ju pouzivas vo vzorcoch. Takze ked ti to prestalo fungovat mas tam zrejme chybu.

bodka - bodka sa pouziva namiesto ciarky vo vela jazykoch, kriticky v locale en_US, takze standartne by si mal mat bodku. Obcas to vie robit problem...

r*r sa da zapisat ako r^2. (a+b).(c+d) ako (a+b)*(c+d). vid tabulka poradia operatorov
Solo_Kamen
King
King
Používateľov profilový obrázok
Príspevky: 1928
Registrovaný: 10 dec 2012, 21:27

Re: Program v jazyku C - Kruh

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

maetoo: dalšia vec je, že v tých riadkoch, kde máš printf výsledku

Kód: Vybrať všetko

printf("Obvod kruhu %f.2\n",O); //Zobrazi vysledny obvod kruhu
printf("Obsah kruhu %f.2\n",S);
by mal vyzerat takto:

Kód: Vybrať všetko

printf("Obvod kruhu %f\n",O); //Zobrazi vysledny obvod kruhu
printf("Obsah kruhu %f\n",S);
potom budeš mat konečne úplne správny výstup z tej aplikácie, teda ak odstrániš .2 z tých dvoch riadkov

A ja mne osobne sa viac ako CodeBlocks osvedčil NetBeans.

Fabo: Vďaka, popozerám.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Program v jazyku C - Kruh

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

Toto v printf

Kód: Vybrať všetko

%f.2
asi myslel

Kód: Vybrať všetko

%.2f
, čo je správne (zobrazenie na dva desatiné miesta).
r*r sa da zapisat ako r^2
Fakt? V C-čku? No len skús, čo ti to urobí.
Hint: https://en.wikipedia.org/wiki/Bitwise_o ... _.22.5E.22

maetoo napísal:Ako si mám vypisať a skontrolovať premenne, ktoré su zle nastavene?
Normálne printf každej premennej. Uvidíš tak ich hodnotu tesne pred začatím výpočtu.

maetoo napísal:Teraz r na druhu mám zapisane ako r*r. Da sa toto v jazyku c zapisať aj inak?
V matematickej knižnici je funkcia pow(a,n), ktorá ti vypočíta a na n-tú. To je ale zbytočné, zo zápisu r*r je hneď vidieť, čo to je. Keď budeš potrebovať niečo na desiatu, potom má zmysel použiť pow.
maetoo napísal:Ako do programu zapisať napr.tento matematicky vyraz: (a+b).(c+d)?
Krát je hviezdička, to vieš, zátvorky sú zátvorky. Takže jednoducho

Kód: Vybrať všetko

int a = (2+4)*(5+5);
lowmanek
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 977
Registrovaný: 04 apr 2010, 8:53
Bydlisko: 221B Baker Street

Re: Program v jazyku C - Kruh

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

Zjavne som tým prvým postom podcenil ten program. Bol oveľa deravejší ako som si myslel :D Hold začiatky sú väčšinou ťažké...
Solo_Kamen
King
King
Používateľov profilový obrázok
Príspevky: 1928
Registrovaný: 10 dec 2012, 21:27

Re: Program v jazyku C - Kruh

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

BX napísal:Toto v printf

Kód: Vybrať všetko

%f.2
asi myslel

Kód: Vybrať všetko

%.2f
, čo je správne (zobrazenie na dva desatiné miesta).
Aháá, tak toto som nevedel.

//autoeditácia príspevku (11 Okt 2015, 1:19)
lowmanek napísal:Zjavne som tým prvým postom podcenil ten program. Bol oveľa deravejší ako som si myslel :D Hold začiatky sú väčšinou ťažké...
Neviem ako vy ostatní, ale ja som spravil už aj hlúpejšie chyby :D hlavne v C/C++
Kufor
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 772
Registrovaný: 27 apr 2005, 21:49
Bydlisko: CA/BA

Re: Program v jazyku C - Kruh

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

Sice to nema na funkcnost programu absolutne ziadny vplyv, ale.... Pi je cislo Ludolfovo, nie Rudolfovo :P
Solo_Kamen
King
King
Používateľov profilový obrázok
Príspevky: 1928
Registrovaný: 10 dec 2012, 21:27

Re: Program v jazyku C - Kruh

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

maetoo napísal: ale rozhodol som sa namiesto premennej l zapracovať do zrojoveho kodu premennu const pi = 3.14, ale program mi začal blbnuť,
tak som sa vratil radšej k premennej l.
Nedalo mi nevrátit sa k tomu. určil si tej konštante číselný typ?
myslím, že by to malo vyzerat

Kód: Vybrať všetko

const float pi = 3.14;
Hodnotu konštanty musíš definovat hned ako ju deklaruješ, nemôžeš jej potom ďalej v programe meniť hodnoty.
Fabo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6810
Registrovaný: 16 nov 2007, 17:23
Bydlisko: 's Chravenhache
Kontaktovať používateľa:

Re: Program v jazyku C - Kruh

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

Solo_Kamen: hej to som tam dal ja bez toho. To mam za to, ze sa v piatok v noci flakam na hojku :D no hadam prostredie by to malo chytit.

BX: whoops. Asi si s niecim pletiem.
Jumpik
Novice
Novice
Príspevky: 1
Registrovaný: 19 okt 2015, 12:37

Re: Program v jazyku C - Kruh

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

Dobry den prajem, neviem či táto diskusia funguje aj takto ako by som to ja potreboval (niekto kto by mi urobil program moje vedomosti niesu až také aby som toto zvladol) :) dostal som úlohu v jazyku C : frekvečna analýza ciže - malo by to tak fungovať keď zadáme hocijaké pismená (nejaký text ) tak by stoho malo vytvoriť tabuľku v ktorej vypíše každé jedno písmeno pod seba vedla toho ku každému písmenu počet kolko krát sa v danom texte objavilo a zaroven aj z toho percentil
takto nejako by to malo vyzerat
znak počet %
a 25 6:53
t
c
nazorny príklad ak by sa niekto našiel kto by to zvladol velmi pekne Ďakujem.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8216
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Program v jazyku C - Kruh

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

Ked si pozries pravidla, tak tu sa zadania zo skoly neriesia.
Je to uloha na maximalne 20 minut.
Ked nieco budes mat poradime, ale riesnie uloh je zakazane v pravidlach.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Program v jazyku C - Kruh

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

Jumpik - 1 cyklus cez text, podmienka, pole s 26 prvkami. Nič viac ti netreba. Aspoň to skús, zistíš, že to nie je nič ťažké.
maetoo
Light Star
Light Star
Príspevky: 263
Registrovaný: 24 okt 2009, 20:05
Bydlisko: Trenčín

Re: Program v jazyku C - Kruh

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

BX napísal:Jumpik - 1 cyklus cez text, podmienka, pole s 26 prvkami. Nič viac ti netreba. Aspoň to skús, zistíš, že to nie je nič ťažké.
Mám podobne zadanie. Cyklus cez čísla viem spraviť, ale cyklus cez text nie.
Mohol by si ma nakopnuť a dať maly vzor, ako cyklus cez text vyzera a ako sa zapisuje v C?
Napísať odpoveď