Помощь - Поиск - Пользователи - Календарь
Полная версия: Требуеться помощь на тему: Простые объекты !
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Aspire
Помогите кто знает !!!!!


Тема: Простые объекты.

Задача:
Описать объект, включающий заданные поля и методы. Написать программу, которая создает массив объектов и список объектов и содержит процедуры, работающие с указанными структурами.
Объект - вещественное число, записанное с точкой. Параметры - значение числа и его запись. Методы: конструктор и функция, определяющая количество цифр в целой части числа. Определить среднее значение введенных чисел и среднее количество цифр в целой части. Реализовать два варианта (с массивом и списком).

Зарание спасибо !!!
мисс_граффити
показывай, что пробовал делать
Aspire
Цитата(мисс_граффити @ 13.12.2006 23:36) *

показывай, что пробовал делать



Ты знаешь я не понимаю как делать!!!
мисс_граффити
нет, я этого не знаю.
но в таких ситуациях надо почитать учебник и попробовать что-то сделать.
Серега

вот и я добрался до этой типовой задачки..
пока мучает только один вопрос, что это за параметр такой "его запись"
если есть мысли с удовольствием послушаю))
пока в голове вертиться, только, что это тоже число в строковом представлении.......
Серега aka Безумство =)
я намыслил так:

program project-olo-lo;

{$APPTYPE CONSOLE}

uses
SysUtils;

Type TInt = object
znachenie : single;
zapis : string[30];
constructor Init;
function CountNumFromDot(): integer;
end;

Constructor TInt.Init;
Begin
randomize;
znachenie:=10000*random;
znachenie:=znachenie;
str(znachenie:18:12,zapis);
zapis:=trim(zapis);
End;

Function TInt.CountNumFromDot():integer;
var
pos: integer;
Begin
pos:=AnsiPos('.',zapis)-1;
CountNumFromDot:=pos;
End;

const
N = 5;
var
Obj1 : TInt;
k,summa_num: integer;
summa_all: single;

BEGIN

for k:=1 to N do
begin
Obj1.Init;
summa_all:=summa_all+Obj1.znachenie;
summa_num:=summa_num+Obj1.CountNumFromDot;
writeln(Obj1.zapis);
end;

writeln('srednee = ',summa_all/N:12:5,' srednee v celix = ', (summa_num/N):8:2);
readln;

END.





не мы первые, не мы последние, может кому и пригодиться)
учитывая, что это русский форум, думаю сейчас обольют автора =D
volvo
Цитата
учитывая, что это русский форум, думаю сейчас обольют автора =D
Нет, что ты... Мы будем восхищаться твоим шедевром. Это же, наверное, очень мудрая программа. Ничего, что она не компилируется, ибо нельзя минусы использовать в идентификаторах. В конце концов - это не главное. Главное - как написано-то!!! Песня!!! По барабану, что String и ShortString - это разные типы, и будут предупреждения. Не важно. Написано-то как!!! Вот же в чем сила!

То, что один объект инициализируется неоднократно, и ни разу не освобождается - это тоже мелочи. Главное - автор просто гений, им же только восхищаться и остается!
Безумство
Цитата(volvo @ 17.04.2010 13:06) *

То, что один объект инициализируется неоднократно, и ни разу не освобождается - это тоже мелочи. Главное - автор просто гений, им же только восхищаться и остается!

У мя компилится. собственно их окна Делфей и вытащил.
Хм.. минусов не нашел в именах протрите монитор\очки,
проблем с шотстрингом тоже не увидел, ибо функции для шотов и юзал...
А насчет объектов, ну дык я ток учусь, ща пойдем посмотрим как освобождать...

п.с. чего и следовало ожидать. Вместо того, чтобы объяснить где не прав (цитата строки кода), почему, и примера как надо.. Ну и на том спасибо. Бум думать
TarasBer
Очки должен протирать тот, кто НЕ видит то, что есть.

> program project-olo-lo;

С каких пор это компилится?
volvo
Цитата
У мя компилится.
А у меня слон под кроватью. Это не может компилироваться ни одним компилятором Паскаля/Дельфи. Потому что запрещено. Точка.
Нажмите для просмотра прикрепленного файла

Цитата
проблем с шотстрингом тоже не увидел
Собственно,
Цитата
протрите монитор\очки
, Дельфи ясно предупреждает:
[DCC Warning] Project5.dpr(17): W1057 Implicit string cast from 'ShortString' to 'string'
[DCC Warning] Project5.dpr(17): W1058 Implicit string cast with potential data loss from 'string' to 'ShortString'
[DCC Warning] Project5.dpr(23): W1057 Implicit string cast from 'ShortString' to 'string'
[DCC Warning] Project5.dpr(36): W1036 Variable 'summa_all' might not have been initialized
[DCC Warning] Project5.dpr(40): W1036 Variable 'summa_num' might not have been initialized

Первое, второе и третье предупреждение - именно то, о чем сказано выше. О четвертом и пятом - отдельный разговор будет... "Если захочешь" (С)

Цитата
ибо функции для шотов и юзал...
У Дельфи не спросил? Может, ее мнение по поводу этих функций отличается от мнения программиста? С каких пор Trim работает с ShortString-ами, например? Описание ее гласит, что она принимает и возвращает значение типа System.string. Про короткую строку - ни слова. AnsiString - аналогично.

Цитата
Вместо того, чтобы объяснить где не прав (цитата строки кода), почему, и примера как надо..
Как я могу объяснить, КАК надо, если неясно, ЧТО надо. Это что, постановка задания:
Цитата
вот и я добрался до этой типовой задачки..
? С такой постановкой тебе вообще ничего не светит написать.

Цитата
п.с. чего и следовало ожидать.
А чего, собственно, ты ожидал? Это что, Я пришел в чужую тему со своим самовкодом, и еще начал высказывать мнение, что коли форум "русский" - то автора обязательно должны "облить"? Не от форума это зависит, а от автора кода. Пришел бы нормально, без выёживаний, получил бы нормальный ответ. А так - получай то, что заслуживаешь...
Безумство
Ну постановка задачки, уже описаны в первом посте у мя таже трабла)))
Иначе бы открыл новую тему, впрочем с ней уже разобрался, спасибо манулам,
теперь меня занимает следующая лаба.. Но пока сам ковыряю...
Но вот стал обращать внимание на предупреждение ( я тока учусь, в январе начались лекции, и ни в коей мере не претендую на гениальность lol.gif только на нубство))) Но немножко обидно такое отношение, ладно к делу...
Выдает
[Hint] Unit16.pas(36): Value assigned to 'num' never used


procedure TMainForm.Sort_ButtonClick(Sender: TObject);
var num:Integer;
begin
subs2:=Sort_subs(subs,StringGrid1.RowCount);
num:=0; // при клике по подсказке помещает сюда курсор
for num:=1 to StringGrid1.RowCount-1 do
begin
StringGrid1.Cells[0,num]:=subs[num].name;
StringGrid1.Cells[1,num]:=floattostr(round(subs[num].ud_ves*100)/100);
StringGrid1.Cells[2,num]:=subs[num].electric;
end
end;




вот.. пока гугл и ф1 не помог объяснить в чем же дело (
буду признателен за подсказку пусть даже ехидную))
п.с. если надо какая то еще инфа функция, тип, модули... ?!
п.п.с. а теперь думаю меня пошлют новую тему создавать а не флудить в этой =))) Isn't it?)
TarasBer
А зачем обнулять переменную num перед циклом? Компилятор удивился, потому и спрашивает.
Ах, да, это не в эту тему надо.
Безумство
по поводу перво запостеной задачи вот что пока получилось


program lab14a;

{$APPTYPE CONSOLE}

uses
SysUtils;

Type TInt = object
znachenie : single;
zapis : string[30];
constructor Init;
function CountNumFromDot(): integer;
end;
Constructor TInt.Init;
Begin
readln(znachenie);
str(znachenie:18:12,zapis);
zapis:=trim(zapis);
End;

Function TInt.CountNumFromDot():integer;
var
pos: integer;
Begin
pos:=AnsiPos('.',zapis)-1;
CountNumFromDot:=pos;
End;


var
ObjM : array [1..100] of TInt;
i,summa_num, n: integer;
summa_all: single;

BEGIN

i:=0;
summa_all:=0;
summa_num:=0;

repeat
i:=i+1;
write('Vvedite Object(vixod:1000) ');
ObjM[i].Init;
until ObjM[i].znachenie=1000;

n:=i-1;

for i:=1 to n do
begin
summa_all:=summa_all+ObjM[i].znachenie;
summa_num:=summa_num+ObjM[i].CountNumFromDot;
end;

writeln('srednee = ',(summa_all/n):12:5,' ','srednee v celix = ', (summa_num/n):8:2);
readln;
end.



Ну хоть убейте мя компилятор Делфи 7 про стринги ничего не говорит (( может где-то включается отдельно?
и еще вычитал переключатель или как это называется
{H-} все строки считаются shortstring может быть его использовать..


и второй вариант (там просят с массивом и со списком)


program lab14b;

{$APPTYPE CONSOLE}

uses
SysUtils;

Type TInt = object
znachenie : single;
zapis : string[30];
constructor Init;
function CountNumFromDot(): integer;
end;
Constructor TInt.Init;
Begin
readln(znachenie);
str(znachenie:18:12,zapis);
zapis:=trim(zapis);
End;

Function TInt.CountNumFromDot():integer;
var
pos: integer;
Begin
pos:=AnsiPos('.',zapis)-1;
CountNumFromDot:=pos;
End;

Type tpoint = ^Spisok;
Spisok = record
val : TInt;
next : tpoint;
end;

var
fist, p, p1 : tpoint;
summa_num, n: integer;
summa_all: single;

BEGIN

n:=0;
summa_num:=0;
summa_all:=0;
p1:=nil;
new(fist);
fist^.next:=nil;

repeat
new(p);
if (fist^.next=nil) then fist^.next:=p
else p1^.next:=p;
write('Vvedite Object(vixod:1000) ');
p^.val.init;
p1:=p;
until p^.val.znachenie=1000;

p:=fist^.next;
while p^.next <> nil do
begin
n:=n+1;
p^.val.CountNumFromDot;
summa_num:=summa_num+p^.val.CountNumFromDot;
summa_all:=summa_all+p^.val.znachenie;
p:=p^.next;
end;

writeln('srednee = ',(summa_all/n):12:5,' ','srednee v celix = ', (summa_num/n):8:2);
readln;
end.


Безумство
Цитата(TarasBer @ 20.04.2010 13:36) *

А зачем обнулять переменную num перед циклом? Компилятор удивился, потому и спрашивает.


Блин точно))) Спасибо)...
Ну это перестраховка)) просто при пробеге пошагово в Watch пишет
num: Variable 'num' inaccessible here due to optimization

:-[
TarasBer
Ctrl+Shift+F11, вырубить оптимизацию, потом Alt+P B (пересобрать с нуля проект, компилятор сам не догадается, что после смены опций компилятора надо все модули пересобирать, сам на этом горел, когда убирал флаги I/O Checking, компилировал проект, а потом выяснялось, что нихрена флаги не убрались), а потом уже запустить.
Безумство
TarasBer
Ого тонкости))) Спасибо снова, вы мне два дня сэкономили как минимум good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.