• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Задача на массив

Тетрадь

Новые
Регистрация
16 Ноя 2013
Сообщения
22
Реакции
0
Баллы
0
Задача на массив

Завод выпускает 20 наименований продукции. Про каждый вид продукции известно: сколько единиц этой продукции выпускает завод, себестоимость и отпускная цена единицы продукции, сколько человек занято на выпуске этой продукции. От каких видов продукции завод должен отказаться, чтобы общая производительность труда повысилась вдвое? ({производительность труда} = {доход от продажи продукции} / {количество человек, принимающих участие в ее производстве}).

Тема двумерных массивы. Нужно написать эту программу с подпрограммами.
Помогите в написании данной программы. Сам не справлюсь
 
Можете пожалуйста объяснить спаму задачу, последовательность действий, что сначала нужно найти, а что потом?
 
Отпускная цена минут себестоимость. Результат умножить на кол-во единиц.
Далее, вычисляем производительность для каждого наименования: Делим получившееся выше на кол-во человек. И создаем массив: наименование и производительность.
Затем высчитываем общую производительность - суммируем производительность всех наименований и делим на 20.
Ну а дальше, думаю, уже понятно :)
 
Нужно написать эту программу
Абсолютно невозможно! Наши штатные телепаты в отпуске, а без них определить язык программирования, тайну которого Вы, очевидно, поклялись не выдавать даже под пыткой, мы не можем.
Отпускная цена минут себестоимость. Результат умножить на кол-во единиц. Далее, вычисляем производительность для каждого наименования: Делим получившееся выше на кол-во человек. И создаем массив: наименование и производительность. Затем высчитываем общую производительность - суммируем производительность всех наименований и делим на 20. Ну а дальше, думаю, уже понятно
Да, в свете вышесказанного - это максимум того, чем мы можем помочь.
 
Могу поковыряться, но при условии, что Вы придумаете все входные данные (наименования, себестоимости и т.д.) и выложите в любом виде.
 
Задачу можно в в виде записей делать. Наименование не нужно, просто 20 деталей, себестоимость и т.д можно взять любые числа.
 
Задачу можно в в виде записей делать. Наименование не нужно, просто 20 деталей, себестоимость и т.д можно взять любые числа.
Вообще-то с подобными задачами я посылаю... сюда. Но в Вашей меня заинтересовал алгоритм удвоения суммарной производительности. Ладно, займусь.
 
Ну вот, получИте:
Код:
Type
 Prod=Record
       N:Byte;
       Num,Prime,Price,Work:Integer;
       Productivity_Local:Real;
      End;

Var
 Prd:Array[1..20] of Prod;
 Bad:Set of Byte;
 Productivity_Initial,Min,Max,Productivity_Current:Real;
 f:Text;
 i,Im,k:Integer;

Function Productivity:Real;
var
 j:Integer;
 Sum,Sum_Work:Real;
begin
 Sum:=0;
 Sum_Work:=0;
 for j:=1 to 20 do
  with Prd[j] do
   If Not(N in Bad) then
    begin
     Sum:=Sum+(Price-Prime)*Num;
     Sum_Work:=Sum_Work+Work;
    end;
 Productivity:=Sum/Sum_Work;
end;

Begin
 Bad:=[];
 Assign(f,'D:\Data.txt');
 Reset(f);
 For i:=1 to 20 do
  with Prd[i] do
   begin
    Readln(f, N,Num,Prime,Price,Work);
    Productivity_Local:=(Price-Prime)*Num/Work;
   end;
 Close(f);
 Productivity_Initial:=Productivity;
 Max:=Prd[1].Productivity_Local;
 For i:=2 to 20 do
  If Prd[i].Productivity_Local>Max then Max:=Prd[i].Productivity_Local;
 k:=0;
 Repeat
  Inc(k);
  Min:=Max;
  For i:=1 to 20 do
   If Not(i in Bad) and (Prd[i].Productivity_Local<Min) then
    begin
     Min:=Prd[i].Productivity_Local;
     Im:=i;
    end;
  Bad:=Bad+[Im];
  Productivity_Current:=Productivity;
 Until (Productivity_Current>=Productivity_Initial*2) or (k=20);
 Write('The plant must refuse from the positions:');
 For i:=1 to 20 do
  if i in Bad then Write(i:3);
 Writeln;
 Writeln('Inial productivity: ',Productivity_Initial:0:3);
 Writeln('Final productivity: ',Productivity_Current:0:3);
 Readln;
End.

Несколько пояснений:
1. Исходные данные помещены в файл по имени Data.txt (прилагается). У меня он расположен на диске D, так что поправьте путь в программе, если надо. Колонки: порядковый номер, количество изделий (напр. в год), себестоимость, цена, количество рабочих.
2. Программа писалась и отлаживалась в НОРМАЛЬНОМ Паскале (Free). За глюки этого богомерзкого АВС не отвечаю!
3. Вкратце - алгоритм. В каждой записи вычисляется "локальная" производительность, как доход/кол-во рабочих. При каждом прохождении цикла отсева находится номер записи с минимальным значением "локальной" производительности, этот номер вносится в "черный список" и из нового расчета общей производительности исключается.
 

Вложения

  • Data.txt
    Data.txt
    379 байт · Просмотры: 494
Спасибо, вы использовали процедуру файл? просто мы еще не изучили, и такую задачу не примут
 
Спасибо, вы использовали процедуру файл? просто мы еще не изучили, и такую задачу не примут
Сочувствую. Ну так распишите присвоение значений полей записей с консоли либо в явном виде. А лучше скажите преподавателю, что самостоятельно освоили файловые операции. И освойте.
Впрочем, подозреваю, что препод Вам всё равно не поверит, а потому - вот вариант (редкостно тупой) без файла:
Код:
Type
 Prod=Record
       N:Byte;
       Num,Prime,Price,Work:Integer;
       Productivity_Local:Real;
      End;

Var
 Prd:Array[1..20] of Prod;
 Bad:Set of Byte;
 Productivity_Initial,Min,Max,Productivity_Current:Real;
 i,Im,k:Integer;

Function Productivity:Real;
var
 j:Integer;
 Sum,Sum_Work:Real;
begin
 Sum:=0;
 Sum_Work:=0;
 for j:=1 to 20 do
  with Prd[j] do
   If Not(N in Bad) then
    begin
     Sum:=Sum+(Price-Prime)*Num;
     Sum_Work:=Sum_Work+Work;
    end;
 Productivity:=Sum/Sum_Work;
end;

Begin
 Bad:=[];
 Prd[ 1].N:= 1; Prd[ 1].Num:=  30; Prd[ 1].Prime:= 120; Prd[ 1].Price:=190; Prd[ 1].Work:=  5;
 Prd[ 2].N:= 2; Prd[ 2].Num:= 110; Prd[ 2].Prime:= 333; Prd[ 2].Price:=578; Prd[ 2].Work:= 25;
 Prd[ 3].N:= 3; Prd[ 3].Num:=  65; Prd[ 3].Prime:=  99; Prd[ 3].Price:=181; Prd[ 3].Work:= 12;
 Prd[ 4].N:= 4; Prd[ 4].Num:= 770; Prd[ 4].Prime:=   6; Prd[ 4].Price:= 14; Prd[ 4].Work:= 10;
 Prd[ 5].N:= 5; Prd[ 5].Num:= 490; Prd[ 5].Prime:= 146; Prd[ 5].Price:=239; Prd[ 5].Work:= 58;
 Prd[ 6].N:= 6; Prd[ 6].Num:= 200; Prd[ 6].Prime:=  33; Prd[ 6].Price:= 57; Prd[ 6].Work:= 37;
 Prd[ 7].N:= 7; Prd[ 7].Num:=  44; Prd[ 7].Prime:=  56; Prd[ 7].Price:= 79; Prd[ 7].Work:= 95;
 Prd[ 8].N:= 8; Prd[ 8].Num:= 410; Prd[ 8].Prime:=  11; Prd[ 8].Price:= 17; Prd[ 8].Work:= 28;
 Prd[ 9].N:= 9; Prd[ 9].Num:= 690; Prd[ 9].Prime:=   7; Prd[ 9].Price:= 12; Prd[ 9].Work:= 55;
 Prd[10].N:=10; Prd[10].Num:= 990; Prd[10].Prime:= 281; Prd[10].Price:=346; Prd[10].Work:= 48;
 Prd[11].N:=11; Prd[11].Num:=   3; Prd[11].Prime:=   4; Prd[11].Price:=  7; Prd[11].Work:= 98;
 Prd[12].N:=12; Prd[12].Num:=  77; Prd[12].Prime:=  19; Prd[12].Price:= 25; Prd[12].Work:= 45;
 Prd[13].N:=13; Prd[13].Num:=  50; Prd[13].Prime:= 267; Prd[13].Price:=321; Prd[13].Work:= 62;
 Prd[14].N:=14; Prd[14].Num:= 550; Prd[14].Prime:=  17; Prd[14].Price:= 29; Prd[14].Work:= 22;
 Prd[15].N:=15; Prd[15].Num:=   8; Prd[15].Prime:= 270; Prd[15].Price:=320; Prd[15].Work:= 45;
 Prd[16].N:=16; Prd[16].Num:=  14; Prd[16].Prime:=  68; Prd[16].Price:= 93; Prd[16].Work:= 72;
 Prd[17].N:=17; Prd[17].Num:= 340; Prd[17].Prime:=  10; Prd[17].Price:= 28; Prd[17].Work:=  5;
 Prd[18].N:=18; Prd[18].Num:= 870; Prd[18].Prime:=   2; Prd[18].Price:=  4; Prd[18].Work:= 11;
 Prd[19].N:=19; Prd[19].Num:=  20; Prd[19].Prime:=  65; Prd[19].Price:= 83; Prd[19].Work:= 17;
 Prd[20].N:=20; Prd[20].Num:= 390; Prd[20].Prime:=   7; Prd[20].Price:= 10; Prd[20].Work:= 50;
 For i:=1 to 20 do
  with Prd[i] do
   Productivity_Local:=(Price-Prime)*Num/Work;
 Productivity_Initial:=Productivity;
 Max:=Prd[1].Productivity_Local;
 For i:=2 to 20 do
  If Prd[i].Productivity_Local>Max then Max:=Prd[i].Productivity_Local;
 k:=0;
 Repeat
  Inc(k);
  Min:=Max;
  For i:=1 to 20 do
   If Not(i in Bad) and (Prd[i].Productivity_Local<Min) then
    begin
     Min:=Prd[i].Productivity_Local;
     Im:=i;
    end;
  Bad:=Bad+[Im];
  Productivity_Current:=Productivity;
 Until (Productivity_Current>=Productivity_Initial*2) or (k=20);
 Write('The plant must refuse from the positions:');
 For i:=1 to 20 do
  if i in Bad then Write(i:3);
 Writeln;
 Writeln('Inial productivity: ',Productivity_Initial:0:3);
 Writeln('Final productivity: ',Productivity_Current:0:3);
 Readln;
End.

Интересно, что будет следующим номером программы? "Мы множества не проходили!"?
 
:tehnari_ru_942:, только записи или массив
 
И на том спасибо. В общем, была программка компактная и прозрачная, стала разлапистая, тупая и непонятная. Но работает. Сами захотели.
Код:
Type
 Prod=Record
       N:Byte;
       Num,Prime,Price,Work:Integer;
       Productivity_Local:Real;
      End;

Var
 Prd:Array[1..20] of Prod;
 Bad:Array[1..20] of Byte;
 Productivity_Initial,Min,Max,Productivity_Current:Real;
 i,m,Im,k:Integer;
 b:boolean;

Function Productivity:Real;
var
 j,p:Integer;
 Sum,Sum_Work:Real;
 b1:boolean;
begin
 Sum:=0;
 Sum_Work:=0;
 for j:=1 to 20 do
  begin
   b1:=true;
   for p:=1 to 20 do
    if j=Bad[p] then b1:=false;
   If b1 then
    with Prd[j] do
     begin
      Sum:=Sum+(Price-Prime)*Num;
      Sum_Work:=Sum_Work+Work;
     end;
  end;
 Productivity:=Sum/Sum_Work;
end;

Begin
 for m:=1 to 20 do Bad[m]:=0;
 Prd[ 1].N:= 1; Prd[ 1].Num:=  30; Prd[ 1].Prime:= 120; Prd[ 1].Price:=190; Prd[ 1].Work:=  5;
 Prd[ 2].N:= 2; Prd[ 2].Num:= 110; Prd[ 2].Prime:= 333; Prd[ 2].Price:=578; Prd[ 2].Work:= 25;
 Prd[ 3].N:= 3; Prd[ 3].Num:=  65; Prd[ 3].Prime:=  99; Prd[ 3].Price:=181; Prd[ 3].Work:= 12;
 Prd[ 4].N:= 4; Prd[ 4].Num:= 770; Prd[ 4].Prime:=   6; Prd[ 4].Price:= 14; Prd[ 4].Work:= 10;
 Prd[ 5].N:= 5; Prd[ 5].Num:= 490; Prd[ 5].Prime:= 146; Prd[ 5].Price:=239; Prd[ 5].Work:= 58;
 Prd[ 6].N:= 6; Prd[ 6].Num:= 200; Prd[ 6].Prime:=  33; Prd[ 6].Price:= 57; Prd[ 6].Work:= 37;
 Prd[ 7].N:= 7; Prd[ 7].Num:=  44; Prd[ 7].Prime:=  56; Prd[ 7].Price:= 79; Prd[ 7].Work:= 95;
 Prd[ 8].N:= 8; Prd[ 8].Num:= 410; Prd[ 8].Prime:=  11; Prd[ 8].Price:= 17; Prd[ 8].Work:= 28;
 Prd[ 9].N:= 9; Prd[ 9].Num:= 690; Prd[ 9].Prime:=   7; Prd[ 9].Price:= 12; Prd[ 9].Work:= 55;
 Prd[10].N:=10; Prd[10].Num:= 990; Prd[10].Prime:= 281; Prd[10].Price:=346; Prd[10].Work:= 48;
 Prd[11].N:=11; Prd[11].Num:=   3; Prd[11].Prime:=   4; Prd[11].Price:=  7; Prd[11].Work:= 98;
 Prd[12].N:=12; Prd[12].Num:=  77; Prd[12].Prime:=  19; Prd[12].Price:= 25; Prd[12].Work:= 45;
 Prd[13].N:=13; Prd[13].Num:=  50; Prd[13].Prime:= 267; Prd[13].Price:=321; Prd[13].Work:= 62;
 Prd[14].N:=14; Prd[14].Num:= 550; Prd[14].Prime:=  17; Prd[14].Price:= 29; Prd[14].Work:= 22;
 Prd[15].N:=15; Prd[15].Num:=   8; Prd[15].Prime:= 270; Prd[15].Price:=320; Prd[15].Work:= 45;
 Prd[16].N:=16; Prd[16].Num:=  14; Prd[16].Prime:=  68; Prd[16].Price:= 93; Prd[16].Work:= 72;
 Prd[17].N:=17; Prd[17].Num:= 340; Prd[17].Prime:=  10; Prd[17].Price:= 28; Prd[17].Work:=  5;
 Prd[18].N:=18; Prd[18].Num:= 870; Prd[18].Prime:=   2; Prd[18].Price:=  4; Prd[18].Work:= 11;
 Prd[19].N:=19; Prd[19].Num:=  20; Prd[19].Prime:=  65; Prd[19].Price:= 83; Prd[19].Work:= 17;
 Prd[20].N:=20; Prd[20].Num:= 390; Prd[20].Prime:=   7; Prd[20].Price:= 10; Prd[20].Work:= 50;
 For i:=1 to 20 do
  with Prd[i] do
   Productivity_Local:=(Price-Prime)*Num/Work;
 Productivity_Initial:=Productivity;
 Max:=Prd[1].Productivity_Local;
 For i:=2 to 20 do
  If Prd[i].Productivity_Local>Max then Max:=Prd[i].Productivity_Local;
 k:=0;
 Repeat
  Inc(k);
  Min:=Max;
  For i:=1 to 20 do
   begin
    b:=true;
    for m:=1 to 20 do
     if i=Bad[m] then b:=false;
    If b and (Prd[i].Productivity_Local<Min) then
    begin
     Min:=Prd[i].Productivity_Local;
     Im:=i;
    end;
   end;
  m:=0;
  Repeat Inc(m) Until (Bad[m]=0) or (m=20);
  If Bad[m]=0 then Bad[m]:=Im;
  Productivity_Current:=Productivity;
 Until (Productivity_Current>=Productivity_Initial*2) or (k=20);
 Write('The plant must refuse from the positions:');
 For i:=1 to k do Write(Bad[i]:3);
 Writeln;
 Writeln('Inial productivity: ',Productivity_Initial:0:3);
 Writeln('Final productivity: ',Productivity_Current:0:3);
 Readln;
End.
 
Назад
Сверху