Problem z wymyśleniem sposobu.

Problemy i ich rozwiązania w C++.

Problem z wymyśleniem sposobu.

Postprzez 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. ;]):

Kod: 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: 22
Dołączył(a): poniedziałek, 18 czerwca 2012, 22:16
Lokalizacja: Nasale (Opolskie)

Re: Problem z wymyśleniem sposobu.

Postprzez Morfidon » środa, 29 maja 2013, 11:18

Morfidon
Administrator
Administrator
 
Posty: 1327
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48

Re: Problem z wymyśleniem sposobu.

Postprzez kunegundek » środa, 29 maja 2013, 14:46

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

Re: Problem z wymyśleniem sposobu.

Postprzez 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:

Kod: 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;
      
   }         
}
kunegundek
Początkujący
Początkujący
 
Posty: 22
Dołączył(a): poniedziałek, 18 czerwca 2012, 22:16
Lokalizacja: Nasale (Opolskie)


Powrót do C++

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość

cron