Помогите кто знает !!!!!
Тема: Простые объекты.
Задача:
Описать объект, включающий заданные поля и методы. Написать программу, которая создает массив объектов и список объектов и содержит процедуры, работающие с указанными структурами.
Объект - вещественное число, записанное с точкой. Параметры - значение числа и его запись. Методы: конструктор и функция, определяющая количество цифр в целой части числа. Определить среднее значение введенных чисел и среднее количество цифр в целой части. Реализовать два варианта (с массивом и списком).
Зарание спасибо !!!
показывай, что пробовал делать
нет, я этого не знаю.
но в таких ситуациях надо почитать учебник и попробовать что-то сделать.
вот и я добрался до этой типовой задачки..
пока мучает только один вопрос, что это за параметр такой "его запись"
если есть мысли с удовольствием послушаю))
пока в голове вертиться, только, что это тоже число в строковом представлении.......
я намыслил так:
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.
Очки должен протирать тот, кто НЕ видит то, что есть.
> program project-olo-lo;
С каких пор это компилится?
[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
Ну постановка задачки, уже описаны в первом посте у мя таже трабла)))
Иначе бы открыл новую тему, впрочем с ней уже разобрался, спасибо манулам,
теперь меня занимает следующая лаба.. Но пока сам ковыряю...
Но вот стал обращать внимание на предупреждение ( я тока учусь, в январе начались лекции, и ни в коей мере не претендую на гениальность только на нубство))) Но немножко обидно такое отношение, ладно к делу...
Выдает
[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;
А зачем обнулять переменную 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.
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.
Ctrl+Shift+F11, вырубить оптимизацию, потом Alt+P B (пересобрать с нуля проект, компилятор сам не догадается, что после смены опций компилятора надо все модули пересобирать, сам на этом горел, когда убирал флаги I/O Checking, компилировал проект, а потом выяснялось, что нихрена флаги не убрались), а потом уже запустить.
TarasBer
Ого тонкости))) Спасибо снова, вы мне два дня сэкономили как минимум