|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
17.12.2011, 16:08 | #1 (permalink) |
С# - learn or die
Регистрация: 17.12.2011
Сообщений: 2,438
Записей в дневнике: 8
Сказал(а) спасибо: 21
Поблагодарили 49 раз(а) в 11 сообщениях
Репутация: 19701
|
Программа на Паскале Free или Turbo. Циклы
Задание 1 (программирование циклических алгоритмов): Требуется осуществить перевод данного целого (дробного) числа: из троичной системы в десятичную. Чтобы программа работала как для дробного, так и для целого! Задание 2 (программирование циклических алгоритмов (с параметром)): Требуется определить план выпуска продукции, обеспечивающий наибольшую суммарную прибыль:На предприятии организуется побочный цех для использования отходов производства. Цех может освоить выпуск продукции двух видов: столов и книжных шкафов. На производство одного стола и шкафа затрачивается соответственно рабочего времени – С1 человеко-часов и С2 человеко-часов, древесины – D1 м3 и D2 м3, а на производство одного шкафа, кроме того -2 м стекла. Ресурсы ос¬новных материалов в месяц составляют: С человеко-часов рабочего времени, V м3 древесины и S м2 стекла. Прибыль от реализации стола составляет P1 руб., шкафа – P2 руб. |
17.12.2011, 16:08 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Ознакомьтесь с этими топиками, наверняка тут есть ответ который вам нужен Программа вычисления интеграла на Паскале Turbo Pascal с Turbo Vision Циклы VBA Программа на паскале Программа на Паскале |
17.12.2011, 18:53 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
1. Вводятся исходные данные. 2. Определяется максимально возможное количество столов по человеко-часам и древесине, а также прибыль, если делать только столы. 3. В цикле уменьшаем количество столов на 1 за проход, из оставшихся ресурсов, если такое возможно, делаем шкафы, и каждый раз считаем суммарную прибыль. Сохраняем данные только если эта прибыль превзойдёт ту, что получена на предыдущем шаге. Программа: Код:
Const S2=2.0; Var C1,C2,C,C_cur,D1,D2,D,D_cur,S:Real; Max_t,M1,M2,N_t,N_w,P1,P2,P_cur,P,i,j:LongInt; BEGIN Write('Human resource for 1 table= '); Readln(C1); Write('Human resource for 1 wardrobe= '); Readln(C2); Write('Full amount of human resources= '); Readln(C); Write('Wood for 1 table= '); Readln(D1); Write('Wood for 1 wardrobe= '); Readln(D2); Write('Full amount of wood= '); Readln(D); Write('Full amount of glass= '); Readln(S); Write('Profit from 1 table (integer)= '); Readln(P1); Write('Profit from 1 wardrobe (integer)= '); Readln(P2); {Search of maximal amount of tables} M1:=Trunc(C/C1); M2:=Trunc(D/D1); If M1<M2 then Max_t:=M1 else Max_t:=M2; P:=Max_t*P1; N_t:=Max_t; N_w:=0; i:=N_t; Repeat Dec(i); C_cur:=C-C1*i; D_cur:=D-D1*i; M1:=Trunc(C_cur/C2); M2:=Trunc(D_cur/D2); If M1<M2 then j:=M1 else j:=M2; While S2*j>S do Dec(j); P_cur:=i*P1+j*P2; If P_cur>P then begin N_t:=i; N_w:=j; P:=P_cur; end; Until i=0; Writeln; Writeln('Maximal profit corresponds to ',N_t,' tables and ',N_w,' wardrobes'); Readln End. |
|
17.12.2011, 21:58 | #3 (permalink) |
С# - learn or die
Регистрация: 17.12.2011
Сообщений: 2,438
Записей в дневнике: 8
Сказал(а) спасибо: 21
Поблагодарили 49 раз(а) в 11 сообщениях
Репутация: 19701
|
Vladimir_S, огромное спасибо! Но не могли бы Вы помочь с Заданием 1! Очень важно. Я первый раз вообще у кого-то прошу помощи на форумах. Просто не могу сделать, и прежде чем попросить много делала, решала. Но увы. Помогите пожалуйста с задачей 1.
|
17.12.2011, 22:07 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ладно, попробую завтра. Просто будь там целые числа, то перевод из троичной в десятичную системы делается "на раз", а вот с дробными...
|
17.12.2011, 22:16 | #5 (permalink) |
С# - learn or die
Регистрация: 17.12.2011
Сообщений: 2,438
Записей в дневнике: 8
Сказал(а) спасибо: 21
Поблагодарили 49 раз(а) в 11 сообщениях
Репутация: 19701
|
Спасибо огромное! До завтра!
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
18.12.2011, 10:18 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Вот, сотворил нечто чудовищное. Но работает:
Код:
Const W=['3','4','5','6','7','8','9']; VAR S:String; b:Boolean; N3,N10,N3_frc_re:Real; N3_int,N3_frc,N3_frc0,m,dd10,dd3:LongInt; Sign:ShortInt; i,N3f_int,N3f_frc,fig:Byte; BEGIN Repeat b:=true; Write('Enter the number in 3-based system: '); Readln(N3); STR(N3:0:8,S); for i:=1 to length(S) do if S[i] in W then begin Writeln('Wrong input!'); b:=false; end; Until b; If N3<0 then Sign:=-1 else Sign:=1; N3:=Abs(N3); N3_int:=Trunc(N3); N3_frc_re:=N3-1.0*N3_int; m:=1; Repeat m:=m*10; N3_frc:=Round(N3_frc_re*m); Until Round(1.0*N3_frc/m*100000000)=Round(N3_frc_re*100000000); N10:=0; N3_frc0:=N3_frc; If N3_int>0 then begin N3f_int:=Round(Ln(N3_int)/Ln(10)); {Number of figures in integer part of 3-based number -1} For m:=N3f_int downto 1 do begin dd10:=1; for i:=1 to m do dd10:=dd10*10; fig:=N3_int div dd10; dd3:=1; for i:=1 to m do dd3:=dd3*3; N10:=N10+fig*dd3; N3_int:=N3_int mod dd10; end; N10:=N10+N3_int; end; If N3_frc>0 then begin N3f_frc:=Round(Ln(N3_frc)/Ln(10)); {Number of figures in fractional part of 3-based number -1} For m:=N3f_frc downto 0 do begin dd10:=1; for i:=1 to m do dd10:=dd10*10; fig:=N3_frc div dd10; dd3:=1; for i:=1 to N3f_frc-m+1 do dd3:=dd3*3; N10:=N10+1.0*fig/dd3; N3_frc:=N3_frc mod dd10; end; end; N10:=N10*Sign; Write('N in decimal system is '); If N3_frc0=0 then Writeln(Round(N10)) else Writeln(N10:0:8); Readln; END. |
18.12.2011, 16:35 | #7 (permalink) |
С# - learn or die
Регистрация: 17.12.2011
Сообщений: 2,438
Записей в дневнике: 8
Сказал(а) спасибо: 21
Поблагодарили 49 раз(а) в 11 сообщениях
Репутация: 19701
|
Действительно работает! В принцепе всё понятно, кроме
Until Round(1.0*N3_frc/m*100000000)=Round(N3_frc_re*100000000); Поясните зачем Вы домножаете на " *100000000 "? |
18.12.2011, 17:21 | #8 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Если не нравится, попробуйте так: Until 1.0*N3_frc/m=N3_frc_re; |
|
18.12.2011, 17:28 | #9 (permalink) |
С# - learn or die
Регистрация: 17.12.2011
Сообщений: 2,438
Записей в дневнике: 8
Сказал(а) спасибо: 21
Поблагодарили 49 раз(а) в 11 сообщениях
Репутация: 19701
|
Огромное спасибо Вам за помощь! Я и не думала, что мне кто поможет.
Сейчас пойду писать отчёты (блок-схемы, псевдокоды). Я очень благодарна! P.s. У Вас неплохой сайт, останусь здесь. И буду пробовать помогать другим! Спасибо. |
18.12.2011, 17:34 | #10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ох, вот это бы здорово! А то я несколько зашиваюсь: у нашего дорогого студенческого юношества манера - сладко спать весь семестр, а за несколько (это еще в лучшем случае) дней до зачетной недели просыпаться и обнаруживать, что надо сдать лабораторки за полгода, а знаний не хватает даже на задачи типа c=a+b.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|