Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите отсортировать. Записи (http://www.tehnari.ru/f41/t51636/)

Karel 13.05.2011 21:07

Помогите отсортировать. Записи
 
Имеются сведения об обеспеченности жильем N работников предприятия: фамилия работника, количество человек в семье, количество кв. метров жилой площади. Также известно количество K новых квартир, которые получает предприятие. Требуется отпечатать список K работников, претендующих на новое жилье, полагая, что у всех работников разное количество кв. метров на человека.
Не могу отсортировать min количество кв.метров на человека.
Спасибо!
program sp;
uses crt;
const n=3;
type spisok=record
fio:string;
kolchel:integer;
kolkvmetrov:real;
metrnachel:real;
end;
var
i,K:integer;
min:real;
rabotnik:array[1..n] of spisok;
begin
clrscr;
i:=0;
for i:=1 to n do
with rabotnik[i] do
begin
writeln('vvedite svedenia o rabotnike');
writeln('vvedite fam, name, otch');
readln(fio);
writeln('vvedite kolichestvo chel');
readln(kolchel);
writeln('vvedite kolichestvo kvad.metrov');
readln(kolkvmetrov);
metrnachel:=kolkvmetrov/kolchel;
end;
write('K:=');
readln(K);
writeln('spisok rabotnikov:');
min:=rabotnik[1].metrnachel;
for i:=1 to n do
begin
if rabotnik[1].metrnachel<=min then
begin
min:=rabotnik[i].metrnachel;
write(rabotnik[i].fio,' ');
write('kolichestvo kvadrat. metrov na 1 cheloveka:',' ');
write(min,' ');
end;
end;
readln;
end.

Vladimir_S 13.05.2011 21:37

Цитата:

Сообщение от Karel (Сообщение 519804)
Не могу отсортировать min количество кв.метров на человека.

Главная ошибка - в цикле сравнения должно быть не
if rabotnik[1].metrnachel<=min then, а
if rabotnik[i].metrnachel<=min then
Кроме того, подправил и подчистил программу, например, убрал в начале абсолютно ненужное обнуление переменной цикла (i:=0), выбросил K - оно не используется, отредактировал вывод - вместо
write('kolichestvo kvadrat. metrov na 1 cheloveka:',' ');
write(min,' ');
сейчас
write('kolichestvo kvadrat. metrov na 1 cheloveka: ');
writeln(min:5:1); .
Итого:
Код:

program sp;
uses crt;
const
 n=3;
type spisok=record
  fio:string;
  kolchel:integer;
  kolkvmetrov:real;
  metrnachel:real;
end;
var
 i:integer;
 min:real;
 rabotnik:array[1..n] of spisok;
begin
 clrscr;
 for i:=1 to n do
  with rabotnik[i] do
  begin
    writeln('vvedite svedenia o rabotnike');
    writeln('vvedite fam, name, otch');
    readln(fio);
    writeln('vvedite kolichestvo chel');
    readln(kolchel);
    writeln('vvedite kolichestvo kvad.metrov');
    readln(kolkvmetrov);
    metrnachel:=kolkvmetrov/kolchel;
  end;
 writeln('spisok rabotnikov:');
 min:=rabotnik[1].metrnachel;
 for i:=1 to n do
  begin
  if rabotnik[i].metrnachel<=min then
    begin
    min:=rabotnik[i].metrnachel;
    write(rabotnik[i].fio,' ');
    write('kolichestvo kvadrat. metrov na 1 cheloveka: ');
    writeln(min:5:1);
    end;
  end;
 readln;
end.

А вообще - правильно ли искать минимум? Может быть следует просто вывести список работников, у кого обеспеченность квадратными метрами на человека ниже заранее установленной нормы? Мне кажется, так было бы логичнее. Впрочем, Вам виднее.

Karel 13.05.2011 21:56

Цитата:

Сообщение от Vladimir_S (Сообщение 519825)
Главная ошибка - в цикле сравнения должно быть не
if rabotnik[1].metrnachel<=min then, а
if rabotnik[i].metrnachel<=min then
Кроме того, подправил и подчистил программу, например, убрал в начале абсолютно ненужное обнуление переменной цикла (i:=0), выбросил K - оно не используется, отредактировал вывод - вместо
write('kolichestvo kvadrat. metrov na 1 cheloveka:',' ');
write(min,' ');
сейчас
write('kolichestvo kvadrat. metrov na 1 cheloveka: ');
writeln(min:5:1); .
Итого:
Код:

program sp;
uses crt;
const
 n=3;
type spisok=record
  fio:string;
  kolchel:integer;
  kolkvmetrov:real;
  metrnachel:real;
end;
var
 i:integer;
 min:real;
 rabotnik:array[1..n] of spisok;
begin
 clrscr;
 for i:=1 to n do
  with rabotnik[i] do
  begin
    writeln('vvedite svedenia o rabotnike');
    writeln('vvedite fam, name, otch');
    readln(fio);
    writeln('vvedite kolichestvo chel');
    readln(kolchel);
    writeln('vvedite kolichestvo kvad.metrov');
    readln(kolkvmetrov);
    metrnachel:=kolkvmetrov/kolchel;
  end;
 writeln('spisok rabotnikov:');
 min:=rabotnik[1].metrnachel;
 for i:=1 to n do
  begin
  if rabotnik[i].metrnachel<=min then
    begin
    min:=rabotnik[i].metrnachel;
    write(rabotnik[i].fio,' ');
    write('kolichestvo kvadrat. metrov na 1 cheloveka: ');
    writeln(min:5:1);
    end;
  end;
 readln;
end.

А вообще - правильно ли искать минимум? Может быть следует просто вывести список работников, у кого обеспеченность квадратными метрами на человека ниже заранее установленной нормы? Мне кажется, так было бы логичнее. Впрочем, Вам виднее.

Нормы нету!
Получается если min у второго работника, то в выводе он не отображается.

Vladimir_S 13.05.2011 21:58

Цитата:

Сообщение от Karel (Сообщение 519838)
Получается если min у второго работника, то в выводе он не отображается.

В моём варианте программы - отображается. Проверьте.

Karel 13.05.2011 22:26

Спасибо!!!Vladimir_S:tehnari_ru_674:


Часовой пояс GMT +4, время: 19:34.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.