Problemy i ich rozwiązania w C++.
kunegundek
Początkujący
Posty: 23 Dołączył(a): poniedziałek, 18 czerwca 2012, 22:16
Lokalizacja: Nasale (Opolskie)
Post
przez kunegundek » wtorek, 28 maja 2013, 22:45
Cześć! Mam do Was proźbę otóż pisze program "pitagoras" który liczy przyprostokątną/przeciwprostokątną i następnie rysuje trójkąt prostokątny o bokach takich jakie podaliśmy (no i oczywiście jaki obliczył
) Pytanie moje jest takie: Czy możecie mi nakreślić mniejwięcej jak powinno wyglądać rysowanie trójkąta, ponieważ ja napisałem, ale to niestety źle działa
. NIE CHODZI MI OCZYWIŚCIE O KOD! Ja po prostu chciałbym abyście mi pomogli wymyślić sposób działania
.
A oto dotychczasowy kod (kod zawiera wiele "śmieci" tzn. są tam w komentarzach jakieś moje testy itp. ;]):
Code: Zaznacz cały
#include <iostream>
#include "stdlib.h"
#include "math.h"
using namespace std;
float a;
float b;
float c;
short jednostka;
const char sharp = '#';
int obliczPrzeciwprostokatna();
int obliczPrzyprostokatna(short);
void draw();
void drawSideB();
void drawSideA();
void drawSideC();
int main()
{
short select;
bool yes = false;
cout << "Witaj w programie 'Pitagoras'. Co bedziesz chcial obliczyc ?" << endl;
cout << "1. Przypostokatna (podstawa) [wpisz 1]" << endl;
cout << "2. Przyprostokatna (bok) [wpisz 2]" << endl;
cout << "3. Przeciwprostokatna [wpisz 3]" << endl;
cin >> select;
do{
if(select == 3)
{
obliczPrzeciwprostokatna();
yes = true;
}
else if (select == 1 || select == 2)
{
obliczPrzyprostokatna(select);
yes = true;
}
else
{
system("cls");
cout << "Sprobuj jeszcze raz :)" << endl;
cout << "1. Przypostokatna (podstawa) [wpisz 1]" << endl;
cout << "2. Przyprostokatna (bok) [wpisz 2]" << endl;
cout << "3. Przeciwprostokatna [wpisz 3]" << endl;
cin >> select;
}
}while(!(yes));
cout << endl << endl;
system("pause");
return 0;
}
//Function oblicz przeciwprostokatna
int obliczPrzeciwprostokatna()
{
system("cls");
cout << "Podaj podstawe (a)";
cin >> a;
cout << endl;
cout << "Podaj bok (b)";
cin >> b;
cout << endl;
float tmp;
tmp = a * a + b * b;
c = sqrt(tmp);
int rC = (int)c;
float pole = a * b / 2;
cout << "Przeciwprostokatna to: " << c << endl;
cout << "Pole tego trojkata to: " << pole << endl;
cout << "Teraz podaj jednostke (np. ile # ma sie skladac na cm): ";
cin >> jednostka;
cin.ignore();
draw();
}
//Function oblicz przyprostokatna
int obliczPrzyprostokatna(short select)
{
system("cls");
if(select == 1)
{
cout << "Podaj bok (b)";
cin >> b;
cout << endl;
cout << "Podaj przeciwprostokatna (c)";
cin >> c;
cout << endl;
float tmp;
if (b < c)
tmp = c * c - b * b;
else
tmp = b * b - c * c;
a = sqrt(tmp);
cout << "Przyprostokatna tego trojkata to: " << a << endl;
}
else
{
system("cls");
cout << "Podaj podstawe (a)";
cin >> a;
cout << endl;
cout << "Podaj przeciwprostokatna (c)";
cin >> c;
cout << endl;
float tmp;
if (a < c)
tmp = c * c - a * a;
else
tmp = a * a - c * c;
b = sqrt(tmp);
cout << "Przyprostokatna tego trojkata to: " << b << endl;
}
float pole = a * b / 2;
cout << "Pole tego trojkata to: " << pole << endl;
cout << "Teraz podaj jednostke (np. ile # ma sie skladac na cm): ";
cin >> jednostka;
cin.ignore();
draw();
}
//Function draw
void draw()
{
int ileA = jednostka * a;
int ileB = jednostka * b;
int ileC = jednostka * c;
const char space = 32;
for (int i = 0; i < ileB; i++)
{
cout << sharp;
//if(i != 0 || i != 1)
for (int j = 0; j < i; j++)
cout << space;
if (i == 0)
cout << endl;
else
cout << sharp << endl;
}
for(int j = 0; j <= ileA-1; j++)
cout << sharp;
/*drawSideB();
drawSideA();
drawSideC();
*/
}
//Function drawSideA
/*
void drawSideA()
{
int ile = jednostka * a;
for (int i = 0; i < ile; i++)
cout << sharp;
}
//Function drawSideB
void drawSideB()
{
int ile = jednostka * b;
for(int i = 0; i < ile-1; i++)
{
cout << sharp << endl;
}
}
//Function drawSideC
void drawSideC()
{
int ile = jednostka * c;
char space = 32;
for(int i = 0; i < ile-1; i++)
{
for (int j = 0; j < i; j++)
cout << space;
cout << sharp << endl;
}
}
*/
Morfidon
Administrator
Posty: 1332 Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:
Post
przez Morfidon » środa, 29 maja 2013, 11:18
kunegundek
Początkujący
Posty: 23 Dołączył(a): poniedziałek, 18 czerwca 2012, 22:16
Lokalizacja: Nasale (Opolskie)
Post
przez kunegundek » środa, 29 maja 2013, 14:46
Hmm no dzięki
Tak więc biorę się do roboty :-)
kunegundek
Początkujący
Posty: 23 Dołączył(a): poniedziałek, 18 czerwca 2012, 22:16
Lokalizacja: Nasale (Opolskie)
Post
przez kunegundek » poniedziałek, 3 czerwca 2013, 21:16
Hmm no dobrze
A mam jeszcze jedno pytanie
Trójkąt się ładnie rysuje i dwa kwadraty też, ale mam problem z napisaniem rysowania 3 kwadratu (tego który powinien się pokrywać z przeciwprostokątną). Możecie napisać mi jaki tok myślenie powinienem mieć przy rozwiązaniu tego problemu? Ja wymyśliłem kilka sposobów, ale niestety to się źle rysowało (wszystko się rozsypywało
).
A oto dotychczasowy kod programu:
Code: Zaznacz cały
#include <iostream>
#include "stdlib.h"
#include "math.h"
using namespace std;
float a;
float b;
float c;
float pole;
short jednostka;
const char sharp = '#';
int obliczPrzeciwprostokatna();
int obliczPrzyprostokatna(short);
void draw();
int main()
{
short select;
bool yes = false;
bool wyk = true;
bool good = false;
char torn;
cout << "Witaj w programie 'Pitagoras'.";
do{
cout << "Co bedziesz chcial obliczyc ?" << endl;
cout << "1. Przypostokatna (podstawa) [wpisz 1]" << endl;
cout << "2. Przyprostokatna (bok) [wpisz 2]" << endl;
cout << "3. Przeciwprostokatna [wpisz 3]" << endl;
cin >> select;
do{
if(select == 3)
{
obliczPrzeciwprostokatna();
yes = true;
}
else if (select == 1 || select == 2)
{
obliczPrzyprostokatna(select);
yes = true;
}
else
{
system("cls");
cout << "Sprobuj jeszcze raz :)" << endl;
cout << "1. Przypostokatna (podstawa) [wpisz 1]" << endl;
cout << "2. Przyprostokatna (bok) [wpisz 2]" << endl;
cout << "3. Przeciwprostokatna [wpisz 3]" << endl;
cin >> select;
}
}while(!(yes));
cout << "Czy chcesz kontynuowac wykonywanie programu? [T/N]";
do{
cin >> torn;
cin.ignore();
system("cls");
if (torn == 't' || torn == 'T')
{
wyk = true;
good = true;
}
else if (torn == 'n' || torn == 'N')
{
wyk = false;
good = true;
}
else
{
good = false;
cout << "Zly znak! podaj go jeszcze raz!";
}
}while(!(good));
}while(wyk);
cout << endl << endl;
return 0;
}
//Function oblicz przeciwprostokatna
int obliczPrzeciwprostokatna()
{
system("cls");
cout << "Podaj podstawe (a)";
cin >> a;
cout << endl;
cout << "Podaj bok (b)";
cin >> b;
cout << endl;
float tmp;
tmp = a * a + b * b;
c = sqrt(tmp);
int rC = (int)c;
pole = a * b / 2;
cout << "Przeciwprostokatna to: " << c << endl;
cout << "Pole tego trojkata to: " << pole << endl;
cout << "Teraz podaj jednostke (np. ile * ma sie skladac na cm): ";
cin >> jednostka;
cin.ignore();
draw();
}
//Function oblicz przyprostokatna
int obliczPrzyprostokatna(short select)
{
system("cls");
if(select == 1)
{
cout << "Podaj bok (b)";
cin >> b;
cout << endl;
cout << "Podaj przeciwprostokatna (c)";
cin >> c;
cout << endl;
float tmp;
if (b < c)
tmp = c * c - b * b;
else
tmp = b * b - c * c;
a = sqrt(tmp);
cout << "Przyprostokatna tego trojkata to: " << a << endl;
}
else
{
system("cls");
cout << "Podaj podstawe (a)";
cin >> a;
cout << endl;
cout << "Podaj przeciwprostokatna (c)";
cin >> c;
cout << endl;
float tmp;
if (a < c)
tmp = c * c - a * a;
else
tmp = a * a - c * c;
b = sqrt(tmp);
cout << "Przyprostokatna tego trojkata to: " << b << endl;
}
pole = a * b / 2;
cout << "Pole tego trojkata to: " << pole << endl;
cout << "Teraz podaj jednostke (np. ile * ma sie skladac na cm): ";
cin >> jednostka;
cin.ignore();
draw();
}
//Function draw
void draw()
{
system("cls");
cout << "Trojkat o podanych bokach wyglada nastepujaco: " << endl << endl;
int length = 1;
int rows = jednostka * b;
float poleKw = pole;
float sciana = sqrt(poleKw);
cout << "Kwadrat o tym samym polu co trojkat ma bok dlugosci " << sciana << endl << endl << endl;
for (int i = 0; i < rows; i++)
{
//draw quad
for (int n = 0; n < rows; n++)
{
cout << "#";
}
//draw triangle
for (int j = 0; j < length; j++)
{
cout << "*";
}
cout << endl;
length++;
}
const char space = 32;
int tmp = length;
//draw quad
for (int i = 0; i < rows; i++)
{
for (int f = 0; f < tmp-1; f++)
{
cout << space;
}
for(int j = 0; j < length; j++)
{
cout << "#";
}
cout << endl;
}
}