Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2012, 21:45   #1
--Sashok--
Пользователь
 
Регистрация: 17.02.2011
Сообщений: 76
Радость fast. одна строчка!

Вот модуль
Код:
unit labka;

interface

type
  TGeomFigure=class (TObject)
        function Plosha: integer; virtual; abstract;
        function Perimetr: integer; virtual; abstract;
        function InputData: boolean; virtual; abstract;
  end;

TSquare=class(TGeomFigure)
        side: integer;
        function Plosha: integer; override;
        function Perimetr: integer; override;
        function InputData: boolean; override;
end;

TTrap=class(TGeomFigure)
        h,side1,side2,side3: integer;
        function Plosha: integer; override;
        function Perimetr: integer; override;
        function InputData: boolean; override;
end;

TRectangle=class(TGeomFigure)
        side1,side2: integer;
        function Plosha: integer; override;
        function Perimetr: integer; override;
        function InputData: boolean; override;
end;

implementation

function TSquare.Plosha: integer;
begin
        Plosha:=side*side;
end;

function TSquare.Perimetr: integer;
begin
        Perimetr:=4*side;
end;

function TSquare.InputData: boolean;
begin
        writeln ('Vvedenna parametriv kvadrata');
        write ('Vvedit ctorony kvadrata: ');
        readln(side);
        if  side<=0 then InputData:=false
                else InputData:=true;
        end;

function TRectangle.Plosha: integer;
begin
         Plosha:=side1*side2;
end;

function TRectangle.Perimetr: integer;
begin
        Perimetr:=(side1+side2)*2;
end;

function TRectangle.InputData: boolean;
begin
        writeln ('Vvedenna parametriv pramokytnuka');
        write ('Vvedit ctorony pramokytnka: ');
        readln(side1,side2);
        if (side1<=0) or (side2<=0) then InputData:=false
                else InputData:=true;
end;

function TTrap.Plosha: integer;
begin
        Plosha:=(side1+side2)*h/2;
end;

function TTrap.Perimetr: integer;
begin
        Perimetr:=side1+side2+2*side3;
end;

function TTrap.InputData: boolean;
begin
        writeln ('Vvedenna parametriv trapeciy');
        write ('Vvedit ctorony trapecii: ');
        readln(side1,side2,side3);
        if (side1<=0) or (side2<=0) or (side3<=0) then InputData:=false
                else InputData:=true;
        end;
end.
Ошибка в нем
Код:
[Error] labka.pas(75): Incompatible types: 'Integer' and 'Extended'
[Fatal Error] laboratorna.dpr(7): Could not compile used unit 'labka.pas'
вот сама программа:

Код:
program laboratorna;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  labka in 'labka.pas';

const n=3;
var
        aFigure: array[1..n] of TGeomFigure;
        sum_plosh,sum_perim: integer;
        i: integer;
        tup: char;

begin
  write ('Zadayte tup figury:   ');
  readln(tup);
  writeln;
  for i:=1 to n do
  case tup of
  'k': aFigure[i] := TSquare.Create;
  't': aFigure[i] := TTrap.Create;
  'p': aFigure[i] := TRectangle.Create
end;

for i:=1 to n do
if not aFigure[i].InputData then
        begin
                write ('Pomulka vvedenna danux ');
                exit;
        end;
sum_plosh:=0; sum_perim:=0;
for i:=1 to n do
        begin
                sum_plosh:=sum_plosh+aFigure[i].Plosha;
                sum_perim:=sum_perim+aFigure[i].Perimetr;
        end;
writeln;
writeln('Cyma plosh =',sum_plosh);
writeln('Cyma perimetriv= ',sum_perim);
readln
end.
ПОМОГИТЕ ПОЖАЛУЙСТА.Никак не могу написать площадь трапеции выбивает ошибку что не совместимый тип интегер.
--Sashok-- вне форума Ответить с цитированием
Старый 27.02.2012, 22:21   #2
Juffin
Форумчянин
Форумчанин
 
Аватар для Juffin
 
Регистрация: 05.04.2009
Сообщений: 446
По умолчанию

Код:
Plosha:=(side1+side2)*h/2;
заменить на
Код:
Plosha:=(side1+side2)*(h div 2);
Nobody expects Spanish Inquisition!
Juffin вне форума Ответить с цитированием
Старый 27.02.2012, 22:28   #3
--Sashok--
Пользователь
 
Регистрация: 17.02.2011
Сообщений: 76
По умолчанию

Цитата:
Сообщение от Juffin Посмотреть сообщение
Код:
Plosha:=(side1+side2)*h/2;
заменить на
Код:
Plosha:=(side1+side2)*(h div 2);
извини конечно но при вводе любых даных сума площадей равняется 0
--Sashok-- вне форума Ответить с цитированием
Старый 27.02.2012, 23:21   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Апы не приветствуются, придет модератор — накажет.

Видимо остались ошибки где-то в другом месте.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 28.02.2012, 01:11   #5
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Plosha у вас типа интеджер, ну и посмотрите, что вы туда записываете :=(side1+side2)*h/2;
Если высота четная, то куда ни шло, а если нечетная, то получается вещественное число. Поэтому и ошибка. Если вам надо целое число, то воспользуйтесь советом Juffin'а. Если не целое, то пусть возвращает не интеджер. Если получается ноль, значит, проверьте в дебаггере, чему равны высоты и стороны фигур.

И да, апы не приветствуются, за год пребывания на форуме можно было бы это понять.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 28.02.2012, 02:40   #6
--Sashok--
Пользователь
 
Регистрация: 17.02.2011
Сообщений: 76
По умолчанию

спасибо за соображения но что такое дебаггер
--Sashok-- вне форума Ответить с цитированием
Старый 28.02.2012, 09:33   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Отладчик, нужен для пошагового просмотра выполнения программы.
http://ru.wikipedia.org/wiki/Отладка_программы
http://www.nmarket.ru/program/delphi...s-1/les-26.php
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 28.02.2012, 23:47   #8
Pyxy
Пользователь
 
Регистрация: 12.12.2011
Сообщений: 39
По умолчанию

не считается площадь потому что нет значения для высоты трапеции
Pyxy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С/C++ - что означает строчка: bars.iwan Помощь студентам 1 23.12.2011 20:30
Строчка для макроса Sharrik Microsoft Office Excel 2 30.04.2010 16:23
Что за строчка на Си??? mTl Помощь студентам 9 25.12.2008 20:33
строчка за строчкой v-anatolik-s Microsoft Office Excel 2 11.09.2008 05:14
Пустаю строчка в StringGrid Arteom БД в Delphi 5 21.09.2007 09:30