Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ записи - структура (пару вопросов)

Автор: felmor 22.05.2009 21:13

Доброго времени суток. Очень требуется Ваша помощь.
Возникла маленькая проблема в данном коде, дело в том что я незнаю как поставить правильно запрос в данной процедуре (в основном коде я её выделил):


Код
procedure search;
  var j,men:integer;
   begin
              reset(meter);
    read(meter,i);
    close(meter);
              reset(t);
   j:=1;
   read(t,str);
   men:=str.cost;
    for j:=2 to i do begin
    read(t,str);
if men>deposit.cost then men:=str.client.cost;[B]<<<проблема тут(задание- см.ФОТО[/B]
    end;
   close(t);
             reset(t);
             for j:=1 to i do
    begin
    read(t,str);
     if min=str.cost then
      begin
      clrscr;
    writeln(j,' firm - ',str.firm);
    writeln('   cena- ',str.cost);
    writeln('   type - ',str.type);
    writeln('   money ');
    writeln('   deposit - ',str.client.deposit);
    writeln('   procent - ',str.client.proc);
    writeln('    ne vipl summa - ',str.client.npaid);
       TextColor(15);
       readln;
       end;
    end;
    TextColor(15);
    writeln(' press any key ');
    readln;
   end;


Изображение
Я думаю тут особо копатся в программе не надо, что бы понят как сделать правильно
Надеюсь на вашу помощь

ВЕСЬ КОД ПРОГРАММЫ:

Код
Program felkurs;    
uses crt,graph;
type
      person =record
      proc:byte;
      deposit:byte;
      npaid:integer;
   end;

     structure= record
     firm:string[25];
     cost:integer;
     type:string[25];
     client:person;
  end;
constructions = file of structure;
little = file of byte;
var i,v:byte;
       t:constructions;
       meter:little;
       str:structure;

procedure enter;

label 1,2,3,4,5,6,7;
begin
   clrscr;
   writeln('  enter type stroeniya');
   6:readln(str.type);
   if str.type='' then
    begin
    TextColor(9+111);
    writeln('  vi ne vveli type');
    writeln;
    TextColor(15);
    writeln('  poprobuyte vvesti snova');
    goto 6;
    end;
    writeln('  enter ',i,' cost');
    7:readln(str.cost);
    if str.cost='' then
    begin
    TextColor(9+111);
    writeln(' vi ne vveli cost');
    writeln;
    TextColor(15);
    writeln(' poprobuyte vvesti snova');
    goto 7;
    end;
   writeln('  vvedite firm');
   3:readln(str.firm);
   if str.firm ='' then
    begin
    TextColor(9+111);
    writeln(' vi ne vveli firm ');
    writeln;
    TextColor(15);
    writeln('  poprobuyte vvesti snova');
    goto 3;
    end;
   writeln('  vvedite client');
   1:writeln('  npaid');
   readln(str.client.npaid);
      if str.client.npaid >=32 then
       begin
       TextColor(9+111);
       writeln(' error of input  ');
       TextColor(15);
       goto 1;
       end;
   2:writeln('  deposit');
   readln(str.client.deposit);
   if str.client.deposit >=13 then
       begin
       TextColor(9+111);
       writeln(' error of input   ');
       TextColor(15);
       goto 2;
       end;
         writeln('    proc');
   readln(str.client.proc);
   writeln;
   TextColor(15);
   writeln('  press any key ');
   readln;
  end;

  procedure klient;
  begin
  i:=1;
   rewrite(meter);
   write(meter,i);
   close(meter);
             rewrite(t);
   enter;
   write(t,str);
   close(t);
   end;

            procedure addition;
  begin
   reset(meter);
   read(meter,i);
   close(meter);
   i:=i+1;
   rewrite(meter);
   write(meter,i);
   close(meter);
    reset(t);
   seek(t,filesize(t));
   enter;
   write(t,str);
   close(t);
   end;

   procedure output;
  var m,j,s:integer;
  begin
  s:=2;
            reset(meter);
  read(meter,i);
  close(meter);
            clrscr;
    for j:=1 to i do
begin
    reset(t);
    read(t,str);
    TextColor(2);
    writeln(j,' firm - ',str.firm);
    writeln('   cena- ',str.cost);
    writeln('   type - ',str.type);
    writeln('   money ');
    writeln('   deposit - ',str.client.deposit);
    writeln('   procent - ',str.client.proc);
    writeln('    ne vipl summa - ',str.client.npaid);
     if (j=s) and (s<i) then
       begin
       writeln;
       TextColor(15);
       writeln(' next');
       TextColor(15);
       readkey;
       s:=s+2;
       m:=i-j-2;
       clrscr;
    end;
end;
  writeln;
  TextColor(15);
   writeln('  press any key');
   readkey;
close(t);
end;



            [B]procedure search;
  var j,men:integer;
   begin
              reset(meter);
    read(meter,i);
    close(meter);
              reset(t);
   j:=1;
   read(t,str);
   men:=str.cost;
    for j:=2 to i do begin
    read(t,str);
      if men>deposit.cost then men:=str.client.cost;
    end;
   close(t);
             reset(t);
             for j:=1 to i do
    begin
    read(t,str);
     if min=str.cost then
      begin
      clrscr;
    writeln(j,' firm - ',str.firm);
    writeln('   cena- ',str.cost);
    writeln('   type - ',str.type);
    writeln('   money ');
    writeln('   deposit - ',str.client.deposit);
    writeln('   procent - ',str.client.proc);
    writeln('    ne vipl summa - ',str.client.npaid);
       TextColor(15);
       readln;
       end;
    end;
    TextColor(15);
    writeln(' press any key ');
    readln;
   end;[/B]

procedure searchname;
var client:string;
     j,k:integer;
     label 1;
  begin
            reset(meter);
  read(meter,i);
  close(meter);
  clrscr;
  TextColor(15);
  writeln('  enter client');
  TextColor(15);
  1: readln(client);
  if client='' then
    begin
    TextColor(9+111);
    writeln('  vi ne vveli client');
    writeln;
    TextColor(15);
    writeln('  vvedite snova');
    goto 1;
    end;
  reset(t);
   k:=0;
   for j:=1 to i do
   begin
    read(t,str);
    if client=str.firm then
     begin
     k:=k+1;
     TextColor(15);
    writeln(j,' firm - ',str.firm);
    writeln('   cena- ',str.cost);
    writeln('   type - ',str.type);
    writeln('   money ');
    writeln('   deposit - ',str.client.deposit);
    writeln('   procent - ',str.client.proc);
    writeln('    ne vipl summa - ',str.client.npaid);
     writeln('for continue press any key');
     readln;
     end;
     end;
    if k=0 then
    begin
    TextColor(15);
    writeln('  isn.t found');
    end;
    writeln;
    TextColor(13);
    writeln('  press any key');
    readln;
    end;

          begin

assign(t,'str.to');
assign(meter,'meter.to');
repeat
clrscr;
TextColor(15);
writeln('  choose variant');
TextColor(15);
writeln('  1-enter new structure');
writeln('  2-add structure');
writeln('  3-output all data');
writeln('  4-search clients deposit < str');
writeln('  5-search at name of client');
TextColor(15);
writeln('  6-quit');
readln(v);
case v of
1:receipt;
2:addition;
3:output;
4:search;
5:searchname;
end;
until v=6;
         end.



Автор: volvo 22.05.2009 22:05

У тебя не сказано, что надо искать какие-то минимумы. Достаточно:

reset(t);
while not eof(t) do begin
read(t, str);
if str.cost > str.client.deposit then begin
{ Здесь выводишь нужные данные, условие выполнено }
end;
end;

Автор: felmor 23.05.2009 12:22

спасибо за поддержку