Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 18.05.2011, 22:29   #1 (permalink)
Karel
Новичок
 
Регистрация: 13.05.2011
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите найти ошибку

Имеются сведения об обеспеченности жильем 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,j,K,num: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;
write('K:=');
readln(K);
writeln('spisok rabotnikov:');
for i:=1 to K do
begin
min:=rabotnik[i].metrnachel;
for j:=1 to n do
begin
if rabotnik[j].metrnachel>=min then
begin
min:=rabotnik[j].metrnachel;
num:=j;
write(rabotnik[j].fio,' ');
write('kolichestvo kvadrat. metrov na 1 cheloveka: ');
writeln(min:5:1);
end;
num:=j;
end;
end;
rabotnik[i].metrnachel:=1.7e38;
readln;
end.
Karel вне форума   Ответить с цитированием

Старый 18.05.2011, 22:29
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Ваша проблема будет решаться значительно легче, если ознакомиться с похожими темами

Помогите найти ошибку в программе
Помогите найти ошибку, Pascal abc
Задача на массивы, Pascal. Помогите найти ошибку

Старый 18.05.2011, 23:03   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Не очень понял, зачем было новую тему открывать, если есть эта:
Помогите отсортировать. Записи , ну да ладно.
Здесь Вам надо просто упорядочить по возрастанию обеспеченностей методом "пузырька" массив записей и внести в список претендентов первые К.
P.S. А вообще-то неплохо люди обеспечены, если у кого-то приходится сколько-то там квадратных мегапарсеков на человека.
Цитата:
rabotnik[i].metrnachel:=1.7e38;
Vladimir_S вне форума   Ответить с цитированием
Старый 19.05.2011, 17:08   #3 (permalink)
Karel
Новичок
 
Регистрация: 13.05.2011
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
.
Здесь Вам надо просто упорядочить по возрастанию обеспеченностей методом "пузырька" массив записей и внести в список претендентов первые К.
Попробывал отсортировать массив записей, пишет ошибку не соответствие типов Record и integer
Karel вне форума   Ответить с цитированием
Старый 19.05.2011, 17:32   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Karel Посмотреть сообщение
Попробывал отсортировать массив записей, пишет ошибку не соответствие типов Record и integer
Покажите - посмотрим.
Vladimir_S вне форума   Ответить с цитированием
Старый 20.05.2011, 21:34   #5 (permalink)
Karel
Новичок
 
Регистрация: 13.05.2011
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Покажите - посмотрим.
Почему-то не меняет фамилии местами и не всегда выводит все min.
program sp;
uses crt;
const
n=3;
type spisok=record
fio:string;
kolchel:integer;
kolkvmetrov:real;
metrnachel:real;
end;
var
i,j,K,num: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;
write('K:=');
readln(K);
writeln('spisok rabotnikov:');
for i:=1 to K-1 do
begin
min:=rabotnik[i].metrnachel;
for j:=1 to n do
if rabotnik[i].metrnachel>rabotnik[j].metrnachel then
begin
min:=rabotnik[i].metrnachel;
rabotnik[i].metrnachel:=rabotnik[j].metrnachel;
rabotnik[j].metrnachel:=min;
end;
write(rabotnik[i].fio,' ');
write('kolichestvo kvadrat. metrov na 1 cheloveka: ');
writeln(min:5:1);
end;
readln;
end.
Karel вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 21.05.2011, 19:34   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Karel Посмотреть сообщение
Попробывал отсортировать массив записей, пишет ошибку не соответствие типов Record и integer
Ладно, вот Вам еще вариант решения задачи - с моей точки зрения, полностью удовлетворяющий поставленным условиям. Уж если и это Вас не устроит, то... В любом варианте, больше помочь ничем не могу.
Код:
program sp;
uses crt;
const
 n=3;
type spisok=record
  fio:string;
  kolchel:integer;
  kolkvmetrov:real;
  metrnachel:real;
end;
var
 i,j,K:integer;
 rabotnik:array[1..n] of spisok;
 rab: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;
 write('Kolichestvo kvartir= ');
 readln(K);

 for i:=1 to n do
  for j:=n downto i+1 do
   if rabotnik[j-1].metrnachel>rabotnik[j].metrnachel then
    begin
     rab:=rabotnik[j-1];
     rabotnik[j-1]:=rabotnik[j];
     rabotnik[j]:=rab;
    end;

 clrscr;
 writeln('Spisok rabotnikov:');
 writeln;
 writeln('Pretendenty:');
 for i:=1 to K do
  with rabotnik[i] do
   begin
    write(fio);
    for j:=Length(fio)+1 to 40 do write(' ');
    writeln(kolchel:3,kolkvmetrov:7:1,metrnachel:7:1);
   end;
 writeln;
 writeln('Prochie:');
 for i:=K+1 to n do
  with rabotnik[i] do
   begin
    write(fio);
    for j:=Length(fio)+1 to 40 do write(' ');
    writeln(kolchel:3,kolkvmetrov:7:1,metrnachel:7:1);
   end;
 readln;
end.
Vladimir_S вне форума   Ответить с цитированием
Старый 23.05.2011, 18:20   #7 (permalink)
Karel
Новичок
 
Регистрация: 13.05.2011
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо!!!
Karel вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.