[Pascal] Program obliczający pole trapezu i objetość kuli

Vertisan
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 20 lis 2012, o 17:53
Płeć: Mężczyzna

[Pascal] Program obliczający pole trapezu i objetość kuli

Post autor: Vertisan »

Witam! Mam następujący problem.
Dostałem zadanie z informatyki a konkretnie z programowania. Otóż mam napisać program, w którym jednocześnie będzie obliczane pole trapezu oraz objętość kuli. Ma to polegać na tym, że na samym początku są 2 opcje do wyboru i uzytkownik sobie wybiera co chce liczyć. Napisałem ten program ale gdzieś mam błąd:

1: Objętość kuli - oblicza bez problemu (pobiera promień, stosuje się do wzoru i wyświetla wynik)
2: Pole trapezu - tutaj jest następujący problem. Otóż na samym początku gdzie wybieramy co chcemy liczyć, klikam 2 i program nie przechodzi do pobierania danych tylko stoi w miejscu(cały czas pracuje).

Niżej zamieszczam kod całego programu:
(pracuje w Console Application, w Borland Delphi 7, stąd te {$APPTYPE CONSOLE} )

Kod: Zaznacz cały

program PtVk;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  a,b,h,r,wybor :real;

const
  pi=3.14;

begin

        writeln('Wybierz program:');
        writeln('1: Objetosc kuli');
        writeln('2: Pole trapezu');
        write('=> ');
        readln(wybor);

  if (wybor=1)
                then
                      writeln('Podaj wartosc promienia: ');
                      readln(r);

                    if (r>0)
                    then  writeln('Objetosc kuli (V) wynosi: ',4/3*r*r*r*pi:5:2)
                    else  writeln('Bledne dane!');

  if (wybor=2)
                then
                    if (a>0)
                    then  if (b>0)
                          then  if (h>0)
                                then writeln('Pole trapezu (P) wynosi: ',(a+b)/2*h:5:2)
                    else  writeln('Bledne dane!')

  else
        writeln('Nie ma takiej opcji!');



readln;
end.
Z góry dziekuje za pomoc. :wink:
Ostatnio zmieniony 20 lis 2012, o 21:11 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
kambyc
Użytkownik
Użytkownik
Posty: 14
Rejestracja: 7 lis 2012, o 21:38
Płeć: Mężczyzna
Lokalizacja: Poznań
Pomógł: 3 razy

[Pascal] Program obliczający pole trapezu i objetość kuli

Post autor: kambyc »

W linii 33 sprawdza czy a>0
program widzi, że nie i czeka
zapomniałeś zadać pytanie o a, b, h
po linii 31 powinno być coś takiego jak w linii 24


pozdrawiam

Kamil
Vertisan
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 20 lis 2012, o 17:53
Płeć: Mężczyzna

[Pascal] Program obliczający pole trapezu i objetość kuli

Post autor: Vertisan »

Troszke zmieniłem strukture ale teraz nie chce mi go skompilować i wyświetla błąd przy "b" a jak go nie ma to przy "h" a jak nie ma obu to mi go uruchamia normalnie:

Kod: Zaznacz cały

(34/35)Missing operator or semicolon.
Teraz wygląda to tak:

Kod: Zaznacz cały

 if (wybor=2)
                then
                    if (a>0)
                            (b>0)
                         (h>0)
                                then writeln('Pole trapezu (P) wynosi: ',(a+b)/2*h:5:2)
                    else  writeln('Bledne dane!')
kambyc
Użytkownik
Użytkownik
Posty: 14
Rejestracja: 7 lis 2012, o 21:38
Płeć: Mężczyzna
Lokalizacja: Poznań
Pomógł: 3 razy

[Pascal] Program obliczający pole trapezu i objetość kuli

Post autor: kambyc »

Kod: Zaznacz cały

 if (wybor=2)
                then
                      writeln('Podaj podstawę a: ');
                      readln(a);
                      writeln('Podaj podstawę b: ');
                      readln(b);
                      writeln('Podaj wysokość: ');
                      readln(h);
if (a>0)
                    then  if (b>0)
                          then  if (h>0)
                                then writeln('Pole trapezu (P) wynosi: ',(a+b)/2*h:5:2)
                    else  writeln('Bledne dane!')
o to mi chodziło, choć prawdziwy programista to wyśmieje :roll:

Kamil
Vertisan
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 20 lis 2012, o 17:53
Płeć: Mężczyzna

[Pascal] Program obliczający pole trapezu i objetość kuli

Post autor: Vertisan »

Nadal jest ten sam błąd. Jakieś inne pomysły?
pawel_wr
Użytkownik
Użytkownik
Posty: 22
Rejestracja: 25 paź 2012, o 04:00
Płeć: Mężczyzna
Lokalizacja: wroclaw
Pomógł: 3 razy

[Pascal] Program obliczający pole trapezu i objetość kuli

Post autor: pawel_wr »

W ostatnio zamieszczonym poście jest błąd składniowy :
w linii 3 , po then ma być
begin
oraz end w linii 9 , przed if , .



U mnie fragment programu działa bezbłędnie

Kod: Zaznacz cały




   if ( a>0 ) then
       if ( b>0 ) then
          if ( h>0 ) then
              writeln('Pole trapezu ', (a+b)/2*h:5:2)
              else writeln('zle dane');



Vertisan
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 20 lis 2012, o 17:53
Płeć: Mężczyzna

[Pascal] Program obliczający pole trapezu i objetość kuli

Post autor: Vertisan »

W tej chwili program wygląda tak:

Kod: Zaznacz cały

program PtVk;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  a,b,h,r,wybor :real;

const
  pi=3.14;

begin

        writeln('Wybierz program:');
        writeln('1: Objetosc kuli');
        writeln('2: Pole trapezu');
        write('=> ');
        readln(wybor);

  if (wybor=1)
                then
                      writeln('Podaj wartosc promienia: ');
                      readln(r);

                    if (r>0)
                    then  writeln('Objetosc kuli (V) wynosi: ',4/3*r*r*r*pi:5:2)
                    else  writeln('Bledne dane!');

  if (wybor=2)
                then
                      begin
                      writeln('Podaj dlugosc 1 podstawy: ');
                      readln(a);

                      writeln('Podaj dlugosc 2 podstawy: ');
                      readln(b);

                      writeln('Podaj wysokosc: ');
                      readln(h);
                      end;

    if ( a>0 ) then
       if ( b>0 ) then
          if ( h>0 ) then
              writeln('Pole trapezu ', (a+b)/2*h:5:2)
              else writeln('zle dane')


  else
        writeln('Nie ma takiej opcji!');



readln;
end.
Jednak nadal jest błąd:

Kod: Zaznacz cały

[Warning]PtVk.dpr(44): Variable 'a'might not have been initialized.
[Warning]PtVk.dpr(45): Variable 'b'might not have been initialized.
[Warning]PtVk.dpr(46): Variable 'h'might not have been initialized.
kambyc
Użytkownik
Użytkownik
Posty: 14
Rejestracja: 7 lis 2012, o 21:38
Płeć: Mężczyzna
Lokalizacja: Poznań
Pomógł: 3 razy

[Pascal] Program obliczający pole trapezu i objetość kuli

Post autor: kambyc »

usuń "begin" w linii 33
pawel_wr
Użytkownik
Użytkownik
Posty: 22
Rejestracja: 25 paź 2012, o 04:00
Płeć: Mężczyzna
Lokalizacja: wroclaw
Pomógł: 3 razy

[Pascal] Program obliczający pole trapezu i objetość kuli

Post autor: pawel_wr »

kambyc pisze:usuń "begin" w linii 33
A w jakim celu ?!?!?!
royas
Użytkownik
Użytkownik
Posty: 363
Rejestracja: 24 sie 2012, o 09:27
Płeć: Mężczyzna
Lokalizacja: Cieszyn
Pomógł: 80 razy

[Pascal] Program obliczający pole trapezu i objetość kuli

Post autor: royas »

Problem w tym, że obliczanie trapezu jest już po if wybor=2 i wykonuje się zawsze, niezależnie od wartości zmiennej wybor. Natomisat wspomniane zmienne dostają swoje wartości jedynie gdy wybor=2. Kompilator to wykrywa i ostrzega przed tym.

Aby to naprawić musisz zawrzeć cały kod pobierania danych i obliczania dla danej figury pod odpowiednim if'em. Dla kuli też masz źle bo "pod if'em" jest jedynie writeln.

Wizualną pomocą może być poprawne i konsekwentne stosowanie wcięć. Popatrz na kilka przykładów.
Vertisan
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 20 lis 2012, o 17:53
Płeć: Mężczyzna

[Pascal] Program obliczający pole trapezu i objetość kuli

Post autor: Vertisan »

Już sam rozwiązałem problem, musiałem zrobić instrukcje w instrukcji

Do zamknięcia.
ODPOWIEDZ