А. Создать файл, содержащий сведения о количестве изделий категорий А, В, С, собранных
рабочим за месяц. Структура записи имеет поля - фамилия сборщика, наименование цеха,
количество изделий по категориям, собранных рабочим за месяц. Количество записей -
произвольное.
Б. Считая заданными значения расценок Sа, Sb, Sc за выполненную работу по сборке
единицы изделия категорий A, B, C соответственно, подсчитать:
- общее количество изделий категорий А, В, С, собранных рабочим цеха Х;
- ведомость заработной платы рабочих цеха Х;
- средний размер заработной платы работников этого цеха.
Нужно создать программу, которая работает и текст программы, если смогут то можно ещё блок-схему
мне нужна формула как расчитать : средний размер заработной платы работников этого цеха.
и как должна выглядить : ведомость заработной платы рабочих цеха Х;
Ну я тебе не помогу думаю, но самоудовлетворение будет.
Структура записи текстового файла
Код:
data begin of itable occurs 0 with header line,
data item_a type i,
data item_b type i,
data item_c type i,
data name type string,
data workshop type string.
end of itable.
Структура для сумм
Код:
data begin of wa,
data item_a type i,
data item_b type i,
data item_c type i,
data workshop type string,
data namecount type i.
end of wa.
Строка текстового файла
Код:
|item_a|item_b|item_c|name|workshop|
Пример
Код:
|5|7|9|Darkman|Roses|
Будем считать что мы произвели считывание из текстового файла, оно зависит от языка, поэтому париться не буду.
Код:
sort itable by workshop name. ' Для того чтобы не делать вложенных циклов, сортировка обязательна. Одна из самых важных строчек в программе.
loop at itable.
at new name. 'Считаем количество сотрудников. Это на случай если будут две записи на одного сотрудника.
add 1 to wa-namecount.
endat.
if sy-index > 1.
at new itable-workshop. 'Когда имя цеха меняется пора сделать вывод результатов
wa-item_a = wa-item_a * item_ap. 'Умножаем продукцию на цену экземпляра
wa-item_b = wa-item_b * item_bp.
wa-item_c = wa-item_c * item_cp.
wa-item_a = wa-item_a + wa-item_b + wa-item_c. 'Чтобы не засирать структуру суммируем все прямо тут.
wa-item_a = wa-item_a / wa-namecount. 'Делим на число сотрудников
write: 'средняя зп цеха', wa-workshop, 'составляет', wa-item_a.
clear wa. 'Чистим временные данные
wa-workshop = itable-workshop. 'Проставляем имя цеха
endat.
else.
wa-workshop = itable-workshop. 'Проставляем имя цеха для первой записи таблицы
endif.
add-corresponding itable to wa. 'Думаю понятно
endloop.
Не компилировалось, не тестилось итп. Рассчитано на чтение и понимание, потому что абап легкочитаемый язык. Если ничего не понятно в коде, блок схема строится по комментариям.
Оу я только по цеху инфу вывел. Ну по работнику по этому коду тоже должно быть понятно как.
Последний раз редактировалось: Doredel (01 Февраль, 2011 23:45), всего редактировалось 1 раз
Вопросик.
А можно эту же программу более простым языком VB написать? А то проходили ток основы и так ничего не понятно _________________ Somi . Ток тссс...
если бы мне могли сказать какие данные должны выдаваться и как и расчитать(по каким формулам), а так примерно вот
private type spisok
fio as string
zex as string
kA as integer
kB as integer
kC as integer
end type
public n as integer
' создание файла
Private Sub Command1_Click()
dim x() as spisok, i as integer
List1.Clear 'если не будет необязательной части, то это не надо писать
List2.Clear 'если не будет необязательной части, то это не надо писать
n = val(inputbox(""" Введите количество рабочих" ," КОЛИЧЕСТВО РАБОЧИХ" ))
open "" СВОЙ ПУТЬ" for output as #1
redim x(n)
for i=1 to n
with x(i)
.fio = inputbox(" Введите фамилию рабочего" ," ФАМИЛИЯ РАБОЧЕГО" )
.zex = inputbox (" Введите гаименование цеха" ," НАИМЕНОВАНИЕ ЦЕХА" )
.kA = val(inputbox(" Введите кол-во деталей категории А, собранных рабочим за месяц" ," КОЛИЧЕСТВО ДЕТАЛЕЙ КАТЕГОРИИ А"" ))
.kB = val(inputbox(" Введите кол-во деталей категории B, собранных рабочим за месяц" ," КОЛИЧЕСТВО ДЕТАЛЕЙ КАТЕГОРИИ B"" ))
.kC = val(inputbox(" Введите кол-во деталей категории C, собранных рабочим за месяц" ," КОЛИЧЕСТВО ДЕТАЛЕЙ КАТЕГОРИИ C"" ))
write #1, .fio, .zex, .kA, .kB, .kC
end with
next i
close #1
'необязательная часть
'вывод некоторых данных из файла
open "" СВОЙ ПУТЬ" for input as #1
for i=1 to n
with x(i)
input #1, .fio, .zex, .kA, .kB, .kC
List1.AddItem .fio
List2.AddItem .zex
end with
next i
close #1
end sub
_______________________________________
'общее количество изделий категорий А, В, С, собранных рабочим цеха Х
Private Sub Command2_Click()
dim x() as spisok
List3. Clear ' если нет необязательной части, то считать как List1. Clear
List4. Clear ' если нет необязательной части, то считать как List2. Clear
open "" СВОЙ ПУТЬ" for input as #1
ReDim x(n)
z = inputbox(" Введите наименование цеха" , " ЦЕХ" )
For i = 1 To n
m = 0 ' количество деталей
with x(i)
input #1, .fio, .zex, .kA, .kB, .kC
if (z = .zex) then
m = val(.kA + .kB + .kC)
List3.AddItem .fio ' либо List1.AddItem .fio , если ....ну понятно
List4.AddItem m ' либо List2.AddItem m , если .... ну понятно
end if
next i
close #1
end sub
______________________________________
Doredel писал(а):
Lina, в интернете все есть, написать подобную программу дело суток даже без знания языка.
Просто сидеть и заниматься сутками только вб к сожалению времени нет...
Это рак, который надо лечить. Будете называть переменные такими именами - уже через неделю забудете для чего они создавались.
Называть переменные транслитом в принципе тоже рак, но на него хотя бы можно закрыть глаза.
Трудно прочитать и понять что написал автор. Хотя бы из простейшего гуманизма и уважения к преподавателю (да, ведь?) следует переименовать переменные zmn и подобные.
Последняя часть нечитабельна совершенно.
Lina писал(а):
если бы мне могли сказать какие данные должны выдаваться и как и расчитать(по каким формулам)
Рукалицо.
По условию же видно. Я бы сделал в виде отчета, банальный листинг. Возможно требуется сделать вывод информации по сотруднику через комбобоксы, я не знаю. Листинг проще и удобнее всего.
Кстати ввод данных я бы реализовал иначе. Без особых сложностей цикл for next заменяется на while по условию пустого имени рабочего. Если поле пустое - значит данные в файл введены.
Переменная n, как и переменная i, вполне нормальные варианты с очевидными значениями, так что это дело вкуса (хотя конечно переменная z не смотрится). Вывод данных и вправду странный, хз может такой и нужен, что такое List1 и прочие не очень понятно.
Дописанный вариант в аську ушёл, должно работать, если то что написано выше работает. _________________ --
Elysium
worker_iterator, workshop_num намного более очевидны, и делают код читаемым.
Не согласен. Со словом "намного".
Вообще, возможно, кому-то будет больше понятно "worker_iterator". Но набирать каждый раз для цикла
Код:
for (int worker_iterator = 0; worker_iterator < 100; worker_iterator++) {}
я как-то не намерен xD _________________ На опушке маленький мальчик плакал от страха и кричал: "Волк, волк!", а волк, стоя за кустом, с тоской думал, что главная беда с маленькими мальчиками - их совершенное неумение расставаться.
Переменная i используется в пределах 5 строчек, там запутаться нереально. А вот излишне длинные названия читабельности точно не добавят. Насчёт n ещё можно согласится...
Добавлено спустя 5 минут 33 секунды:
Более того, когда пойдут вложенные циклы ты будешь называть переменные Second_Worker_Iterator? или Worker_Iterator_2? тогда точна хана читабелньости. _________________ --
Elysium
Narsil, для этого можно использовать сокращения. Например _i это итератор, _t - таблица итп. цикл который ты привел в пример кстати в коде встретится максимум пару раз.
spec писал(а):
Более того, когда пойдут вложенные циклы ты будешь называть переменные Second_Worker_Iterator? или Worker_Iterator_2? тогда точна хана читабелньости.
Вложенные циклы зло, их не должно быть и их почти всегда можно избежать. В абапе кстати проще, там не нужны итераторы, луп по таблице меняет заголовочную строчку и обращаться к определенному элементу по индексу не нужно.
Впрочем свои варианты циклов без итератора есть во многих языках.
цикл который ты привел в пример кстати в коде встретится максимум пару раз.
В этом примере да. _________________ На опушке маленький мальчик плакал от страха и кричал: "Волк, волк!", а волк, стоя за кустом, с тоской думал, что главная беда с маленькими мальчиками - их совершенное неумение расставаться.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах