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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2014, 18:51   #1
Руслан56
Пользователь
 
Регистрация: 07.10.2013
Сообщений: 30
По умолчанию Почему пишет неизвестный идентификатор ?

Паскаль как сделать что бы программа работала. Срочно нужна помощь!
Код:
program pro1;
uses ob,obrabotki;
var sd:product;
    fieldFlag:proiz;

begin
vvod(sd);
podschet(sd);
Neponyatno(sd);
vivod(sd);
optimize(sd)

end.
Код:
unit obrabotki;
interface
uses ob;
procedure vvod(var sd:product);
procedure vivod(var sd:product);
procedure podschet(var sd:product);
implementation

procedure vvod(var Sd:product);
var i:integer;
begin
     for i:=1 to maxk do
     begin
     Sd[i].name:=(i);
     Sd[i].kol:=random(6) + 5;
     Sd[i].Sebest:= random(500)+100;
     Sd[i].cena:=Sd[i].sebest+random(100);
     Sd[i].work:=random(5)+5;
     end;
end;


procedure vivod(var Sd:product);
var i:integer;
begin
writeln('---------------------------------------------------------------');
writeln('|','Товар':5,'|','Eдиницы':5,'|','Себестоимость':10,'|','Цена':5,'|','Рабочие':8,'|','Производительность','|');
writeln('---------------------------------------------------------------');
for i:=1 to maxk do writeln('|',sd[i].name:4, '', sd[i].kol:6, '      ', sd[i].sebest, '           ', sd[i].cena, '      ', sd[i].work,'  | ' ,sd[i].proiz);
writeln('---------------------------------------------------------------');


end;
procedure podschet(var sd:product);
var i:integer;
begin
for i:=1 to maxk do begin
    sd[i].dohod:=sd[i].kol * sd[i].cena - sd[i].kol * sd[i].sebest;;
    sd[i].proiz:=sd[i].dohod / sd[i].work;
end;
end;

function Neponyatno(sd: product): real;
var
   i, a: integer;
begin
     result := 0;
     a := 0;
 for i := 1 to maxk do begin
                       if (fieldFlag[i] = false) then begin
                       result := result + (sd[i].dohod / sd[i].work);
                       inc(count);
                                                       end;
                       end;
 result := result / a;
end;

function minsort (sd:product):integer;
var
   i:integer;
   min:real;
begin
for i:=1 to maxk do begin
if (fieldFlag[i] = false) then begin
min:=sd[i].proiz;
rezult:=i;
//Break//
end;
end;
for i := 2 to maxk do begin
  if (fieldFlag[i] = false) then begin
   if sd[i].proiz < min then begin
    result := i;
    min := sd[i].proiz;
   end;
  end;
 end;
end;

procedure optimize(var sd[i].product);
var
 i: integer;
 flag: boolean;
 b: real;
begin
 flag := false;
 i := 1;

 while ((flag = false) and (i < maxk)) do begin
  fieldFlag[minsort(sd)] := true;
  if (b * 2 <= Neponyatno(sd)) then flag := true;
  inc(i);
 end;
 writeln('______________________________');
 writeln('Производительность труда');
 writeln('До: ', b);
 writeln('После: ', Neponyatno(sd));
 writeln('______________________________');
end;
end.
Код:
unit ob;
interface
const maxk=20;
type
tovar = record
name : integer;
kol  : integer;
sebest:real;
cena :real;
work :integer;
dohod:real;
proiz:real;
end;


type
 proiz = array [1..maxk] of boolean;
 product = array[1..maxk] of tovar;
 implementation
 end.
Руслан56 вне форума Ответить с цитированием
Старый 02.03.2014, 19:24   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,378
По умолчанию

Не разбираясь детально, а в чем ошибка и где? Паскаль ABC?
По идее модули (Unit'ы) должны быть откомпилированы на первом шаге, но вот модуль obrabotki при компиляции требует описания массива fieldFlag[], который описан только в программе:
Код:
uses ob, obrabotki;
var sd:product;
    fieldFlag:proiz;
Так думаю, что этот массив можно описать в модуле obrabotki или ob.


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 02.03.2014, 19:36   #3
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Так думаю, что этот массив можно описать в модуле obrabotki или ob.
Типы product и proiz уже описаны у ТС в модуле ob.
Судя по коду, проблема может быть в "циклических ссылках" в uses.
Возможны так же другие причины. Без точного описания проблемы и названия компилятора что-то определённое сказать сложно.
Цитата:
Почему пишет неизвестный идентификатор ?
В каком модуле и в какой строке возникает ошибка? Что за компилятор?
Streletz вне форума Ответить с цитированием
Старый 02.03.2014, 20:05   #4
Руслан56
Пользователь
 
Регистрация: 07.10.2013
Сообщений: 30
По умолчанию

Этот вопрос закрыт) появился другой, почему производительность до и после одинаковая?
Код:
program pro1;
uses ob,obrabotki;
var sd:product;


begin
vvod(sd);
podschet(sd);
sort(sd);
vivod(sd);
optimize(sd);
konechny(sd);

end.
Код:
unit obrabotki;
interface
uses ob;

implementation

procedure vvod(var Sd:product);
var i:integer;
begin
     for i:=1 to maxk do
     begin
     Sd[i].name:=(i);
     Sd[i].kol:=random(6) + 5;
     Sd[i].Sebest:= random(500)+100;
     Sd[i].cena:=Sd[i].sebest+random(100);
     Sd[i].work:=random(5)+5;
     end;
end;


procedure vivod(var Sd:product);
var i:integer;
begin
writeln('---------------------------------------------------------------');
writeln('|','Товар':5,'|','Eдиницы':5,'|','Себестоимость':10,'|','Цена':5,'|','Рабочие':8,'|','Производительность','|');
writeln('---------------------------------------------------------------');
for i:=1 to maxk do writeln('|',sd[i].name:4, '', sd[i].kol:6, '      ', sd[i].sebest, '           ', sd[i].cena, '      ', sd[i].work,'  | ' ,sd[i].proiz);
writeln('---------------------------------------------------------------');


end;
procedure podschet(var sd:product);
var i:integer;
begin
for i:=1 to maxk do begin
    sd[i].dohod:=sd[i].kol * sd[i].cena;
    sd[i].proiz:=sd[i].dohod / sd[i].work;
end;
end;

function Neponyatno(sd: product): real;//обща произв//
var
   i, count: integer;
begin
     result := 0;
     count := 0;
 for i := 1 to maxk do begin
                       if (sd[i].field = false) then begin
                       result := result + (sd[i].dohod / sd[i].work);
                       inc(count);
                                                       end;
                       end;
 result := result / count;
end;

function pervelem(sd: product): integer; // первый в списке
var
 i: integer;
 flag: boolean;
begin
 flag := false;
 i := 1;
 while ((i <= maxk) or (flag = false)) do begin
  if (sd[i].field = false) then begin
   result := i;
   flag := true;
  end;
  inc(i);
 end;
end;

function minsort (sd:product):integer;  //минимальный//
var
   i:integer;
   min:real;
begin
min := sd[pervelem(sd)].proiz;

 for i := 1 to maxk do
  if (sd[i].field = false) then
   if sd[i].proiz < min then begin
    result := i;
    min := sd[i].proiz;
   end;
end;
procedure sort(var sd: product); //сортировка
var
 i, j: integer;
 temp: tovar;
begin
 for j := 1 to maxk do
  for i := 1 to maxk - 1 do
   if (sd[i].proiz > sd[i + 1].proiz) then begin
     temp := sd[i];
     sd[i] := sd[i + 1];
     sd[i + 1] := temp;
   end;
end;

procedure optimize(var sd:product); //проверка
var
 i: integer;
 flag: boolean;

begin
 flag := false;
 i := maxk;
 b:= Neponyatno(sd);

 while ((flag = false) and (i < 1)) do begin
    sd[minsort(sd)].field := true;
  if (b * 2 <= Neponyatno(sd)) then flag := true;
  dec(i);
 end;
end;

procedure konechny(sd: product);
var
 i: integer;
begin
 writeln('______________________________');
 writeln('Производительность труда');
 writeln('До: ', b);
 writeln('После: ', Neponyatno(sd));
 writeln('______________________________');
 for i := 1 to maxk do begin
  if sd[i].field = true then write(i, ' ');
 end;
end;

end.
Код:
unit ob;
interface
const maxk=20;

type
tovar = record
name : integer;
kol  : integer;
sebest:real;
cena :real;
work :integer;
dohod:real;
proiz:real;
field:boolean;
end;


type
 product = array[1..maxk] of tovar;
var
    b:real;

 implementation
 end.
Руслан56 вне форума Ответить с цитированием
Старый 02.03.2014, 21:39   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,378
По умолчанию

Только в качестве небольшого замечания:
Streletz
Цитата:
Типы product и proiz уже описаны у ТС в модуле ob.
ViktorR
Цитата:
модуль obrabotki при компиляции требует описания массива fieldFlag[]
Код:
var sd:product;
    fieldFlag:proiz;
Я надеюсь, что Вы прекрасно понимаете разницу между описанием типов и описанием переменных.


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 02.03.2014, 22:05   #6
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Я надеюсь, что Вы прекрасно понимаете разницу между описанием типов и описанием переменных.
Понимаю превосходно. Просто, как и большинство людей под вечер из-за усталости торможу и поэтому не сразу Вас понял.
Streletz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Библиотека RX - неизвестный идентификатор CharInSet kariza Общие вопросы Delphi 19 20.12.2013 00:44
Неизвестный идентификатор Memo1 dubailand Общие вопросы Delphi 4 05.01.2012 19:08
Неизвестный идентификатор dubailand Общие вопросы Delphi 6 24.08.2011 12:15
Length неизвестный идентификатор почему? maks2020 Помощь студентам 4 02.11.2010 07:06
Ругаемся, говорим неизвестный идентификатор, хотя работало. Alex Cones Общие вопросы Delphi 6 21.04.2009 21:07