Problem z wymyśleniem sposobu.

Problemy i ich rozwiązania w C++.
kunegundek
Początkujący
Początkujący
Posty: 23
Dołączył(a): poniedziałek, 18 czerwca 2012, 22:16
Lokalizacja: Nasale (Opolskie)

Problem z wymyśleniem sposobu.

Post przez kunegundek »

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;
		
	}
	
}

*/
kunegundek
Początkujący
Początkujący
Posty: 23
Dołączył(a): poniedziałek, 18 czerwca 2012, 22:16
Lokalizacja: Nasale (Opolskie)

Re: Problem z wymyśleniem sposobu.

Post przez kunegundek »

Hmm no dzięki :) Tak więc biorę się do roboty :-)
kunegundek
Początkujący
Początkujący
Posty: 23
Dołączył(a): poniedziałek, 18 czerwca 2012, 22:16
Lokalizacja: Nasale (Opolskie)

Re: Problem z wymyśleniem sposobu.

Post przez kunegundek »

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;
		
	}			
}
Post Reply