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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2014, 15:40   #1
нуб7
Пользователь
 
Регистрация: 22.10.2014
Сообщений: 13
Вопрос На основе строки в виде суммы чисел создать класс,в классе написать функцию,вычисляющую результат.(Паскаль)

На основе строки вида 12+456 создать класс с полями Number1:integer; Number2:integer; Operation:char; Написать в классе функцию,вычисляющую результат операции и показать результат ее выполнения на экране. (Турбо Паскаль) Помогите,пожалуйста!
нуб7 вне форума Ответить с цитированием
Старый 22.10.2014, 15:55   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот класс я тебе наверное не покажу а функцию вычисления могу:
Код:
function eval(s:string):Double;
var e,i:integer; d,d2:double; c:char;
begin
 while pos(' ',s)<>0 do delete(s,pos(' ',s),1);
 val(s,d,e);
 if e<>0 then begin
  val(copy(s,1,e),d,e);
  c:=s[e];
  delete(s,1,e);
  val(s,d2,e);
  case c of
    '+': eval:=d+d2;
    '-': eval:=d-d2;
    else eval:=0;
  end;
 end else eval:=0;
 end;
Идея такова: Пытаемся выяснить где в выражении заканчивается первое число.
потом отрезаем строку до этого окончания, и превращаем первое число в вещественное. Потом выясняем символ знака, и получаем второе число.
Case - само вычисление.

Ясен перец?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.10.2014, 16:02   #3
нуб7
Пользователь
 
Регистрация: 22.10.2014
Сообщений: 13
По умолчанию

Спасибо большое за разъяснение))),но хотелось бы класс увидеть, а то не понимаю совсем
нуб7 вне форума Ответить с цитированием
Старый 22.10.2014, 17:48   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

а в турбопаскакале нету классов.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 22.10.2014, 19:08   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а в турбопаскакале нету классов.
Ну они-то там есть, только называются объектами
Просто либо преподаватель так излился студентам по глупости, либо студенты так поняли.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.10.2014, 19:27   #6
нуб7
Пользователь
 
Регистрация: 22.10.2014
Сообщений: 13
По умолчанию

Без объяснений, такой билет попался(

Код:
uses
SysUtils;

const s:string='12+456';
type MyClass = class
Number1,Number2:integer;
Operation:char;
procedure Opredelenie(a:string);
function Rastshet():integer;
end;
procedure MyClass.Opredelenie;
var i,n:integer; buf:string;
begin
n:=length(a);
for i:=1 to n do
begin
if ord(a[i]) in [48..57] then buf:=buf+a[i] else break;
end;
Number1:=strtoint(buf);
delete(a,1,length(buf));
buf:='';
Operation:=Chr(Ord(a[1]));
delete(a,1,1);
Number2:=StrToInt(a);
end;
function MyClass.Rastshet;
begin
case Operation of
'+':Rastshet:=Number1+Number2;
'-':Rastshet:=Number1-Number2;
end;
end;
var MC:MyClass;
begin
writeln('Stroka s: ',s);
MC.Opredelenie(s);
writeln('Rezultat: ',s,' = ',MC.Rastshet);
end.

оцените, правильно ли все сделано?

Последний раз редактировалось Stilet; 22.10.2014 в 20:21.
нуб7 вне форума Ответить с цитированием
Старый 22.10.2014, 20:12   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
оцените, правильно ли все сделано?
очень неправильно. это не паскаль, а обджектпаскаль.
бонус тебе.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 22.10.2014, 20:26   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
это не паскаль, а обджектпаскаль.
Это даже уже Делфи. Но не важно - это точно не турбопаскаль.
На турбике было бы так:
Код:
const s:string='12+456';
type 
MyClass = Object
  Number1,Number2:integer;
  Operation:char;
  procedure Opredelenie;
  function Rastshet;
end;

procedure Opredelenie(a:string);
function Rastshet():integer;
end;

procedure MyClass.Opredelenie;
var e,i,n:integer; buf:string;
begin
n:=length(a);
for i:=1 to n do
begin
if ord(a[i]) in [48..57] then buf:=buf+a[i] else break;
end;
val(buf,Number1,e);
delete(a,1,length(buf));
buf:='';
Operation:=Chr(Ord(a[1]));
delete(a,1,1);
val(a,Number2,e);
end;

function MyClass.Rastshet;
begin
case Operation of
'+':Rastshet:=Number1+Number2;
'-':Rastshet:=Number1-Number2;
end;
end;

var MC:MyClass;
begin
writeln('Stroka s: ',s);
MC.Opredelenie(s);
writeln('Rezultat: ',s,' = ',MC.Rastshet);
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.10.2014, 20:49   #9
нуб7
Пользователь
 
Регистрация: 22.10.2014
Сообщений: 13
По умолчанию

Stilet, спасибо,очень помог))
нуб7 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cоздать класс жидкость. определить конструкторы деструкторы и функцию печати. создать публик производный класс. (С++) Динар Габбасов Помощь студентам 0 28.05.2012 18:44
ЦИКЛЫ (паскаль) - представить N в виде суммы факториалов натуральных чисел, содержащей наименьшее число слагаемых Katya20 Помощь студентам 7 09.01.2012 01:21
Создать функцию вычисляющую общее количество локальных максимумов leha1993 Паскаль, Turbo Pascal, PascalABC.NET 2 23.05.2011 14:23
Как написать функцию. Строки паскаль Nubik Помощь студентам 1 27.02.2010 01:38
ассемблер. Написать функцию, вычисляющую по заданным точкам а,b,c площадь треугольника abс. qimbo Помощь студентам 5 05.01.2008 13:54