Stránka 1 z 2
Obsah a obvod 2D obrazců v C++
Napsal: 15 říj 2012 19:20
od Cowan
Ahoj, řeším zrovna program, ale pořád tam mám něco blbě. Byl bych vděčný za zkouknutí a případné rady.
Program, který vypočítá podle volby obsah a obvod rovinného obrazce.
Vstupem programu je znak 'a', 'b' nebo 'c', který označuje volbu uživatele - a - čtverec, b - obdélník, c - kruh, a hodnoty nutné pro výpočet obvodu a obsahu zvoleného obrazce.
Výstupem programu jsou následující informace: obsah obrazce a, obvod obrazce
Kód: Vybrat vše
[list]#define _USE_MATH_DEFINES
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
char obrazec;
double a, b, r, obsah, obvod;
printf("Zadejte rovinny obrazec, jehoz obsah a obvod chcete spocitat: a - ctverec, b - obdelnik, c - kruh\n");
scanf_s("%c", &obrazec);
// a - ctverec
if (obrazec == 'a')
{
printf("Zadejte stranu ctverce:\n");
scanf_s("%lf", &a);
if (a <= 0)
{
printf("Nespravny vstup.\n");
return 0;
}
obsah = a*a;
obvod = 4*a;
printf("Obsah ctverce je: %.4f\n", obsah);
printf("Obvod ctverce je: %.4f\n", obvod);
}
// b - obdelnik
else if (obrazec == 'b')
{
printf("Zadejte strany obdelniku:\n");
scanf_s("%lf %lf", &a, &b);
if ((a <= 0) || (b <= 0))
{
printf("Nespravny vstup.\n");
return 0;
}
obsah = a*b;
obvod = (2*a) + (2*b);
printf("Obsah obdelniku je: %.4f\n", obsah);
printf("Obvod obdelniku je: %.4f\n", obvod);
}
// c - kruh
else if (obrazec == 'c')
{
printf("Zadejte polomer kruznice:\n");
scanf_s("%lf", &r);
if (r <= 0)
{
printf("Nespravny vstup.\n");
return 0;
}
obsah = M_PI * r * r;
obvod = 2 * M_PI * r;
printf("Obsah kruznice je: %.4f\n", obsah);
printf("Obvod kruznice je: %.4f\n", obvod);
}
else
printf("Nespravny vstup.\n");
return 0;
}[/list]
Re: Obsah a obvod 2D obrazců v C++
Napsal: 15 říj 2012 19:51
od CZechBoY
co je blbě?
Re: Obsah a obvod 2D obrazců v C++
Napsal: 15 říj 2012 20:03
od Tycek
Kód: Vybrat vše
#define _USE_MATH_DEFINES
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
char obrazec;
double a, b, r, obsah, obvod;
printf("Zadejte rovinny obrazec, jehoz obsah a obvod chcete spocitat: a - ctverec, b - obdelnik, c - kruh\n");
scanf("%c", &obrazec);
/* a - ctverec */
if (obrazec == 'a')
{
printf("Zadejte stranu ctverce:\n");
scanf("%lf", &a);
if (a <= 0)
{
printf("Nespravny vstup.\n");
return 0;
}
obsah = a*a;
obvod = 4*a;
printf("Obsah ctverce je: %.4f\n", obsah);
printf("Obvod ctverce je: %.4f\n", obvod);
getch();
}
/* b - obdelnik */
else if (obrazec == 'b')
{
printf("Zadejte strany obdelniku:\n");
scanf("%lf %lf", &a, &b);
if ((a <= 0) || (b <= 0))
{
printf("Nespravny vstup.\n");
return 0;
}
obsah = a*b;
obvod = (2*a) + (2*b);
printf("Obsah obdelniku je: %.4f\n", obsah);
printf("Obvod obdelniku je: %.4f\n", obvod);
getch();
}
/* c - kruh */
else if (obrazec == 'c')
{
printf("Zadejte polomer kruznice:\n");
scanf("%lf", &r);
if (r <= 0)
{
printf("Nespravny vstup.\n");
return 0;
}
obsah = M_PI * r * r;
obvod = 2 * M_PI * r;
printf("Obsah kruznice je: %.4f\n", obsah);
printf("Obvod kruznice je: %.4f\n", obvod);
getch();
}
else
printf("Nespravny vstup.\n");
return 0;
}
Kompilátor nebral komentáře, scanf_s a dodány nějaké getche :)
Re: Obsah a obvod 2D obrazců v C++
Napsal: 15 říj 2012 20:06
od faraon
No, kromě toho že to není v C++ ale v C, a totálně kašleš na odsazování, co má být to scanf_s()? Obyčejný scanf() by ti nestačil?
Proč tam máš tolikrát ten return? Stačí jeden na konci, ty ostatní jsou zbytečné, nakresli si vývojový diagram a uvidíš sám.
Místo těch if () ... else if () ... bych použil spíš switch (), dost by to ten kód zpřehlednilo.
A drobnost na závěr, když už, tak int main([b]void)[/b], přeci jen nejsou osmdesátá léta a normy jazyka C dost pokročily.
Jinak mi to funguje bez chyb.
Tycek: Můj kompilátor zase nebere getch(), nikdy jsi neslyšel nic o přenositelnosti?
Re: Obsah a obvod 2D obrazců v C++
Napsal: 15 říj 2012 20:08
od Tycek
Nemůžu si pomoct, ale ten pojem přenositelnost si nějak nemůžu vybavit.

Re: Obsah a obvod 2D obrazců v C++
Napsal: 15 říj 2012 20:10
od Cowan
Nevim jsem začátečník a tohle jsem tahal dá se říci "z plenek". Pořád mi to ale nebere, mám VS 2010.
Re: Obsah a obvod 2D obrazců v C++
Napsal: 15 říj 2012 20:10
od domitea
A cross-platform ti něco říká ?

Re: Obsah a obvod 2D obrazců v C++
Napsal: 15 říj 2012 20:12
od Tycek
To je tuším schopnost různých kompilátorů přeložit ten kód, nebo něco podobného mi utkvělo v paměti. Jinak nevím.

Re: Obsah a obvod 2D obrazců v C++
Napsal: 15 říj 2012 20:12
od faraon
http://cs.wikipedia.org/wiki/POSIX - Takže ani
scanf_s() ani getch() nemají ve správně napsaném kódu co pohledávat!
Cowan: A jakou ti to píše chybu?
Re: Obsah a obvod 2D obrazců v C++
Napsal: 15 říj 2012 20:18
od Cowan
Kód: Vybrat vše
1>c:\users\tom\documents\visual studio 2010\projects\111\111\111.cpp(1): error C2337: 'list' : attribute not found
1>c:\users\tom\documents\visual studio 2010\projects\111\111\111.cpp(1): error C2014: preprocessor command must start as first nonwhite space
1>c:\users\tom\documents\visual studio 2010\projects\111\111\111.cpp(65): error C2065: 'M_PI' : undeclared identifier
1>c:\users\tom\documents\visual studio 2010\projects\111\111\111.cpp(66): error C2065: 'M_PI' : undeclared identifier
1>c:\users\tom\documents\visual studio 2010\projects\111\111\111.cpp(75): error C3409: empty attribute block is not allowed
1>c:\users\tom\documents\visual studio 2010\projects\111\111\111.cpp(75): error C2143: syntax error : missing ']' before '/'
1>c:\users\tom\documents\visual studio 2010\projects\111\111\111.cpp(75): error C2059: syntax error : '/'
Re: Obsah a obvod 2D obrazců v C++
Napsal: 15 říj 2012 20:21
od CZechBoY
Cowan: nesmíš kopírovat ty blbý BB kody, co tam nějak namíchal

Re: Obsah a obvod 2D obrazců v C++
Napsal: 15 říj 2012 20:22
od faraon
Tak tam dej normální komentáře do
/* a
*/, tyhle
// jsou povolené až od C99, a místo
#define _USE_MATH_DEFINESsi nadefinuj vlastní Pí
#define PI 3.1415926536a oprav to i v kódu.
Tím ten program splňuje požadavky
ANSI C i
C99.
Kód: Vybrat vše
#define PI 3.1415926536
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
char obrazec;
double a, b, r, obsah, obvod;
printf("Zadejte rovinny obrazec, jehoz obsah a obvod chcete spocitat: a - ctverec, b - obdelnik, c - kruh\n");
scanf("%c", &obrazec);
/* a - ctverec */
if (obrazec == 'a')
{
printf("Zadejte stranu ctverce:\n");
scanf("%lf", &a);
if (a <= 0)
{
printf("Nespravny vstup.\n");
}
obsah = a*a;
obvod = 4*a;
printf("Obsah ctverce je: %.4f\n", obsah);
printf("Obvod ctverce je: %.4f\n", obvod);
}
/* b - obdelnik */
else if (obrazec == 'b')
{
printf("Zadejte strany obdelniku:\n");
scanf("%lf %lf", &a, &b);
if ((a <= 0) || (b <= 0))
{
printf("Nespravny vstup.\n");
}
obsah = a*b;
obvod = (2*a) + (2*b);
printf("Obsah obdelniku je: %.4f\n", obsah);
printf("Obvod obdelniku je: %.4f\n", obvod);
}
/* c - kruh */
else if (obrazec == 'c')
{
printf("Zadejte polomer kruznice:\n");
scanf("%lf", &r);
if (r <= 0)
{
printf("Nespravny vstup.\n");
}
obsah = PI * r * r;
obvod = 2 * PI * r;
printf("Obsah kruznice je: %.4f\n", obsah);
printf("Obvod kruznice je: %.4f\n", obvod);
}
else
printf("Nespravny vstup.\n");
return 0;
}
A ještě bys to měl uložit s příponou
.c, protože to
.cpp by mohlo ten widlácký překladač také zmást.