Obsah a obvod 2D obrazců v C++

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Cowan
Level 2.5
Level 2.5
Příspěvky: 288
Registrován: červen 12
Pohlaví: Muž
Stav:
Offline

Obsah a obvod 2D obrazců v C++

Příspěvekod Cowan » 15 říj 2012 19:20

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]

Reklama
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Obsah a obvod 2D obrazců v C++

Příspěvekod CZechBoY » 15 říj 2012 19:51

co je blbě?
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Tycek
Level 1.5
Level 1.5
Příspěvky: 138
Registrován: červenec 10
Bydliště: Karviná
Pohlaví: Muž
Stav:
Offline

Re: Obsah a obvod 2D obrazců v C++

Příspěvekod Tycek » 15 říj 2012 20:03

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 :)
Naposledy upravil(a) Tycek dne 15 říj 2012 20:06, celkem upraveno 1 x.

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7398
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Obsah a obvod 2D obrazců v C++

Příspěvekod faraon » 15 říj 2012 20:06

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?
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Tycek
Level 1.5
Level 1.5
Příspěvky: 138
Registrován: červenec 10
Bydliště: Karviná
Pohlaví: Muž
Stav:
Offline

Re: Obsah a obvod 2D obrazců v C++

Příspěvekod Tycek » 15 říj 2012 20:08

Nemůžu si pomoct, ale ten pojem přenositelnost si nějak nemůžu vybavit. :oops:

Cowan
Level 2.5
Level 2.5
Příspěvky: 288
Registrován: červen 12
Pohlaví: Muž
Stav:
Offline

Re: Obsah a obvod 2D obrazců v C++

Příspěvekod Cowan » 15 říj 2012 20:10

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.

Uživatelský avatar
domitea
Tvůrce článků
Level 4.5
Level 4.5
Příspěvky: 1971
Registrován: červen 09
Bydliště: Královehradecký kraj
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Obsah a obvod 2D obrazců v C++

Příspěvekod domitea » 15 říj 2012 20:10

A cross-platform ti něco říká ? :wink:

Tycek
Level 1.5
Level 1.5
Příspěvky: 138
Registrován: červenec 10
Bydliště: Karviná
Pohlaví: Muž
Stav:
Offline

Re: Obsah a obvod 2D obrazců v C++

Příspěvekod Tycek » 15 říj 2012 20:12

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. :D
Naposledy upravil(a) Tycek dne 15 říj 2012 20:12, celkem upraveno 1 x.

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7398
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Obsah a obvod 2D obrazců v C++

Příspěvekod faraon » 15 říj 2012 20:12

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?
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Cowan
Level 2.5
Level 2.5
Příspěvky: 288
Registrován: červen 12
Pohlaví: Muž
Stav:
Offline

Re: Obsah a obvod 2D obrazců v C++

Příspěvekod Cowan » 15 říj 2012 20:18

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 : '/'

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Obsah a obvod 2D obrazců v C++

Příspěvekod CZechBoY » 15 říj 2012 20:21

Cowan: nesmíš kopírovat ty blbý BB kody, co tam nějak namíchal :D
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7398
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Obsah a obvod 2D obrazců v C++

Příspěvekod faraon » 15 říj 2012 20:22

Tak tam dej normální komentáře do /* a */, tyhle // jsou povolené až od C99, a místo
#define _USE_MATH_DEFINES
si nadefinuj vlastní Pí
#define PI 3.1415926536
a 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.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Obsah složky se zrcadlí na ploše Příloha(y)
    od Grander » 01 dub 2025 17:44 » v Windows 11, 10, 8...
    4
    2929
    od Grander Zobrazit poslední příspěvek
    02 dub 2025 15:29

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host