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)
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)
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?
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
Uspio sam napravit ali mi baca errore dok kompajliram I nemogu skužit koji su:
piše break statement not within loop or switch
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?
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___
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.
#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;
}
AT&T sintaksa, fuj.
Ali ideja ti je 

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 

.
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
Hvala svima na pomoći uspio sam napravit zadatak :D
bio je problem u jednoj } :)