Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Borland c++ 6.0] Dodawanie możliwości wyboru

Fellert 15 Gru 2010 14:49 1185 8
  • #1 15 Gru 2010 14:49
    Fellert
    Poziom 10  

    Witam mam napisane parę programików obliczających pole całkowite kilku brył geometrycznych - ich pola oraz objętości w kilku programach.
    Chciałbym to wrzucić wszystko w 1 tak aby użytkownik sam decydował pole i objętość jakiej bryły chce obliczyć podając liczbę i potwierdzając ją Enterem. tj.
    główne okno wyświetla opcje np.
    1. Kula
    2. Stożek
    użytkownik wybiera sobie np 1 zatwierdza to enterem i przenoszony jest do kolejnego okna gdzie może wpisać dane w odpowiednich polach czyli np r albo h albo długość krawędzi ewentualnie gdy dokona złęgo wybory np wpisze inną cyfrę lub literę program wyrzuca błąd że to zły wybór.
    A po obliczeniu program zapyta go czy chce coś jeszcze policzyć jeżeli odpowie twierdząco np T to wraca na początek jeżeli n to kończy zadanie.



    w załączniku dołączam kod od 2 programów obliczających min walec i 4scian


    Code:
    //---------------------------------------------------------------------------
    

    #include <vcl.h>
    #include <conio.h>
    #include <stdio.h>
    #include <math.h>
    #pragma hdrstop
    #define PI 3.14

    //---------------------------------------------------------------------------

    #pragma argsused
    void main(int argc, char* argv[])
    {
     float Pc,r,h,v;
     textbackground (LIGHTGRAY);
         clrscr();
         window(20,5,60,20);
        textbackground (RED);
        clrscr();
        gotoxy (5,2);
        textcolor(YELLOW);
        cprintf("Parametry walca : ") ;
        gotoxy (5,4);
        textcolor(WHITE);
        cprintf("Podaj wysokosc walca : ") ;
        gotoxy(wherex()+6,4);
         textbackground (WHITE);
             cprintf("     ") ;
    gotoxy(wherex()-4,4);
          textcolor(BLACK);
          scanf("%f",&h);

          gotoxy(5,6) ;
          textbackground (RED)   ;
          textcolor(WHITE);
              cprintf("Podaj promien podstawy : ") ;
        gotoxy(wherex()+4,6);
         textbackground (WHITE);
             cprintf("     ") ;
    gotoxy(wherex()-4,6);
          textcolor(BLACK);
          scanf("%f",&r);






    v = (PI*r*r*h) ;
    Pc = (2*PI*r*(r+h)) ;
           gotoxy(5,9) ;
          textbackground (RED)   ;
          textcolor(WHITE);
          cprintf( "Wyniki: ") ;
          gotoxy (5,12)  ;
          cprintf( "Objetosc:       %7.3f ",v) ;
          gotoxy (5,13)  ;
          cprintf( "Pole calkowite: %7.3f ",Pc) ;
          gotoxy (5,14)  ;

                                       //wyswietlanie wynikow
     getchar(); getchar();
     }


    //---------------------------------------------------------------------------



    Code:
    //---------------------------------------------------------------------------
    

    #include <vcl.h>
    #include <conio.h>
    #include <stdio.h>
    #include <math.h>
    #pragma hdrstop
    #define pz3 1.732
    #define pz2 1.414

    //---------------------------------------------------------------------------

    #pragma argsused
    void main(int argc, char* argv[])
    {
     float Pc,a,v;
     textbackground (LIGHTGRAY);
         clrscr();
         window(20,5,60,20);
        textbackground (RED);
        clrscr();
        gotoxy (5,2);
        textcolor(YELLOW);
        cprintf("Parametry czworoscianu : ") ;
        gotoxy (5,4);
        textcolor(WHITE);
        cprintf("Podaj dlugosc boku a : ") ;
        gotoxy(wherex()+4,4);
         textbackground (WHITE);
             cprintf("     ") ;
    gotoxy(wherex()-4,4);
          textcolor(BLACK);
          scanf("%f",&a);


    v = ((a*a*a*pz2)/12) ;
    Pc = (a*a*pz3) ;
           gotoxy(5,9) ;
          textbackground (RED)   ;
          textcolor(WHITE);
          cprintf( "Wyniki: ") ;
          gotoxy (5,12)  ;
          cprintf( "Objetosc:       %7.3f ",v) ;
          gotoxy (5,13)  ;
          cprintf( "Pole calkowite: %7.3f ",Pc) ;
          gotoxy (5,14)  ;

                                       //wyswietlanie wynikow
     getchar(); getchar();
     }


    //---------------------------------------------------------------------------


    0 8
  • #2 15 Gru 2010 15:10
    przemo_wielki
    Poziom 23  

    Skoro potrafisz napisać osobno to jak możesz mieć problem aby je połączyć?

    0
  • #3 15 Gru 2010 15:13
    Fellert
    Poziom 10  

    Właśnie oto chodzi że takie proste to nie jest nie potrafię napisać instrukcji wyboru nie wiem jak to się za bardzo robi w aplikacji konsolowej próbowałem z if ale coś mi nie wychodzi. Programik podobny pisaliśmy na zajęciach i na jego podstawie napisałem sobie resztę.

    0
  • Pomocny post
    #4 15 Gru 2010 15:31
    przemo_wielki
    Poziom 23  

    Najpierw przerób te programy tak żeby pole i objętość to były metody (funkcje), poźniej zapoznaj się z instrukcją if ewentualnie switch, oraz pętlą while. Wszystko jest w internecie, pokombinuj wstaw i dalej się zobaczy.

    //ewentualnie możesz zrezygnować z funkcji bo programy są banalne ale polecam je przećwiczyć, nabierzesz dobrych nawyków oraz zapoznasz się lepiej z językiem.

    0
  • #5 15 Gru 2010 18:01
    Fellert
    Poziom 10  

    Ok ogarnąłem temat ze switchem jednak i działa perfecto przemo_wielki miałeś racje wystarczyło pogłówkować jednak trochę i działa jednak jest pewien feller(t) a nawet 2
    Po odpaleniu program chciałbym aby kursor ustawiał się za zdaniem
    Podaj jaka bryle chcesz obliczyc a pod spodem wyświetlone zostały dostępne opcje jakie użytkownik może wybrać no.
    1. 8scian
    2. prostopadłościan
    3. sześcian

    ewentualnie może on być na końcu.
    udało mi się nawet to zrobic jednak kursor jest a nie wyświetlają mi się dostępne opcje .

    2 sprawa to opcja powrotu do okna głównego czyli na początek programu po obliczeniu danej bryły żeby np po wciśnięciu jakiegoś przycisku program się zamykał po wciśnieciu spacji a po wciśnięciu entera wracał do początku


    Code:
    //---------------------------------------------------------------------------
    
    #include <iostream>
    #include <vcl.h>
    #include <conio.h>
    #include <stdio.h>
    #include <math.h>
    #pragma hdrstop
    #define pz3 1.732
    #define pz2 1.414

    //---------------------------------------------------------------------------

    #pragma argsused
    void main(int argc, char* argv[])
    {
    poczatek:
    int liczba,zn;
               textbackground (LIGHTGRAY);
         clrscr();
         window(20,5,60,20);
        textbackground (RED);
        clrscr();
        gotoxy (3,2);

        textcolor(YELLOW);

        cprintf("Podaj jaka bryle chcesz obliczyc: ") ;


                  cin >> liczba;

      cout << endl;

        gotoxy (5,4);

        textcolor(WHITE);
        cprintf("2.8scian : ") ;
        gotoxy(wherex()+4,4);
         textbackground (WHITE);

    gotoxy(wherex()-4,4);
          textcolor(BLACK);
        gotoxy (62,2);








      switch(liczba)
      {
      case 1:;
       float Pc,a,b,c,v;
     textbackground (LIGHTGRAY);
         clrscr();
         window(20,5,60,20);
        textbackground (RED);
        clrscr();
        gotoxy (5,2);
        textcolor(YELLOW);
        cprintf("Parametry prostopadloscianu : ") ;
        gotoxy (5,4);
        textcolor(WHITE);
        cprintf("Podaj dlugosc boku a : ") ;
        gotoxy(wherex()+4,4);
         textbackground (WHITE);
             cprintf("     ") ;
    gotoxy(wherex()-4,4);
          textcolor(BLACK);
          scanf("%f",&a);

          gotoxy(5,6) ;
          textbackground (RED)   ;
          textcolor(WHITE);
              cprintf("Podaj dlugosc boku b : ") ;
        gotoxy(wherex()+4,6);
         textbackground (WHITE);
             cprintf("     ") ;
    gotoxy(wherex()-4,6);
          textcolor(BLACK);
          scanf("%f",&b);

                gotoxy(5,8) ;
          textbackground (RED)   ;
          textcolor(WHITE);
              cprintf("Podaj dlugosc boku c: ") ;
        gotoxy(wherex()+5,8);
         textbackground (WHITE);
             cprintf("     ") ;
    gotoxy(wherex()-4,8);
          textcolor(BLACK);
          scanf("%f",&c);
    v = (a*b*c) ;
    Pc = (2*a*b+2*b*c+2*a*c) ;
           gotoxy(5,10) ;
          textbackground (RED)   ;
          textcolor(WHITE);
          cprintf( "Wyniki: ") ;
          gotoxy (5,12)  ;
          cprintf( "Objetosc:       %7.3f ",v) ;
          gotoxy (5,13)  ;
          cprintf( "Pole calkowite: %7.3f ",Pc) ;
          gotoxy (5,14)  ;
          getchar(); getchar() ;

             goto poczatek ;
               break;
     case 2:;
    float Pc1,a1,v1;
     textbackground (LIGHTGRAY);
         clrscr();
         window(20,5,60,20);
        textbackground (RED);
        clrscr();
        gotoxy (5,2);
        textcolor(YELLOW);
        cprintf("Parametry 8scianu : ") ;
        gotoxy (5,4);
        textcolor(WHITE);
        cprintf("Podaj dlugosc boku a : ") ;
        gotoxy(wherex()+4,4);
         textbackground (WHITE);
             cprintf("     ") ;
    gotoxy(wherex()-4,4);
          textcolor(BLACK);
          scanf("%f",&a1);


    v1 = ((a1*a1*a1*pz2)/3) ;
    Pc1 = (2*a1*a1*pz3) ;
           gotoxy(5,9) ;
          textbackground (RED)   ;
          textcolor(WHITE);
          cprintf( "Wyniki: ") ;
          gotoxy (5,12)  ;
          cprintf( "Objetosc:       %7.3f ",v1) ;
          gotoxy (5,13)  ;
          cprintf( "Pole calkowite: %7.3f ",Pc1) ;
          gotoxy (5,14)  ;

                                       //wyswietlanie wynikow
    cout << endl;
     getchar(); getchar();
     goto poczatek ;
     break;


     case 3:;
     float Pc2,a2,v2;
     textbackground (LIGHTGRAY);
         clrscr();
         window(20,5,60,20);
        textbackground (RED);
        clrscr();
        gotoxy (5,2);
        textcolor(YELLOW);
        cprintf("Parametry szescianu : ") ;
        gotoxy (5,4);
        textcolor(WHITE);
        cprintf("Podaj dlugosc boku a : ") ;
        gotoxy(wherex()+4,4);
         textbackground (WHITE);
             cprintf("     ") ;
    gotoxy(wherex()-4,4);
          textcolor(BLACK);
          scanf("%f",&a2);


    v2 = (a2*a2*a2) ;
    Pc2 = (6*a2*a2) ;
           gotoxy(5,9) ;
          textbackground (RED)   ;
          textcolor(WHITE);
          cprintf( "Wyniki: ") ;
          gotoxy (5,12)  ;
          cprintf( "Objetosc:       %7.3f ",v2) ;
          gotoxy (5,13)  ;
          cprintf( "Pole calkowite: %7.3f ",Pc2) ;
          gotoxy (5,14)  ;

                                       //wyswietlanie wynikow
     getchar(); getchar();
     goto poczatek ;
     break;
     }

        }
    //---------------------------------------------------------------------------



    0
  • #6 15 Gru 2010 19:54
    przemo_wielki
    Poziom 23  

    Musisz się pobawić gotoxy(kolumna,wiersz), przy czym wiersz ustawiasz na 1, a długość napisu początkowego np. char *napis = "Jakis napis"; wykonujesz za pomocą np. gotoxy (strlen(napis)+1,1);

    Co do drugiej opcji to proponuję zapoznać się z metodą getch() oraz kodem ASCII.

    0
  • #7 15 Gru 2010 20:40
    Fellert
    Poziom 10  

    bawiłem sie właśnie tym gotoxy jednak nic to nie dało nie wiem czemu a mógłbyś mi napisać mniej więcej jak by to wyglądało taki wybór t lub n ??

    0
  • Pomocny post
    #8 15 Gru 2010 21:17
    przemo_wielki
    Poziom 23  

    Możesz zrobić coś w tym stylu (kompilowane w dev c++, przerób sobie na borlanda):

    Code:
    #include <stdio.h>
    
    #include <stdlib.h>
    #include <conio.h>
    #define ESC 27
    #define ENT 13

    int main()
    {
       int wybor, klawisz;
       char *tytul= "Podaj jaka bryle chcesz obliczyc: ";
       
       do {
          clrscr();
          printf(tytul); gotoxy (5,4);
          printf("1.Cos1"); gotoxy (5,5);
          printf("2.Cos2"); gotoxy (5,6);
          printf("3.Cos3"); 
          gotoxy (strlen(tytul)+1,1);
          scanf("%d",&wybor); gotoxy (5,7);
          printf("------------\n");
          printf("ESC-wyjdz, ENTER - dalej");
          do{
             klawisz = getch();
          }while ((klawisz!=ESC)&&(klawisz!=ENT));
       }while (klawisz != ESC);

       return 0;
    }

    0
  • #9 15 Gru 2010 21:54
    Fellert
    Poziom 10  

    devem sie nie bawiłem i nie wiem nawet jak to przerobić za bardzo :(
    Rozwiązałem to trochę po linii oporu ale efekt dla mnie jest ok tylko potrzeba mi jeszcze zrobić funkcję zakańczania programu po wciśnięciu ESC ewntualnie w innego klawisza bo powrót zrobiłem c++ nie dev
    W ostateczności pomyślałem żeby dac info żeby zakończyć program naciśnij krzyzyk ale dowolny klawisz aby powrócić do początku ??

    a oto i kod

    Code:
    //---------------------------------------------------------------------------
    
    #include <iostream>
    #include <vcl.h>
    #include <conio.h>
    #include <stdio.h>
    #include <math.h>
    #pragma hdrstop
    #define pz3 1.732
    #define pz2 1.414
    #define ESC 27
    #define ENT 13

    //---------------------------------------------------------------------------

    #pragma argsused
    void main(int argc, char* argv[])
    {


    poczatek:
    int liczba,zn;






               textbackground (LIGHTGRAY);
         clrscr();
         window(20,5,60,20);
        textbackground (RED);
        clrscr();
        gotoxy (3,2);

        textcolor(YELLOW);

        cprintf("Podaj jaka bryle chcesz obliczyc: ") ;


         gotoxy (3,3);
        cprintf("\n1.Prostopadloscian ") ;
        gotoxy (3,4);
        cprintf("\n2.8scian: ") ;
             gotoxy (3,5);
        cprintf("\n3.6scian: ") ;
                    gotoxy (3,9);
        cprintf("\nTwoj wybor zatwierdz ENTEREM: ") ;

             cin >> liczba;

      cout << endl;


        gotoxy (5,4);



    gotoxy(wherex()-4,4);
          textcolor(BLACK);
        gotoxy (62,2);








      switch(liczba)
      {
      case 1:;
       float Pc,a,b,c,v;
     textbackground (LIGHTGRAY);
         clrscr();
         window(20,5,60,20);
        textbackground (RED);
        clrscr();
        gotoxy (5,2);
        textcolor(YELLOW);
        cprintf("Parametry prostopadloscianu : ") ;
        gotoxy (5,4);
        textcolor(WHITE);
        cprintf("Podaj dlugosc boku a : ") ;
        gotoxy(wherex()+4,4);
         textbackground (WHITE);
             cprintf("     ") ;
    gotoxy(wherex()-4,4);
          textcolor(BLACK);
          scanf("%f",&a);

          gotoxy(5,6) ;
          textbackground (RED)   ;
          textcolor(WHITE);
              cprintf("Podaj dlugosc boku b : ") ;
        gotoxy(wherex()+4,6);
         textbackground (WHITE);
             cprintf("     ") ;
    gotoxy(wherex()-4,6);
          textcolor(BLACK);
          scanf("%f",&b);

                gotoxy(5,8) ;
          textbackground (RED)   ;
          textcolor(WHITE);
              cprintf("Podaj dlugosc boku c: ") ;
        gotoxy(wherex()+5,8);
         textbackground (WHITE);
             cprintf("     ") ;
    gotoxy(wherex()-4,8);
          textcolor(BLACK);
          scanf("%f",&c);
    v = (a*b*c) ;
    Pc = (2*a*b+2*b*c+2*a*c) ;
           gotoxy(5,10) ;
          textbackground (RED)   ;
          textcolor(WHITE);
          cprintf( "Wyniki: ") ;
          gotoxy (5,12)  ;
          cprintf( "Objetosc:       %7.3f ",v) ;
          gotoxy (5,13)  ;
          cprintf( "Pole calkowite: %7.3f ",Pc) ;
          gotoxy (5,14)  ;
          getchar(); getchar() ;

             goto poczatek ;
               break;
               
     case 2:;
    float Pc1,a1,v1;
     textbackground (LIGHTGRAY);
         clrscr();
         window(20,5,60,20);
        textbackground (RED);
        clrscr();
        gotoxy (5,2);
        textcolor(YELLOW);
        cprintf("Parametry 8scianu : ") ;
        gotoxy (5,4);
        textcolor(WHITE);
        cprintf("Podaj dlugosc boku a : ") ;
        gotoxy(wherex()+4,4);
         textbackground (WHITE);
             cprintf("     ") ;
    gotoxy(wherex()-4,4);
          textcolor(BLACK);
          scanf("%f",&a1);


    v1 = ((a1*a1*a1*pz2)/3) ;
    Pc1 = (2*a1*a1*pz3) ;
           gotoxy(5,9) ;
          textbackground (RED)   ;
          textcolor(WHITE);
          cprintf( "Wyniki: ") ;
          gotoxy (5,12)  ;
          cprintf( "Objetosc:       %7.3f ",v1) ;
          gotoxy (5,13)  ;
          cprintf( "Pole calkowite: %7.3f ",Pc1) ;
          gotoxy (5,14)  ;

                                       //wyswietlanie wynikow
    cout << endl;
     getchar(); getchar();
     goto poczatek ;
     break;


     case 3:;
     float Pc2,a2,v2,dalej;
     textbackground (LIGHTGRAY);
         clrscr();
         window(20,5,60,20);
        textbackground (RED);
        clrscr();
        gotoxy (5,2);
        textcolor(YELLOW);
        cprintf("Parametry szescianu : ") ;
        gotoxy (5,4);
        textcolor(WHITE);
        cprintf("Podaj dlugosc boku a : ") ;
        gotoxy(wherex()+4,4);
         textbackground (WHITE);
             cprintf("     ") ;
    gotoxy(wherex()-4,4);
          textcolor(BLACK);
          scanf("%f",&a2);


    v2 = (a2*a2*a2) ;
    Pc2 = (6*a2*a2) ;
           gotoxy(5,9) ;
          textbackground (RED)   ;
          textcolor(WHITE);
          cprintf( "Wyniki: ") ;
          gotoxy (5,12)  ;
          cprintf( "Objetosc:       %7.3f ",v2) ;
          gotoxy (5,13)  ;
          cprintf( "Pole calkowite: %7.3f ",Pc2) ;
          gotoxy (5,14)  ;

                                       //wyswietlanie wynikow
     getchar(); getchar();

         getchar(); getchar();
     break;

     default:
      gotoxy(5,9) ;
          textbackground (RED)   ;
          textcolor(WHITE);
       cprintf("Bledny wybor spr raz jeszcze                (Wcisnij dowolny klawisz)  ") ;
         getchar(); getchar();


       goto poczatek;


     }

        }
    //---------------------------------------------------------------------------



    0