1 Востаннє редагувалося Torbins (06.01.2014 22:52:31)

Тема: Таблиці - відфільтрувати записи з данними про холодильники

доброго дня! З наступаючим Різдвом вас! Будь ласка допоможіть мені знайти помилку в коді! Треба вивести в табличку ті холодильники, які є 1993 року випуску. Коли я ввів дані, в мене виводить всі холодильники, :( а треба лише 1993 року

const 
      n=5;
 type
    xolod = record
      virobn:string[50];
      nazvanie:string[45];
      kamera:real;
      rik:integer;
      misce:string[45];
      cina:real;
      kilkist:real;
    end;
   var
      i:integer;
      tabl:array[1..n] of xolod;
      procedure lin(m:integer);
      var
         i:integer;
  begin
  for i:=1 to m do
  write('-');
  writeln;
  end;
  
  begin
  Writeln('Vvedi danni');
  For i:=1 to n do
  begin
   Write('virobn:'); readln(tabl[i].virobn);
     Write('nazvanie:'); readln(tabl[i].nazvanie);
     Write('kamera:');  readln(tabl[i].kamera);
     Write('rik:'); readln(tabl[i].rik);
     Write('misce:'); readln(tabl[i].misce);
     Write('cina:'); readln(tabl[i].cina);
     Write('kilkist:'); readln(tabl[i].kilkist);
  end;
  Lin(69);
  writeln(' | Виробництво | Назва | Обэм Камери | Рік | Місце | Ціна | Кількість|');
  Lin(69);
  For i:=1 to n do
  begin
   write(' |', tabl[i].virobn:10,'|');
write(tabl[i].nazvanie:10,'|',tabl[i].kamera:13,'|', tabl[i].rik:4,'|', tabl[i].misce:9,'|' , tabl[i].cina:9,'|' , tabl[i].kilkist:9,'|');
writeln;
Lin(69);
end;
  writeln;
  writeln('vidsortovano');
  Lin(69);
  For i:=1 to  n do
  begin
  If  (tabl[i].rik >= 1993) then
write(' |', tabl[i].virobn:10,'|');
write(tabl[i].nazvanie:15,'|',tabl[i].kamera:16,'|', tabl[i].rik:4,'|', tabl[i].misce:9,'|' , tabl[i].cina:9,'|' , tabl[i].kilkist:9,'|');
  writeln;
  Lin(69);
  end;
  End.

2

Re: Таблиці - відфільтрувати записи з данними про холодильники

У вас умова

tabl[i].rik >= 1993

а має просто рівнятися.

3 Востаннє редагувалося Logans (06.01.2014 03:58:16)

Re: Таблиці - відфільтрувати записи з данними про холодильники

Добрий вечір.

Нічого нового я вам не скажу, просто залишу це тут:

Код

const n=5;

type
  xolod = record
    virobn:string[50];
    nazvanie, misce:string[45];
    rik:integer;
    cina, kilkist, kamera:real;
  end;
    
var
  i:integer;
  tabl:array[1..n] of xolod;

procedure lin(m:integer);
var i:integer;
begin
  for i := 1 to m do
    write('-');
  writeln;
end;
  
begin
  Writeln('Vvedi danni');
  
  for i := 1 to n do
  begin
    Write('virobn:');   readln(tabl[i].virobn);
    Write('nazvanie:'); readln(tabl[i].nazvanie);
    Write('kamera:');   readln(tabl[i].kamera);
    Write('rik:');      readln(tabl[i].rik);
    Write('misce:');    readln(tabl[i].misce);
    Write('cina:');     readln(tabl[i].cina);
    Write('kilkist:');  readln(tabl[i].kilkist);
  end;
  
  Lin(69);
  writeln(' | Виробництво | Назва | Обэм Камери | Рік | Місце | Ціна | Кількість|');
  Lin(69);
  
  for i := 1 to n do
  begin
    write(' |', tabl[i].virobn:10,'|');
    write(tabl[i].nazvanie:10,'|',tabl[i].kamera:13,'|', tabl[i].rik:4,'|', 
          tabl[i].misce:9,'|' , tabl[i].cina:9,'|' , tabl[i].kilkist:9,'|');
    writeln;
    Lin(69);
  end;
  
  writeln;
  writeln('vidsortovano');
  Lin(69);
  
  for i := 1 to  n do
  begin
    if (tabl[i].rik >= 1993) then
      write(' |', tabl[i].virobn:10,'|');
      
    write(tabl[i].nazvanie:15,'|',tabl[i].kamera:16,'|', tabl[i].rik:4,'|', 
          tabl[i].misce:9,'|' , tabl[i].cina:9,'|' , tabl[i].kilkist:9,'|');
    writeln;
    Lin(69);
  end;
  readln;
end.

Для тих, хто не зрозумів, я просто структуризував код для приємнішого вигляду.

P.S. Не зміг втриматись.
P.S.S. Умову я вам не переправляв, я так розумію ви вже самі зрозуміли і переправили.

"Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."
- Linus Torvalds
Подякували: koala1

4

Re: Таблиці - відфільтрувати записи з данними про холодильники

Починаємо змагання? :)

Код

const
  n = 5;

type
  xolod = record
    virobn:                string[50];
    nazvanie, misce:       string[45];
    rik:                   integer;
    cina, kilkist, kamera: real
  end;

var
  i:    integer;
  tabl: array[1..n] of xolod;

procedure lin(m: integer);
var
  i: integer;
begin
  for i := 1 to m do
    write('-');
  writeln
end;

procedure output(x: xolod);
begin
  with x do begin
    writeln( ' |', virobn:  10, 
              '|', nazvanie:10, 
              '|', kamera:  13,
              '|', rik:      4,
              '|', misce:    9,
              '|', cina:     9,
              '|', kilkist:  9,
              '|');
    Lin(69)
  end
end;

begin
  Writeln('Vvedi danni');
  
  for i := 1 to n do with tabl[ i ] do
  begin
    write('virobn:'  ); readln(virobn  );
    write('nazvanie:'); readln(nazvanie);
    write('kamera:'  ); readln(kamera  );
    write('rik:'     ); readln(rik     );
    write('misce:'   ); readln(misce   );
    write('cina:'    ); readln(cina    );
    write('kilkist:' ); readln(kilkist );
  end;
  
  Lin(69);
  writeln(' | Виробництво | Назва | Обэм Камери | Рік | Місце | Ціна | Кількість|');
  Lin(69);
  
  for i := 1 to n do
    output(tabl[i]);
  
  writeln;
  writeln('vidsortovano');
  Lin(69);
  
  for i := 1 to  n do
    if tabl[i].rik >= 1993 then
      output(tabl[i]);
  readln
end.

Подякували: Logans1

5

Re: Таблиці - відфільтрувати записи з данними про холодильники

koala написав:

Починаємо змагання? :)

Код

const
  n = 5;

type
  xolod = record
    virobn:                string[50];
    nazvanie, misce:       string[45];
    rik:                   integer;
    cina, kilkist, kamera: real
  end;

var
  i:    integer;
  tabl: array[1..n] of xolod;

procedure lin(m: integer);
var
  i: integer;
begin
  for i := 1 to m do
    write('-');
  writeln
end;

procedure output(x: xolod);
begin
  with x do begin
    writeln( ' |', virobn:  10, 
              '|', nazvanie:10, 
              '|', kamera:  13,
              '|', rik:      4,
              '|', misce:    9,
              '|', cina:     9,
              '|', kilkist:  9,
              '|');
    Lin(69)
  end
end;

begin
  Writeln('Vvedi danni');
  
  for i := 1 to n do with tabl[ i ] do
  begin
    write('virobn:'  ); readln(virobn  );
    write('nazvanie:'); readln(nazvanie);
    write('kamera:'  ); readln(kamera  );
    write('rik:'     ); readln(rik     );
    write('misce:'   ); readln(misce   );
    write('cina:'    ); readln(cina    );
    write('kilkist:' ); readln(kilkist );
  end;
  
  Lin(69);
  writeln(' | Виробництво | Назва | Обэм Камери | Рік | Місце | Ціна | Кількість|');
  Lin(69);
  
  for i := 1 to n do
    output(tabl[i]);
  
  writeln;
  writeln('vidsortovano');
  Lin(69);
  
  for i := 1 to  n do
    if tabl[i].rik >= 1993 then
      output(tabl[i]);
  readln
end.

Прихований текст
http://tsikave.ostriv.in.ua/images/publications/4/16066/content/ziareroma.jpg
"Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."
- Linus Torvalds

6 Востаннє редагувалося misha_beginner (06.01.2014 14:57:41)

Re: Таблиці - відфільтрувати записи з данними про холодильники

koala написав:

У вас умова

tabl[i].rik >= 1993

а має просто рівнятися.

зробив, всеодно не робить сортування поставив  = знак! виводить практично всі ті самі холодильники

Post's attachments

Безымянный.jpg 324.56 kb, 122 downloads since 2014-01-06 

7

Re: Таблиці - відфільтрувати записи з данними про холодильники

For i:=1 to  n do
  begin
  If  (tabl[i].rik = 1993) then
{може, сюди begin}
write(' |', tabl[i].virobn:10,'|'); 
write(tabl[i].nazvanie:15,'|',tabl[i].kamera:16,'|', tabl[i].rik:4,'|', tabl[i].misce:9,'|' , tabl[i].cina:9,'|' , tabl[i].kilkist:9,'|');
  writeln;
  Lin(69);
{а сюди end; бракує?}
  end;
I belong to the Dead Generation.

8

Re: Таблиці - відфільтрувати записи з данними про холодильники

О Боже... а я сподівався, що ви, якщо вже розставляєте таку кількість "магічних констант", то хоча б перевіряєте їх...
Проблема в тому, що ви після умови виводите ще й решту холодильників, а непомітно це через те, що ви:
- не вирівнюєте код; порівняйте ваше

  For i:=1 to  n do
  begin
  If  (tabl[i].rik >= 1993) then
write(' |', tabl[i].virobn:10,'|');
write(tabl[i].nazvanie:15,'|',tabl[i].kamera:16,'|', tabl[i].rik:4,'|', tabl[i].misce:9,'|' , tabl[i].cina:9,'|' , tabl[i].kilkist:9,'|');
  writeln;
  Lin(69);
  end;

з вирівненим

  For i:=1 to  n do
  begin
    If  (tabl[i].rik >= 1993) then
      write(' |', tabl[i].virobn:10,'|');
    write(tabl[i].nazvanie:15,'|',tabl[i].kamera:16,'|', tabl[i].rik:4,'|', tabl[i].misce:9,'|' , tabl[i].cina:9,'|' ,  tabl[i].kilkist:9,'|');
    writeln;
    Lin(69);
  end;

Одразу ж видно, що всередині if, а що зовні!

- не вирівнюєте вивід; якби таблиця була правильно складена, то ви б одразу побачили, що у виводі не вистачає стовбчика.

9

Re: Таблиці - відфільтрувати записи з данними про холодильники

koala написав:

О Боже... а я сподівався, що ви, якщо вже розставляєте таку кількість "магічних констант", то хоча б перевіряєте їх...
Проблема в тому, що ви після умови виводите ще й решту холодильників, а непомітно це через те, що ви:
- не вирівнюєте код; порівняйте ваше

  For i:=1 to  n do
  begin
  If  (tabl[i].rik >= 1993) then
write(' |', tabl[i].virobn:10,'|');
write(tabl[i].nazvanie:15,'|',tabl[i].kamera:16,'|', tabl[i].rik:4,'|', tabl[i].misce:9,'|' , tabl[i].cina:9,'|' , tabl[i].kilkist:9,'|');
  writeln;
  Lin(69);
  end;

з вирівненим

  For i:=1 to  n do
  begin
    If  (tabl[i].rik >= 1993) then
      write(' |', tabl[i].virobn:10,'|');
    write(tabl[i].nazvanie:15,'|',tabl[i].kamera:16,'|', tabl[i].rik:4,'|', tabl[i].misce:9,'|' , tabl[i].cina:9,'|' ,  tabl[i].kilkist:9,'|');
    writeln;
    Lin(69);
  end;

Одразу ж видно, що всередині if, а що зовні!

- не вирівнюєте вивід; якби таблиця була правильно складена, то ви б одразу побачили, що у виводі не вистачає стовбчика.

тьху... тепер зрозумів, вибачте за мою неуважність і невмілість, старатимусь бути уважнішим

10

Re: Таблиці - відфільтрувати записи з данними про холодильники

Bartash написав:
For i:=1 to  n do
  begin
  If  (tabl[i].rik = 1993) then
{може, сюди begin}
write(' |', tabl[i].virobn:10,'|'); 
write(tabl[i].nazvanie:15,'|',tabl[i].kamera:16,'|', tabl[i].rik:4,'|', tabl[i].misce:9,'|' , tabl[i].cina:9,'|' , tabl[i].kilkist:9,'|');
  writeln;
  Lin(69);
{а сюди end; бракує?}
  end;

ура.. блін точно забув поставити сюди бегін. йолкі палкі. це ж коли декілька операцій йде треба ставити бегін. дякую