C++ zadatak, pomoć

poruka: 11
|
čitano: 3.280
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
12 godina
offline
C++ zadatak, pomoć

Dobio sam za zadaću napravit 

1.Opseg pravokutinika

2.Površina pravokutinka

3.Opseg i površina pravokutinika

4.Opseg,površina i duljina dijagonale

 

Pomoću Switch case granjanja.Pa bi vas molio malo objašnjenje i uputu (Nebi htio da mi rješite zadatak)

 
0 0 hvala 0
17 godina
offline
Re: C++ zadatak, pomoć

Znači switch bi se trebao koristiti za odabir onog što želiš računati?

 

Dakle napravi switch i stavi da ako odabereš 1 računa opseg, 2 računa površinu, itd, itd. U svaki case staviš unos stranica i izračun, te na kraju poslije switch-case petlje staviš u cout output koji si dobio.

 

Switch case znaš koristit ili da ti i to pojasnim?

13 godina
offline
C++ zadatak, pomoć

otprilike:

 

switch(izbor)

case 1

       O pravokutnika  << formula <<

case 2

      P pravokutnika  << formula <<

 

itd...

 

Inače tema za ovakva pitanja je ovdje http://www.bug.hr/forum/topic/programiranje/programiranje-c-pitanja-odgovori/98845.aspx

Moj PC  
0 0 hvala 0
12 godina
offline
C++ zadatak, pomoć

Uspio sam napravit ali mi baca errore dok kompajliram I nemogu skužit koji su:

 

 

 

piše break statement not  within loop or switch

 

 
0 0 hvala 0
15 godina
neaktivan
offline
Re: C++ zadatak, pomoć
GenloX kaže...

Uspio sam napravit ali mi baca errore dok kompajliram I nemogu skužit koji su:

 

piše break statement not  within loop or switch

To ti znači da imaš "break" koji nije unutar petlje ili switch bloka. Žišku?

0xBADC0DE
12 godina
neaktivan
offline
C++ zadatak, pomoć

Ovako bi u C# to izgledalo, pa prevedi sebi u CPP :)

 

___cut___

 

using System;

namespace Pravokutnik
{
    class Program
    {
        static void Main()//string[] args)
        {
            double a=0, b=0;

            switch (Odabir().ToUpper())
            {
                case "O":
                    Console.WriteLine("Unesite duzinu stranice a");
                    CitajBroj(ref a);
                    Console.WriteLine("Unesite duzinu stranice b");
                    CitajBroj(ref b);
                    Console.Write("Obim pravokutnika je: " + Obim(a, b).ToString() + "\nPritisnite C za ponovnu operaciju ili bilo koju drugu tipku za izlaz\n");

                    if (Console.ReadLine().ToUpper() == "C")
                    {
                        Main();
                    }
                    break;

                case "P":
                    Console.WriteLine("Unesite duzinu stranice a");
                    CitajBroj(ref a);
                    Console.WriteLine("Unesite duzinu stranice b");
                    CitajBroj(ref b);
                    Console.Write("Povrsina pravokutnika je: " + Povrsina(a, b).ToString() + "\nPritisnite C za ponovnu operaciju ili bilo koju drugu tipku za izlaz\n");

                    if (Console.ReadLine().ToUpper() == "C")
                    {
                        Main();
                    }
                    break;

                case "D":
                    Console.WriteLine("Unesite duzinu stranice a");
                    CitajBroj(ref a);
                    Console.WriteLine("Unesite duzinu stranice b");
                    CitajBroj(ref b);
                    Console.Write("Dijagonala pravokutnika je: " + Dijagonala(a, b).ToString() + "\nPritisnite C za ponovnu operaciju ili bilo koju drugu tipku za izlaz\n");

                    if (Console.ReadLine().ToUpper() == "C")
                    {
                        Main();
                    }

                    break;

                case "M":
                    Console.WriteLine("Unesite duzinu stranice a");
                    CitajBroj(ref a);
                    Console.WriteLine("Unesite duzinu stranice b");
                    CitajBroj(ref b);
                    Console.Write("Povrsina pravokutnika je: " + Povrsina(a, b).ToString()
                        + "\n" + "Dijagonala pravokutnika je: " + Dijagonala(a, b).ToString()
                        + "\n" + "Obim pravokutnika je: " + Obim(a, b).ToString() + "\nPritisnite C za ponovnu operaciju ili bilo koju drugu tipku za kraj\n");

                    if (Console.ReadLine().ToUpper() == "C")
                    {
                        Main();
                    }
                   
                    break;


                default:
                    break;
            }

        }

        static void CitajBroj(ref double broj)
        {
           if (!double.TryParse(Console.ReadLine(), out broj) || broj==0)
           {
               Console.WriteLine("Greska u unosu, unesite adekvatan broj!");
               CitajBroj(ref broj);
           }
        }

        static string Odabir()
        {
            Console.WriteLine("Odaberite opciju:");
            Console.WriteLine("O - Obim pravokutnika");
            Console.WriteLine("P - Povrsina pravokutnika");
            Console.WriteLine("d - dijagonala");
            Console.WriteLine("M - opseg, duzina i dijagonala");
            return Console.ReadLine();
        }

        static double Povrsina(double a, double b)
        {
            return a*b;
        }

        static double Obim(double a, double b)
        {
            return 2 * (a + b);
        }

        static double Dijagonala(double a, double b)
        {
            return Math.Sqrt(Math.Pow(a, 2) + Math.Pow(b, 2));
        }

    }
}


___cut___

 
0 0 hvala 0
16 godina
neaktivan
offline
Re: C++ zadatak, pomoć
GenloX kaže...

Dobio sam za zadaću napravit 

1.Opseg pravokutinika

2.Površina pravokutinka

3.Opseg i površina pravokutinika

4.Opseg,površina i duljina dijagonale

 

Pomoću Switch case granjanja.Pa bi vas molio malo objašnjenje i uputu (Nebi htio da mi rješite zadatak)

 

Vidim , postao si pitanje prije 2 dana i pretpostavljam da još nemaš rješenje ako ti je sinoć kompilacija bila fail.
Iako si naveo da ne želiš gotovo rješenje ja sam ti postao cijeli zadatak jer nisi debug_LOG objavio.
To bi bilo možda i najbolje jer se tako najbrže shvati a pošto je zadatak trivijalan već bi ti netko tko je online
isčitao fail-ove i što promijeniti u minut-dve.
Uglavnom , kako toga nema , evo ti onda još jedna verzija.
Ponukan već pomalo olinjalim C-like rješenjima u C++ temama digao sam ti razradu kroz klasu + pomoćni struct.
Ubacio sam i basic assembly (GAS) iz istog razloga jer se ovakva pitanja ponavljaju u nedogled pa da je barem koja
linija koda različita od dosadašnjih rješenja sličnih zadataka.
U komentarima su ti formule tako da prepravi u c++ te asm dijelove.
Sad sam to online napisao tako da je moguće da se eventualno potkrala koja greška no nije nužno.
Assembly je inline C++ style tako da samo kopiraj u codeBlocks , dev_c++ ili neki gcc IDE i radi.

 

 

http://ideone.com/bCFmw2

 

 

 

#include <iostream>
#include <cmath>

/* http://ideone.com/bCFmw2# */

using namespace std;

struct Point {
   
  int x; 
  int y;
 
};


class Quad {

public:
    Quad(int x ,int y ,int w ,int h);
    ~Quad() {}
   
    void opseg();
    void povrsina();
    void dijagonala();
   
protected:
    void init_ASM_DATA();

private:
    Point m_topLeft;
    int   m_width;
    int   m_height;
   
    int data_ASM[4];           
};


Quad::Quad(int x ,int y ,int w ,int h)
{
    m_topLeft.x = x;
    m_topLeft.y = y;
    m_width = w;
    m_height = h;
   
    init_ASM_DATA();
}

void Quad::init_ASM_DATA()
{
    data_ASM[0] = m_topLeft.x;
    data_ASM[1] = m_topLeft.y;
    data_ASM[2] = m_width;
    data_ASM[3] = m_height;
}


void Quad::opseg()
{
    /*******FORMULA***************/   
    /* opseg = 2*width + 2*height*/
    /****************************/
   
    int res;
   
    __asm__(
       
        "movl %1 , %%esi        \n"      
        "movl 8(%%esi) , %0     \n"
        "addl 12(%%esi), %0     \n"
        "imull $2 , %0          \n"     
        : "=b" (res)              
        : "a"  (data_ASM)
       
        );
  
   cout<< "opseg: " << res << "\n";
}


void Quad::povrsina()
{
    /*******FORMULA***************/   
    /* width * height            */
    /****************************/
   
     int res;
   
    __asm__(
       
        "movl %1 , %%esi        \n"      
        "movl 8(%%esi) , %0     \n"
        "imull 12(%%esi), %0    \n"             
        : "=b" (res)              
        : "a"  (data_ASM)
       
        );
  
   cout<< "povrsina: " << res << "\n";
   
}



void Quad::dijagonala()
{
    /*******FORMULA***************/   
    /* sqrt(width^2 + height^2)  */
    /****************************/
   
     int res;
   
    __asm__(
       
        "movl %1 , %%esi        \n"      
        "movl 8(%%esi) , %0     \n"
        "imull %0 , %0          \n"
        "movl 12(%%esi) , %%ecx \n"
        "imull %%ecx , %%ecx    \n"
        "addl %%ecx , %0        \n"             
        : "=b" (res)      
        : "a"  (data_ASM)
       
        );
          
   cout<< "dijagonala: " << sqrt(res) << "\n";
   
}


int main()
{
    int x , y , width , height;
    cout<< "unesi koordinate gornje lijeve točke(x,y)\n";
    cout<< ", sirinu i visinu pravokutnika\n";       
    cin>> x >> y >> width >> height;
   
    int state;
    cout<< "\nbiraj\n";
    cout<< "3.Opseg pravokutinika\n";
    cout<< "2.Površina pravokutinka\n";
    cout<< "1.Opseg i površina pravokutinika\n";
    cout<< "0.Opseg,površina i duljina dijagonale\n\n\n";
    cin>> state;
    cout<< "\n";
   
    Quad pravokutnik(x , y , width , height);
   
    switch(state)
    {
        case 0:
        {
          pravokutnik.dijagonala(); 
        }
       
        case 1:
        {
            pravokutnik.opseg();
        }
       
        case 2:
        {
            pravokutnik.povrsina();
        }
        break;
       
        case 3:
        {
            pravokutnik.opseg();
        }
        break;      
    }
   
   
      
    return 0;
}

Poruka je uređivana zadnji put čet 28.2.2013 16:55 (nik_02).
15 godina
neaktivan
offline
Re: C++ zadatak, pomoć
nik_02 kaže...
...

AT&T sintaksa, fuj.

 

Ali ideja ti je {#}{#}

0xBADC0DE
16 godina
neaktivan
offline
Re: C++ zadatak, pomoć
rustweaver kaže...
nik_02 kaže...
...

AT&T sintaksa, fuj.

 

Ali ideja ti je {#}{#}

 

 

 

 

Ma da ti pravo velim , u početku je i meni bila ajme.Kasnije se čovjek navikne i sad mi je ugodnija od intelove.

Čisti asm AT&T ima formu %eax dok inline verzija u C , C++ ima još % ispred jer kompajler parsa __asm__ nešto

kao printf( "danas je %d  dan , 5); tako da nakraju priče imaš (%%eax.....).

Dosta komentara , textova , mišljenja itd... sam pročitao o uporabi assembly-a danas i ima li smisla.

Otvori samo stackOwerflow ili neki relevntan site gdje možeš pročitati razmišljanja velikih (znači zaposlenici microsofta,

google-a ....). Uglavnom , današnje mrcine od cpu-a objezbjeđuju rad apsolutno da jednu liniju asm koda ne treba znati.

Izuzetak su driver , embeded sistemi , kernel + optimizacije kod AAA projekata.

Kod jedne stvari nema spora , on daje najjači uvid kako doista mašina radi tako da je i rad u c , c++ daleko jasniji poznavajući

bar osnove asm-a.

Zapravo sad kad ovo pišem pada mi na pamet jedan komentar koji sam svojedobno pročitao "što idemo dalje , programiranje

se pripližava skriptiranju".

Znači imamo situaciju sve bliže gdje netko kuca u nekom high-levelu

begin CODE

{

 /*puno sam iskarikirao i pojjjednosstavnio*/

 GUI.nacrtajMapuZagreba: nekBudeŠtoLjepša() 

 i_da_dodajItaliju()

}

end CODE

 

A ne znam šta da mislim o tome , nevojbeno je da takav rad donosi rapidno razvijanje aplikaija uz cijenu da sve manje 

korisnika high_levela zna poneštoo pozadini cijle priče.

Znači imamo RapidDevelopment i to je ok ali u tom si slučaju zaista codeMonkey iništa drugo.

Dosta radimu Qt-u , tamo sve više iviše guraju QML (qt meta language).

To je skriptni jezik Qt-a gdje je mišanca javaScripta i ostalih light stvari.

Između ostalog , u projektu o kojem sam pisao prije neko vrijeme(SMASH) , odradio sam menu igre u qml-u.

Za tako nešto je sjajan.Ostatak(sama igra) je čisti C++i daleko mi je draže bilo pisati c++ nego skriptirati qml.

Ali jbga , ide sve na olakšanje pa tako evo i Qt gura Qml (vidi youTube za prezentaciju).

Jedno je sigurno , nemaš kontrolu nad aplikacijom kroz skriptu niti približnokao kroz hardCoding , to je istina.

Btw , SMASH sam objavio na googlePlayu i isti dan morao povući jer zadnji necessitas(qt port na android) kroz

QtCreator radio neki problem sa signingom app-a.

Znana je to situacija od kad je java išla s 1.6 na 1.7 tako da još čekam odgovore nekih ljudi pa ako se ne nađe rješenje

kroz necessitasQT , odradit ću sam manualno s java toolsom.

Back on topic: Bjarne Stroustrup je dugo radio u AT&T tako da nemože biti baš tako fuj {#}{#}{#}.

 

 

Poruka je uređivana zadnji put čet 28.2.2013 21:17 (nik_02).
15 godina
neaktivan
offline
Re: C++ zadatak, pomoć
nik_02 kaže...
...

Ma slažem se ja s tobom, i ja volim proučavati kako stvari funkcioniraju na nižoj razini. Lakše shvaćam stvari kada mi je jasno što se zbilja događa "iznutra". I tu ne mislim samo na programiranje...

 

Samo sam prokomentirao AT&T sintaksu, zaboravim koliko mi je strana dok ju svako toliko ne vidim negdje :D

0xBADC0DE
12 godina
offline
C++ zadatak, pomoć

Hvala svima na pomoći uspio sam napravit zadatak :D

bio je problem u jednoj } :)

 
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice