Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/16: Рейтинг темы: голосов - 16, средняя оценка - 5.00
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293
1

Описать процедуру, присваивающую параметру среднюю цену из непустого прейскуранта

22.01.2012, 22:14. Показов 3311. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Писала программу, но понимаю, что там очень много сделано не так, как требуется. Я только учусь и многие примитивные вещи для меня пока тяжело даются. Помогите, пожалуйста, исправить. Буду вам очень признательна. Надо срочно.

Задание:
Delphi
1
2
3
4
5
6
type cena = record
                 r,c: integer;
                 end;
       arr = array [1..5] of cena;
var p: arr;
     mincena: cena;
Описать процедуру max (p, mincena), присваивающую параметру mincena среднюю цену из непустого прейскуранта p.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Grids;
 
type
  cena = record
    t: string;
    r,c: integer;
    end;
  arr = array [1..5] of cena;
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    BitBtn1: TBitBtn;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    StringGrid2: TStringGrid;
    Label6: TLabel;
    Label7: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  p: arr;
  mincena: cena;
  i: integer;
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  i:=0;
  StringGrid1.Cells[0,0]:='N';
  StringGrid1.Cells[1,0]:='Товар';
  StringGrid1.Cells[2,0]:='Руб.';
  StringGrid1.Cells[3,0]:='Коп.';
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  i:=i+1;
  StringGrid1.Cells[0,i]:=IntToStr(i);
  StringGrid1.Cells[1,i]:=Edit1.Text;
  StringGrid1.Cells[2,i]:=Edit2.Text;
  StringGrid1.Cells[3,i]:=Edit3.Text;
  p[i].t:=Edit1.Text;
  p[i].r:=StrToInt(Edit2.Text);
  p[i].c:=StrToInt(Edit3.Text);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
type
  cena1 = record
    r1,c1: integer;
end;
var
  mincena: cena1;
  k,rub,kop: integer;
begin
  for k:=1 to i do
    rub:=(StrToInt(StringGrid1.Cells[2,1])+StrToInt(StringGrid1.Cells[2,2])+StrToInt(StringGrid1.Cells[2,3])+StrToInt(StringGrid1.Cells[2,4])+StrToInt(StringGrid1.Cells[2,5])) div 5;
   for k:=1 to i do
    kop:=(StrToInt(StringGrid1.Cells[3,1])+StrToInt(StringGrid1.Cells[3,2])+StrToInt(StringGrid1.Cells[3,3])+StrToInt(StringGrid1.Cells[3,4])+StrToInt(StringGrid1.Cells[3,5])) div 5;
  StringGrid2.Cells[0,0]:=IntToStr(rub);
  StringGrid2.Cells[1,0]:=IntToStr(kop);
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
  Edit1.Clear;
  Edit2.Clear;
  Edit3.Clear;
end;
 
end.
Описать процедуру, присваивающую параметру среднюю цену из непустого прейскуранта


Помогите со следующими вопросами:
1. Как записать массив в цикле, когда мы рассчитываем rub и kop? А то я тут расписала ерунды, понимаю, укоротить можно, но уже голова кругом, никак не соображу.
2. Не могу понять, как вставить процедуру max, ну чтобы как в задание говорится.
3. Как сделать, чтобы TEdit3, куда копейки вводятся, можно было вводить только двухзначные числа, а то околесица получается. 906 копеек, например.
4. И вообще как сделать, чтобы копейки к рублям прибавлялись? Ведь 100 копеек = 1 рубль, а у меня они только в своей ячейке записываются.
5. И ещё (чисто для себя), как сделать, чтобы при запуске программы в ячейках StringGrid1 уже стояли значения по умолчанию?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2012, 22:14
Ответы с готовыми решениями:

Описать процедуру, присваивающую параметру наименьшую цену
Type цена =record руб:0..maxint; коп:0..99 ...

Описать процедуру удаления последнего элемента непустого односвязного списка, заданного указателем на его начало
Помогите с 2 задачами. Описать процедуру удаления последнего элемента непустого односвязного...

Описать и проверить процедуру или функцию, которая переносит в начало непустого списка L его последний элемент.
type TЭ=…; {тип элементов списка} {выбирается по желанию} список=...

Описать процедуру maxmin (x, y) присваивает параметру х большее из вещественных чисел x и y, а параметру у -- меньшее
Процедура maxmin (x, y) присваивает параметру х большее из вещественных чисел x и y, а параметру у...

20
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
23.01.2012, 03:01 2
Цитата Сообщение от yuppi Посмотреть сообщение
1. Как записать массив в цикле, когда мы рассчитываем rub и kop? А то я тут расписала ерунды, понимаю, укоротить можно, но уже голова кругом, никак не соображу.
4. И вообще как сделать, чтобы копейки к рублям прибавлялись? Ведь 100 копеек = 1 рубль, а у меня они только в своей ячейке записываются.
Delphi
1
2
3
4
5
6
7
8
9
10
var
  mincena: cena1;
  k,rub,kop: integer;
begin
  for k:=1 to i do
    rub:=(StrToInt(StringGrid1.Cells[2,1])+StrToInt(StringGrid1.Cells[2,2])+StrToInt(StringGrid1.Cells[2,3])+StrToInt(StringGrid1.Cells[2,4])+StrToInt(StringGrid1.Cells[2,5])) div 5;
   for k:=1 to i do
    kop:=(StrToInt(StringGrid1.Cells[3,1])+StrToInt(StringGrid1.Cells[3,2])+StrToInt(StringGrid1.Cells[3,3])+StrToInt(StringGrid1.Cells[3,4])+StrToInt(StringGrid1.Cells[3,5])) div 5;
  StringGrid2.Cells[0,0]:=IntToStr(rub);
  StringGrid2.Cells[1,0]:=IntToStr(kop);
Но оно возможно не пригодиться. См. ниже..
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
begin
 rub:=0;
 kop:=0;
  for k:=1 to i do
    rub:=rub + p[i].r;
   for k:=1 to i do
    kop:=kop + p[i].c;
  rub:=rub div 5;
  kop:=kop div 5;
// копейки в рубли  
 if kop > 99  then
   begin
     rub:=rub + round(int(kop/100));
     kop:= round(frac(kop/100)*100);
   end;
 StringGrid2.Cells[0,0]:=IntToStr(rub);
 StringGrid2.Cells[1,0]:=IntToStr(kop);
   end;
3. Как сделать, чтобы TEdit3, куда копейки вводятся, можно было вводить только двухзначные числа, а то околесица получается. 906 копеек, например.
В свойствах компонента TEdit3, MaxLength поставь 2
2. Не могу понять, как вставить процедуру max, ну чтобы как в задание говорится.
После служебног слова implementation вставь эту процедуру
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure max(var p1:cena) ;
var
 k: integer;
begin
p1.r:=0;
 p1.c:=0;
  for k:=1 to i do
    p1.r:=p1.r + p[i].r;
   for k:=1 to i do
    p1.c:=p1.c + p[i].c;
  p1.r:=p1.r div 5;
  p1.c:=p1.c div 5;
   if p1.c > 99  then
   begin
    p1.r:=p1.r + round(int(p1.c/100));
    p1.c:= round(frac(p1.c/100)*100)
   end;
end;
А в процедуре
Delphi
1
procedure TForm1.Button2Click(Sender: TObject)
все сотри и напиши так
Delphi
1
2
3
4
5
6
procedure TForm1.Button2Click(Sender: TObject)
begin
 max(mincena);
  StringGrid2.Cells[0,0]:=IntToStr(mincena.r);
  StringGrid2.Cells[1,0]:=IntToStr(mincena.c);
end;
5. И ещё (чисто для себя), как сделать, чтобы при запуске программы в ячейках StringGrid1 уже стояли значения по умолчанию?
Из файла загружать...

P.S. Слово СРОЧНО в заголовке или вообще в просьбе, для Нас как красная тряпка для быка... Мозги Нам выносит...Имей это к сведению
1
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293
23.01.2012, 15:15  [ТС] 3
Большое вам человеческое спасибо :*
Буду иметь в виду.

Добавлено через 8 часов 14 минут
Подскажите ещё, пожалуйста, как изменится программа, если осуществить запись в файл, ну т.е. изменить в начальном условии задания: arr = file of cena вместо arr = array [1..5] of cena? Буду Вам очень признательна.
0
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
23.01.2012, 16:28 4
Цитата Сообщение от yuppi Посмотреть сообщение
Подскажите ещё, пожалуйста, как изменится программа, если осуществить запись в файл, ну т.е. изменить в начальном условии задания: arr = file of cena вместо arr = array [1..5] of cena? Буду Вам очень признательна.
Не делай так, а то все пойдет кувырком
Для записи в файл, объяви глобальную переменую( в разделе var) f: file of cena;
Сохранения в файл. Создай новую кнопку и в ней напиши следующее
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var
i: integer;
begin
if SaveDialog1.Execute then
begin
  AssignFile(F,SaveDialog1.FileName);
  if FileExists(SaveDialog1.FileName) then
      if MessageDlg('Файл с таким именем уже существует.Перезаписать?',mtConfirmation,[mbYes,mbNo],0)=mrNo then exit;
  rewrite(F,SaveDialog1.FileName);//Создание файла
  i:=1;
  while i<>StringGrid1.RowCount -1 do
  begin
    mincena.t:=StringGrid1.Cells[1,i];
   mincena.r:=StringGrid1.Cells[2,i];
   mincena.c:=StringGrid1.Cells[3,i];
   write(F,mincena);
   inc(i);
   end;
  CloseFile(F);  
  end;
Незабудь положить на форму диалог сохранения файла
Открытие файла. Создай новую кнопку и в ней напиши следующее
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var
i: integer;
begin // открытие файла
  if OpenDialog1.Execute and FileExists(OpenDialog1.Filename) then
  begin // связываем имя файла с файловой переменной
    AssignFile(F, OpenDialog1.Filename);
    reset(F);
    i := 1;
    while not eof(F) do
    begin
      read(F, mincena);
      StringGrid1.Cells[1, i] := mincena.t;
      StringGrid1.Cells[2, i] := mincena.r;
      StringGrid1.Cells[3, i] :=mincena.c;
      inc(i);
    end;
       CloseFile(F);
  end  else  ShowMessage('Файл отсутствует');
Незабудь положить на форму диалог открытия файла

Добавлено через 16 минут
Еще сдесь
Delphi
1
2
3
4
5
type
  cena = record
    t: string;
    r,c: integer;
    end;
Добавь
Delphi
1
2
3
4
5
type
  cena = record
    t: string[15];
    r,c: integer;
    end;
1
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293
23.01.2012, 23:07  [ТС] 5
Не работает. Ругается на строки SaveDialog1.FileName и OpenDialog1.Execute. В чём может быть причина? Пишет "Undeclared identifier".
0
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
23.01.2012, 23:11 6
Какие ошибки сообщает компилятор?
Или скинь весь проект, я посмотрю че там случилось
А увидел
Пишет "Undeclared identifier".
Я же тебе написал
Незабудь положить на форму диалог открытия файла
Незабудь положить на форму диалог сохранения файла
1
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293
23.01.2012, 23:21  [ТС] 7
Вроде сделала. Кинула на форму компоненты FileOpenDialog1 и FileSaveDialog1, изменила в коде немного (добавила приставку "File"). Но теперь выходит другая ошибка mincena.r:=StringGrid1.Cells[2,i]; ему не нравится

Прилагаю файлы проекта. Только я в XE делаю. Надеюсь, у Вас пойдёт.
Вложения
Тип файла: rar Lab3.rar (521.2 Кб, 11 просмотров)
0
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
24.01.2012, 00:49 8
Вот сделал. Правда все там держиться на одном чесном слове)).Но ты ,молодец.
Lab3m.rar
1
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
24.01.2012, 02:45 9
Тут я чуток дароботал..
Lab3_2.zip
1
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293
24.01.2012, 04:36  [ТС] 10
Спасибо вам огромное :* Теперь всё как надо: и номера номера строк выводит из файла, и результат считает верно (это самое главное! а то я уже вся извелась, пытаясь исправить, да так и не смогла без вашей помощи). У меня только 2 замечания (но если, конечно, я имею право их вам делать):

- как сделать, чтобы при нажатии кнопки "Добавить" осуществлялся переход на следующую строчку в StringGrid, как у меня в начале было? (вот хотя бы это ещё помогите сделать);

- это уже придирки, понимаю, что преподаватель в универе такой конечный вариант проглотит, но я просто любопытный человек, и мне интересно чисто для себя, я же понимаю, что результат всё равно получается неверным, т.к. в программе происходит следующее: считается сумма копеек, делится на 5; считается сумма рублей делится на 5 -> вывод результата отдельно рублей, отдельно копеек; на мой взгляд работать это должно так: считаем сумму рублей, считаем сумму копеек, копейки переводим в рубли (как раз когда > 99), прибавляем к рублям, а потом делим и рубли и копейки на 5; вот это я уже не соображу как сделать...

Если несложно, не могли бы вы, пожалуйста, объяснить мне несколько нюансов:

- что означает цифра 15 в строчке t: string[15];

- вы в procedure TForm1.FormCreate(Sender: TObject); и procedure TForm1.Button1Click(Sender: TObject); 3 раза изменили присваивание значения элементу-счётчику i в отличие от моего исходного варианта, вас не затруднит объяснить, что поменялось и как это теперь работает?

- объясните эту строчку кода, пожалуйста (что означает каждый элемент)
if FileExists(FileSaveDialog1.FileName) then
if MessageDlg('Файл с таким именем уже существует.Перезаписать?',
mtConfirmation, [mbYes, mbNo], 0) = mrNo then

- если вернуться на 6 сообщений этого форума вверх, ты вы предлагали записать while i<>StringGrid1.RowCount -1 do сейчас просто while j <> StringGrid1.RowCount do без -1, а что изменилось в работе программы?

Огромное вам, большущее спасибо, что потратили на меня столько времени :*
0
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
24.01.2012, 05:42 11
Смотрю аппетит у тебя разашолся.)) Это хорошо. Начнем по порядку
- как сделать, чтобы при нажатии кнопки "Добавить" осуществлялся переход на следующую строчку в StringGrid, как у меня в начале было? (вот хотя бы это ещё помогите сделать);
Что нужно сделать указано в коде
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
begin
  i := StringGrid1.Row;
  StringGrid1.Cells[0, i] := IntToStr(i);
  StringGrid1.Cells[1, i] := Edit1.Text;
  StringGrid1.Cells[2, i] := Edit2.Text;
  StringGrid1.Cells[3, i] := Edit3.Text;
  p[i].t := Edit1.Text;
  p[i].r := StrToInt(Edit2.Text);
  p[i].c := StrToInt(Edit3.Text);
  i := i + 1;                              
  StringGrid1.Row:=StringGrid1.Row+1;   // добавить
end;
- это уже придирки, понимаю, что преподаватель в универе такой конечный вариант проглотит, но я просто любопытный человек, и мне интересно чисто для себя, я же понимаю, что результат всё равно получается неверным, т.к. в программе происходит следующее: считается сумма копеек, делится на 5; считается сумма рублей делится на 5 -> вывод результата отдельно рублей, отдельно копеек; на мой взгляд работать это должно так: считаем сумму рублей, считаем сумму копеек, копейки переводим в рубли (как раз когда > 99), прибавляем к рублям, а потом делим и рубли и копейки на 5; вот это я уже не соображу как сделать...
Можно и так . Я в финансах не силен.. а сделать так очень просто, поменяй местами
Delphi
1
2
3
4
5
6
7
p1.r := p1.r div 5;
  p1.c := p1.c div 5;
  if p1.c > 99 then
  begin
    p1.r := p1.r + round(int(p1.c / 100));
    p1.c := round(frac(p1.c / 100) * 100)
  end;
вот так
Delphi
1
2
3
4
5
6
7
 if p1.c > 99 then
  begin
    p1.r := p1.r + round(int(p1.c / 100));
    p1.c := round(frac(p1.c / 100) * 100)
  end;
p1.r := p1.r div 5;
p1.c := p1.c div 5;
- что означает цифра 15 в строчке t: string[15];
максимальная длина строки 15 букв. Если слово будет состоять больше чем из 15 букв все остальное отброситься
вы в procedure TForm1.FormCreate(Sender: TObject); и procedure TForm1.Button1Click(Sender: TObject); 3 раза изменили присваивание значения элементу-счётчику i в отличие от моего исходного варианта, вас не затруднит объяснить, что поменялось и как это теперь работает?
т.к. массивы мы установили индекацию с единицы(array [1..5] of cena)а не с нуля и доступ к изменяемым ячейкам стринга тоже начинается с единицы то для синхроности при открытии файла и при прямом редактировании таблицы а также для правильного отображения переменной P, это было необходимо.
- объясните эту строчку кода, пожалуйста (что означает каждый элемент)
if FileExists(FileSaveDialog1.FileName) then
if MessageDlg('Файл с таким именем уже существует.Перезаписать?',
mtConfirmation, [mbYes, mbNo], 0) = mrNo then
FileExists
FileSaveDialog1.FileName- имя файла которого мы выбрали в диалоге
MessageDlg
если вернуться на 6 сообщений этого форума вверх, ты вы предлагали записать while i<>StringGrid1.RowCount -1 do сейчас просто while j <> StringGrid1.RowCount do без -1, а что изменилось в работе программы?
Я уже говорил но добавлю. Индексацию мы начели с единицы, поэтому одна запись при записывании в файл урезалась.
2
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293
25.01.2012, 11:28  [ТС] 12
Цитата Сообщение от antikiler_ Посмотреть сообщение
Что нужно сделать указано в коде
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
begin
  i := StringGrid1.Row;
  StringGrid1.Cells[0, i] := IntToStr(i);
  StringGrid1.Cells[1, i] := Edit1.Text;
  StringGrid1.Cells[2, i] := Edit2.Text;
  StringGrid1.Cells[3, i] := Edit3.Text;
  p[i].t := Edit1.Text;
  p[i].r := StrToInt(Edit2.Text);
  p[i].c := StrToInt(Edit3.Text);
  i := i + 1;                              
  StringGrid1.Row:=StringGrid1.Row+1;   // добавить
end;
А как сделать, чтобы после добавления 5-ой строчки программа "успокоилась"? Просто после нажатия кнопки "Добавить" в 5-ый раз, программа, я так понимаю, хочет добавть ещё (6-ую) строчку и вылезает ошибка "Grid index out of range".

И ещё такая проблема, что после добавления в программу сохранённого файла, средняя цена после нажатия кнопки "Расчет" получает значения 0 руб. 0 коп.
0
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
25.01.2012, 17:06 13
Цитата Сообщение от yuppi Посмотреть сообщение
А как сделать, чтобы после добавления 5-ой строчки программа "успокоилась"? Просто после нажатия кнопки "Добавить" в 5-ый раз, программа, я так понимаю, хочет добавть ещё (6-ую) строчку и вылезает ошибка "Grid index out of range".
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.Button1Click(Sender: TObject);
begin
  i := StringGrid1.Row;
  StringGrid1.Cells[0, i] := IntToStr(i);
  StringGrid1.Cells[1, i] := Edit1.Text;
  StringGrid1.Cells[2, i] := Edit2.Text;
  StringGrid1.Cells[3, i] := Edit3.Text;
  p[i].t := Edit1.Text;
  p[i].r := StrToInt(Edit2.Text);
  p[i].c := StrToInt(Edit3.Text);
  i := i + 1;
  if StringGrid1.Row < StringGrid1.RowCount-1 then StringGrid1.Row := StringGrid1.Row+1 // остановиться на последей сроке
  else StringGrid1.Row:=1 // а если добавишь эту строчку то будет идти по кругу
end;
И ещё такая проблема, что после добавления в программу сохранённого файла, средняя цена после нажатия кнопки "Расчет" получает значения 0 руб. 0 коп
В доработаном файле я это исправил. Проверь у себя есть ли такая строка i := StringGrid1.RowCount; здесь
Delphi
1
2
3
4
5
6
7
procedure TForm1.Button2Click(Sender: TObject);
begin
  i := StringGrid1.RowCount;
  max(mincena);
  StringGrid2.Cells[0, 0] := IntToStr(mincena.r);
  StringGrid2.Cells[1, 0] := IntToStr(mincena.c);
end;
На всякий случай, вотLab3.rar
2
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293
25.01.2012, 18:58  [ТС] 14
Спасибо. Теперь всё просто идеально!!! :* :* :*
0
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293
29.01.2012, 17:04  [ТС] 15
Сдавала эта программу, преподавательница не принимает Говорит, куча ошибок
Ошибка в том, что читаешь из файла в одной процедуре, а работаешь с массивом в другой! Масивов, говорит, в этой лабе нет вообще. Вся работа идет только с файлом. В ОДНОЙ процедуре должно быть и чтение из файла и нахождение цены. И еще, говорит, не загромождай программу всеми этими книжными File exist и т.д. Можете мне помочь еще раз? Пожалуйста.
0
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
29.01.2012, 20:10 16
Цитата Сообщение от yuppi Посмотреть сообщение
Сдавала эта программу, преподавательница не принимает Говорит, куча ошибок
Передай своей "преподовательнице" что она сама одна сплашная ошибка природы.))
Ошибка в том, что читаешь из файла в одной процедуре, а работаешь с массивом в другой!
Передай своей "преподовательнице", пускай меняет работу...
Масивов, говорит, в этой лабе нет вообще.
Я серьезно говорю, пускай менякт работу!
Вот объявление нашего массива
Delphi
1
2
3
4
5
6
7
8
type
  cena = record
    t: string[15];
    r, c: integer;
  end;
  arr = array [1 .. 5] of cena;
var
 p: arr;
если она не заметила где эта буква применяеться то вот куски текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for k := 1 to i-1 do
  begin
    p1.r := p1.r + p[k].r;
    p1.c := p1.c + p[k].c;
  end;
 
 p[i].t := Edit1.Text;
  p[i].r := StrToInt(Edit2.Text);
  p[i].c := StrToInt(Edit3.Text);
 
 p[j].t := mincena.t;
      StringGrid1.Cells[2, j] := IntToStr(mincena.r);
      p[j].r := mincena.r;
      StringGrid1.Cells[3, j] := IntToStr(mincena.c);
      p[j].c := mincena.c;
В ОДНОЙ процедуре должно быть и чтение из файла и нахождение цены. И еще, говорит, не загромождай программу всеми этими книжными File exist и т.д
пускай меняет работу
Можете мне помочь еще раз? Пожалуйста.
Тебе та Я еще смогу помочь, а вот твоей преподовательнице уже никто не поможет..., против дураков я бессилен
1
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
29.01.2012, 22:06 17
Вот переделал, как она хотела. Чтобы она увидела массив в программе, я его переименовал вместо р , везде так MASSIV и вдобавок еще закоментировал. Будет что-то непонятное, спрашивай
Lab3_4.rar
1
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293
31.01.2012, 21:43  [ТС] 18
Получила сегодня от нее ответ, что "надо было делать вот так!" И файл мой переделанный прислала, в котором, кстати, Delphi выводит 6 ошибок и не компиллирует. Может вы мне объясните, что ей от меня надо? Что ей не понравилось? И в чем причина этих ошибок? Особенно, говорит, обрати внимание на процедуру max.
Вложения
Тип файла: rar Lab3.rar (539.4 Кб, 8 просмотров)
0
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
01.02.2012, 00:22 19
Цитата Сообщение от yuppi Посмотреть сообщение
Получила сегодня от нее ответ, что "надо было делать вот так!"
Как ты сама поняла , если будеш делать "вот так!" ни к чему хорошему это не приводит.Пример тому ее переделанная работа.
Может вы мне объясните, что ей от меня надо? Что ей не понравилось?
Спокойно красавица, только не .
И в чем причина этих ошибок?
Из-за ее безграмотности
Особенно, говорит, обрати внимание на процедуру max.
Я и обратил... Ошибка на ошибке.
Так ей и передай. А именно, если она хотела сделать в процедуре, локальный параметр типа файла то он не может быть передан по значению. Он передается только по ссылке.
ЕЕ неправильный
Delphi
1
procedure max(var p1:cena; f:ff);
А вот как надо
Delphi
1
procedure max(var p1:cena; var f:ff);
Со своей переделкой Она полностью "убила" массив и заодно кнопку расчет .Обявила не правильно переменные...вообщем она из программы сделала говняшку. Я его запустил та, но ничиго не переделывал. Программа правильно только работает, когда открываешь файл.
Вот файлLab3_5.rar
1
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
01.02.2012, 04:41 20
Все таки я его доделал. А то в нутри кошки скреблись
Lab3_6.rar
1
01.02.2012, 04:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2012, 04:41
Помогаю со студенческими работами здесь

Описать процедуру star(G,F), присваивающую строке F фамилию самого старшего мужчины из группы G
Дано type дата=record число: 1..32; месяц: 1..12; год: 1900..1990 end; анкета=record фамилия:...

Описать процедуру, которая удаляет из непустого списка L первый элемент
Описать процедуру, которая удаляет из непустого списка L первый элемент.

Написать функцию, присваивающую параметру t2 время на 1 секунду большее времени t1
Время можно представить с помощью часов, минут и секунд. Написать функцию перевод(t1,t2),...

Описать процедуру, которая переносит в конец непустого списка L его первый элемент
2. Описать процедуру, которая переносит в конец непустого списка L его первый элемент. Помогите,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru