Программа
USES Crt; { Подключение модуля Crt }
FUNCTION Menu:byte; { Функция вывода меню и получения ответа }
Const QuantityMenuPoint=3; { Количество пунктов меню }
ExitPoint=QuantityMenuPoint; { Пункт меню "Выход" }
MaxLengthMenuPoint=48; { Максимальная длина пункта меню }
MenuList:array[1..QuantityMenuPoint] of string[MaxLengthMenuPoint] =
{ Список пунктов меню }
('[1] Создание файла данных ',
'[2] Просмотр файла данных и расчет сопротивления',
'[3] ВЫХОД ');
Var MenuMeter:integer; { Счетчик }
Point:integer; { Текущий пункт меню }
Begin
ClrScr; { Очистка экрана }
for MenuMeter:=1 to QuantityMenuPoint do WriteLn(MenuList[MenuMeter]);
{ Цикл прорисовки меню }
repeat { Цикл чтения клавиатуры }
Point:=Ord(ReadKey); { Чтение клавиатуры }
if Point<>27 { Если нажатая клавиша не Esc, }
then Point:=Point-Ord('0') { то - вычисление введенного пункта меню }
else Point:=ExitPoint { иначе - переопределение пункта под "Выход" }
until (0<Point) and (Point<=QuantityMenuPoint);
{ Выход из цикла при пролучении корректного ответа }
{ Определение значения функции: }
if Point=ExitPoint then Menu:=255
else Menu:=Point;
ClrScr { Очистка экрана }
End;
FUNCTION Stringer(N:integer):string; { Функция преобразования числа в строку }
Var St:string; { Переменная для преобразования числа в строку }
Begin
Str(N,St); { Преобразование }
Stringer:=St { Определение значения функции }
End;
FUNCTION Question(S:string):boolean; { Функция получения ответа на вопрос }
Var Ch:char; { Буфер }
Begin
Write(S,' [Y/N] '); { Вывод вопроса }
repeat
Ch:=ReadKey { Ввод символа }
until Ch in ['Y','y','N','n','Н','н','Т','т'];
{ Выход из цикла при получении корректного ответа }
Question:=Ch in ['Y','y','Н','н']; { Определение значения функции }
WriteLn(Ch) { Вывод ответа }
End;
PROCEDURE MakeFileData(var F:text); { Процедура создания файла данных }
Var R:real; { Переменная для ввода сопротивления резистора }
MeterGroup,MeterLine:integer; { Счетчики групп и цепочек в группе }
Begin
MeterGroup:=1; { Установка счетчика групп }
Rewrite(F); { Открытие файла для записи }
while Question('Ввести группу N°'+Stringer(MeterGroup)+' ?') do
begin { Цикл ввода групп }
WriteLn('ВВОД ГРУППЫ N°',MeterGroup); { Вывод заголовка }
MeterLine:=1; { Установка счетчика цепочек в группе }
while Question('Ввести цепочку N°'+Stringer(MeterLine)+
' группы N°'+Stringer(MeterGroup)+' ?') do
begin { Цикл ввода цепочек }
{ Вывод приглашения и подсказки: }
WriteLn('Введите значения сопротивлений в цепочке, N°'
,MeterLine,' группы N°',MeterGroup);
WriteLn('После последнего элемента введите "0"');
Read(R); { Ввод споротивления резистора }
while R>0 do { Цикл ввода сопротивлений }
begin
Write(F,R,' '); { Вывод сопротивления в файл }
Read(R) { Ввод сопротивления }
end;
WriteLn(F); { Вывод конца строки файла }
Inc(MeterLine); { Переопределение номера цепочки }
end;
WriteLn(F,'0'); { Вывод маркера конца группы }
Inc(MeterGroup) { Переопределение номера группы }
end;
Close(F) { Закрытие файла }
End;
PROCEDURE ViewLine(var F:text; var R_Line:real);
{ Процедура просмотра цепочки и подсчета сопротивления }
Var R:real; { Сопротивление резистора }
Begin
R_Line:=0; { Сброс значения сопротивления цепочки }
while not SeekEOLn(F) do { Цикл просмотра строки файла (цепочки) }
begin
Read(F,R); { Чтение сопротивления }
R_Line:=R_Line+R; { Набор сопротивления цепочки }
if R<>0 then Write(R:0:1,' ') { Вывод сопротивления резистора }
end;
ReadLn(F); { Пропуск конца строки в файле }
if R_Line<>0 then WriteLn('R=',R_Line:0:1)
{ Если не было достигнуто конца группы, то вывод сопротивления цепочки }
End;
PROCEDURE ViewData(var F:text); { Процедура просмотра файла данных }
Var R_Line,Ro_Group,R_Group,R_Scheme:real; { Сопротивление цепочки,
проводимость группы, сопротивление группы и сопротивление схемы }
MeterGroup:integer; { Счетчик групп }
Begin
ClrScr; { Очистка экрана }
Reset(F); { Открытие файла для чтения }
MeterGroup:=0; { Сброс счетчика групп }
R_Scheme:=0; { Обнуление сопротивления схемы }
while not SeekEOF(F) do { Цикл просмотра файла }
begin
Inc(MeterGroup); { Подсчет групп }
WriteLn('Группа N°',MeterGroup); { Вывод заголовка }
Ro_Group:=0; { Обнуление значения проводимости группы }
repeat { Цикл просмотра группы }
ViewLine(F,R_Line); { Просмотр и подсчет сопротивления цепочки }
if R_Line<>0 then Ro_Group:=Ro_Group+1/R_Line
{ Подсчет проводимости группы }
until R_Line=0; { Выход из цикла при достижении конца группы }
if Ro_Group<>0 { Если не было пустой группы }
then begin { то }
R_Group:=1/Ro_Group; { Вычисление сопротивления группы }
WriteLn('R_группы=',R_Group:0:3); { Вывод сопротивления группы }
R_Scheme:=R_Scheme+R_Group { Подсчет сопротивления схемы }
end
else WriteLn('Данная группа не содержит элементов R=0')
{ иначе - вывод сообщения }
end;
WriteLn; { Пропуск строки }
WriteLn('R_схемы=',R_Scheme:0:1); { Вывод сопротивления схемы }
Close(F) { Закрытие файла }
End;
PROCEDURE Stop; { Процедура остановки программы }
Var Ch:char; { Переменная для чтения клавиатуры }
Begin
WriteLn; { Пропуск строки }
WriteLn('Нажмите клавишу'); { Вывод приглашения нажать клавишу }
Ch:=ReadKey { Остановка программы до нажатия клавиши }
End;
CONST FileName='DATA'; { Имя файла данных }
VAR Exit:boolean; { Флаг "Выход" }
F:text; { Файловая переменная }
BEGIN
Exit:=FALSE; { Сброс флага "Выход" }
Assign(F,FileName); { Связывание имени файла с файловой переменной }
repeat { Цикл работы программы }
case Menu of { Выбор действия по ответу на меню }
1:begin
MakeFileData(F); { Создание файла данных }
ViewData(F); { Просмотр файла }
Stop { Остановка программы до нажатия <Enter> }
end;
2:begin
ViewData(F); { Просмотр файла }
Stop { Остановка программы до нажатия <Enter> }
end;
255:Exit:=TRUE { Подъем флага "Выход" }
end;
until Exit; { Выход из цикла при признаке " Выход" }
END.
СХЕМА ФУНКЦИИ "Menu"
***************
* *
* П У С К *
* *
***************
:
***************** ┌─
* * │
* * │
* ClrScr *∙∙∙∙∙∙∙∙∙∙│ Очистка экрана
* * │
* * │
***************** └─
:
:
***************** ┌─
* * │ Инициализация
* * │
* MenuMeter:=1 *∙∙∙∙∙∙∙∙∙∙│ счетчика
* * │
* * │ цикла
***************** └─
:
:
:∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙.
: :
: :
: ***************** ┌─
: * * │ Переопределение
: * MenuMeter:= * │
: * *∙∙∙∙∙│ счетчика
: * MenuMeter+1 * │
: * * │ цикла
: ***************** └─
: :
: :
: *****************
: Вывод
: * *
: пункта
: * *
: меню
: *****************
: :
* :
* * MenuMeter>QuantityMenuPoint :
* * :
* * Нет :
* *∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙'
* *
* *
* *
*
: Да
:
:
:
:∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙.
: :
: :
: :
***************** ┌─ :
│ :
* Point:= * │ Чтение :
∙∙∙∙∙∙∙∙∙∙│ :
* Ord(ReadKey) * │ клавиатуры :
│ :
***************** └─ :
: :
: :
: :
: :
: :
* :
* * :
* * :
* * Да :
* Point<>27 *∙∙∙∙∙∙∙∙∙∙∙. :
* * : :
* * : :
* * : :
* : :
: Нет : :
: : :
: : :
***************** ***************** ┌─ :
* * * * │ Вычисление :
* MenuMeter:= * * MenuMeter:= * │ введенного :
* * * *∙∙∙∙│ пункта :
* ExitPoint * * Point-Ord('0')* │ меню :
* * * * │ :
***************** ***************** └─ :
: : :
:∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙' :
: :
: :
: :
* :
* * (0<Point) and (Point<=QuantityMenuPoint) :
* * :
* * Нет :
* *∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙'
* *
* *
* *
*
: Да
:
:
:
:
*
* *
* *
* Point= * Да
* *∙∙∙∙∙∙∙∙∙∙∙.
* ExitPoint * :
* * :
* * :
* :
: Нет :
: :
: :
***************** ***************** ┌─
* * * * │ Определение
* * * * │
* Menu:=Point * * Menu:=255 *∙∙∙∙│ значения
* * * * │
* * * * │ функции
***************** ***************** └─
: :
:∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙'
:
:
:
:
***************** ┌─
* * │
* * │
* ClrScr *∙∙∙∙∙│ Очистка экрана
* * │
* * │
***************** └─
:
:
:
:
***************
* *
* К О Н Е Ц *
* *
***************
Схема функции "Stringer"
***************
* *
* П У С К *
* *
***************
:
:
***************** ┌─
* * │
* Str(N,St) * │ Преобразование числа в строку
* *∙∙∙∙∙∙∙│
* Stringer:=St * │ Определение значения функции
* * │
***************** └─
:
:
***************
* *
* К О Н Е Ц *
* *
***************
СХЕМА ФУНКЦИИ "Question"
***************
* *
* П У С К *
* *
***************
:
:
:
*****************
* Вывод *
* вопроса *
*****************
:
:∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙.
: :
***************** :
:
* Чтение * :
нажатия :
* клавиши * :
:
***************** :
: :
: :
: :
: :
* :
* * :
* * :
* Нажата * Нет :
* допустимая *∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙'
* клавиша *
* *
* *
*
: Да
:
:
*****************
* Вывод *
символа
* клавиши *
*****************
:
:
*****************
* Определение *
* значения *
* функции *
* по нажатой *
* клавише *
*****************
:
:
:
***************
* *
* К О Н Е Ц *
* *
***************
СХЕМА ПРОЦЕДУРЫ "MakeFileData"
***************
* *
* П У С К *
* *
***************
:
:
:
***************** ┌─
* * │
* MeterGroup:=1 * │ Установка счетчика групп
* *∙∙∙∙∙∙│
* Rewrite(F) * │ Открытие файла для записи
* * │
***************** └─
:
:∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙.
: :
* :
* * :
* * :
* Ввести * Да :
* группу ? *∙∙∙∙∙∙∙. :
* * : :
* * : :
* * ***************** ┌─ :
* * * │ :
: Нет * * │ Установка счетчика :
: * MeterLine:=1 *∙∙∙∙∙∙│ :
: * * │ цепочек в группе :
: * * │ :
: ***************** └─ :
: : :
: : :
: ***************** :
: :
: * * :
: ВВОД ГРУППЫ :
: * * :
: :
: ***************** :
: : :
: :∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙. :
: : : :
: * : :
: * * : :
: * * : :
: * Ввести * Да : :
: * цепочку ? *∙∙∙∙∙∙∙∙∙. : :
: * * : : :
: * * : : :
: * * ***************** : :
: * Вывод : :
: : Нет * приглашения * : :
: : ввести : :
: : * цепочку * : :
: : : :
: : ***************** : :
: : : : :
: : ***************** : :
: : : :
: : * Ввод * : :
: : сопротивления : :
: : * R * : :
: : : :
: : ***************** : :
: : : : :
: ***************** : : :
: * * :∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙. : :
: * MeterGroup:= * : : : :
: * * * : : :
: * MeterGroup+1 * * * : : :
: * * * * : : :
: ***************** * * Да : : :
: : * R>0 *∙∙∙∙∙∙∙∙. : : :
: : * * : : : :
: : * * : : : :
: : * * ***************** : : :
: : * : : :
: : : Нет * Вывод * : : :
: ***************** : сопротивления : : :
: : * в файл * : : :
: * Вывод * : : : :
: маркера конца : ***************** : : :
: * группы * : : : : :
: : : : : :
: ***************** : ***************** : : :
: : : : : :
: : : * Ввод * : : :
: : : сопротивления : : :
: : : * R * : : :
: : : : : :
: : : ***************** : : :
***************** : : : : : :
* * : : `∙∙∙∙∙∙∙∙∙∙∙∙' : :
* Закрытие * : : : :
* * : ***************** ┌─ : :
* файла * : * * │ : :
* * : * * │ Переопределение : :
***************** : * Inc(MeterLine)*∙∙∙∙│ номера : :
: : * * │ цепочки : :
: : * * │ : :
: : ***************** └─ : :
*************** : : : :
* * : : : :
* К О Н Е Ц * : `∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙' :
* * : :
*************** `∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙'
СХЕМА ПРОЦЕДУРЫ "ViewLine"
***************
* *
* П У С К *
* *
***************
:
:
***************** ┌─
* * │ Сброс
* * │ значения
* R_Line:=0 *∙∙∙∙∙∙∙∙∙∙│ сопротивления
* * │ цепочки
* * │
***************** └─
:
:∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙.
: :
* :
* * :
* * :
* Достигнут * Нет :
* конец *∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙. :
* строки * : :
* * : :
* * : :
* ***************** ┌─ :
: Да │ :
: * * │ Ввод :
***************** R ∙∙∙∙∙│ :
* * │ сопротивления :
* Пропуск конца * │ :
***************** └─ :
* строки в файле* : :
: :
***************** ***************** ┌─ :
: * * │ Набор :
: * R_Line:= * │ значения :
* * *∙∙∙∙∙∙│ сопротивления :
* * * R_Line+R * │ цепочки :
* * * * │ :
* * Да ***************** └─ :
* R_Line<>0 *∙∙∙∙. : :
* * : : :
* * : * :
* * : * * :
* : * * :
: Нет : * * Да :
: : * R<>0 *∙∙∙∙∙∙. :
: : * * : :
: : * * : :
: : * * ***************** ┌─ :
: : * │ :
: : : Нет * * │ Вывод :
: ***************** : R ∙∙∙│ :
: : * * │ сопротивления :
: * Вывод * : │ :
: сопротивления : ***************** └─ :
: * цепочки * : : :
: `∙∙∙∙∙∙.∙∙∙<∙∙∙' :
: ***************** : :
: : `∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙'
: :
`∙∙∙∙∙∙∙∙∙∙∙∙'
:
:
***************
* *
* К О Н Е Ц *
* *
***************
СХЕМА ПРОЦЕДУРЫ "ViewData"
***************
* *
* П У С К *
* *
***************
:
:
***************** ┌─
* ClrScr * │ Очистка экрана
* Reset(F) * │ Открытие файла для чтения
* MeterGroup:=0 *∙∙∙∙∙∙∙∙∙∙│ Сброс счетчика групп
* R_Scheme:=0 * │ Обнуление сопротивления схемы
* * │
***************** └─
:
:∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙.
: :
* :
* * :
* * :
Да * Достигнут * Нет :
.∙∙∙∙* конец *∙∙∙∙∙∙∙∙. :
: * файла * : :
: * * : :
: * * ***************** ┌─ :
: * * * │ Подсчет групп :
: *Inc(MeterGroup)* │ :
: * *∙∙∙│ :
: * Ro_Group:=0 * │ Обнуление значения :
: * * │ проводимости группы :
: ***************** └─ :
: : :
: : :
: : :
: ***************** :
: :
: * Вывод * :
: номера :
: * группы * :
: :
: ***************** :
: : :
: :∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙. :
: : : :
: : : :
: ***************** ┌─ : :
: * * * * │ Просмотр и : :
: * * * * │ подсчет : :
: * * ViewLine * *∙∙∙│ сопротивления : :
: * * * * │ цепочки : :
: * * * * │ : :
: ***************** └─ : :
: : : :
: : : :
: * : :
: * * : :
: * * : :
: * * Да : :
: * R_Line<>0 *∙∙∙∙∙∙. : :
: * * : : :
: * * : : :
: * * ***************** ┌─ : :
: * * * │ Подсчет : :
: : Нет * Ro_Group:= * │ : :
: : * Ro_Group+ *∙∙∙│ проводимости : :
: : * +1/R_Line * │ : :
: : * * │ группы : :
: : ***************** └─ : :
: * : : :
: * * `∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙' :
: * * :
: Нет * * Да :
: .∙∙∙∙* Ro_Group<>0 *∙∙∙∙∙∙∙∙. :
: : * * : :
: : * * : :
: : * * ***************** ┌─ :
: : * * R_Group:= * │ Вычисление :
: : * 1/Ro_Group; * │ сопротивления :
: ***************** * R_Scheme:= *∙∙∙│ группы :
: Данная группа * R_Scheme+ * │ и :
: * не содержит * * R_Group * │ схемы :
: элементов ***************** └─ :
: * R=0 * : :
: : :
: ***************** ***************** :
: : :
: : * Cопротивление * :
: : :
: : * группы * :
: : :
: : ***************** :
: : : :
: : : :
: `∙∙∙∙∙∙∙∙∙∙∙∙∙.∙∙∙∙∙∙∙<∙∙∙∙∙∙∙' :
: : :
: `∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙'
:
`∙∙∙∙∙∙∙∙∙∙∙∙∙.
:
*****************
* Cопротивление *
* схемы *
*****************
:
:
:
*****************
* *
* *
* Close(F) *
* *
* *
*****************
:
:
***************
* *
* К О Н Е Ц *
* *
***************
СХЕМА ПРОЦЕДУРЫ "Stop"
***************
* *
* П У С К *
* *
***************
:
:
***************** ┌─
│
* "Нажмите * │ Вывод приглашения
∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙│
* клавишу" * │ нажать клавишу
│
***************** └─
:
:
***************** ┌─
│
* * │ Остановка программы
Ch:=ReadKey ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙│
* * │ до нажатия клавиши
│
***************** └─
:
:
***************
* *
* К О Н Е Ц *
* *
***************
СХЕМА ПРОГРАММЫ
***************
* *
* П У С К *
* *
***************
:
***************** ┌─
* * │ Сброс
* * │
* Exit:=FALSE *∙∙∙∙∙∙∙∙∙∙│ флага
* * │
* * │ "Выход"
***************** └─
:
***************** ┌─
* * │
* Assign * │ Связывание файла
* *∙∙∙∙∙∙∙∙∙∙│
* (F,FileName) * │ с файловой переменной
* * │
***************** └─
:
:∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙.
: :
: :
: :
: :
: :
* :
* * :
* * :
* * :
* Menu * :
* * :
* * :
* * :
* :
: :
:∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙. :
:1 :2 :255 :
: : : :
: : : :
***************** ***************** ***************** :
*MakeFileData(F)* * * * * :
* * * ViewData(F) * * * :
* ViewData(F) * * * * Exit:=TRUE * :
* * * Stop * * * :
* Stop * * * * * :
***************** ***************** ***************** :
: : : :
:∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙' :
: :
: :
: :
* :
* * :
* * :
* * Нет :
* Exit *∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙'
* *
* *
* *
*
: Да
:
:
:
***************
* *
* К О Н Е Ц *
* *
***************
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию