Laba_infa5 (Все ЛР)
Описание файла
Файл "Laba_infa5" внутри архива находится в папке "Labs". Документ из архива "Все ЛР", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. .
Онлайн просмотр документа "Laba_infa5"
Текст из документа "Laba_infa5"
Задача
-
В одной строке экрана вводится последовательность символов (тип char). Ввод завершается символом «?». Подсчитать количество пар рядом стоящих символов. Вывести найденное количество с поясняющим текстом. Если так пар нет, то выдать сообщение об этом. Массивов не использовать.
-
Используя символьный вывод, напечатать любое заданное число вещественное число Х в следующем виде:
+(-)0.d1d2d3…d9E+(-)p1p2,
где d1, p1 – цифры, причём d1 <> 0, если Х <> 0.
Например, задано число Х=0. Вид результата: +0.000000000E+00.
Требование: закольцевать в одном приложении каждое из двух заданий для многократного прогона
Требования для отчёта:
-
Титульный лист;
-
Формулировка задания;
-
Листинг программы;
-
Набор исходных тестовых данных с результатами (скриншоты окна).
Обоснование типов данных
Все символьные данные по условию должны быть типа char. Используем double для числа X в задании 2, так как это самый оптимальный тип данных для работы с вещественными числами. Для переменных-счётчиков наиболее рациональным будет использование беззнаковых типов byte и word.
Обозначение | Идентификатор | Тип данных |
Переменные для настоящего и предыдущего символов в задании 1 | ch, ch1 | char |
Переменная для продолжения цикла в main(Y/N после каждого исполнения) | ch | char |
Цифры после запятой | d | char |
Степень в экспоненциальной записи числа в задании 2 | p, p1 | char |
Переменная-счётчик пар в задании 1 | k | word |
Переменная-счётчик | i | byte |
Код
program Laba5_1;
{Выполнил Кирдин М.Д., Вариант 9, Группа ФН12-11Б. Посчитать количество пар символов в последовательности и вывести число в экспоненциальной форме с точностью до 9 знака}
procedure task_1;
//процедура для 1 задания
var
ch, ch1: char;
//Переменные для настоящего и предыдущего символов
k: word;
//Счётчик количества пар
begin
writeln('Enter a sequence of any symbols ending with -?-:');
Read(ch);
k := 0;
repeat
ch1 := ch;
Read(ch);
if (ch1 = ch) then
begin
k := k + 1;
write (ch);
end;
//если настоящий и предыдущий элементы одинаковы, они считаются парой
until (ch = '?');
readln;
if (k = 0) then
Write('This sequence has no pairs of same symbols.')
//выводим соответствующее сообщение, когда нет ни одной пары
else
begin
if (k <> 1) then
Write('This sequence has ', k, ' pairs of same symbols.')
else
Write('This sequence has ', k, ' pair of same symbols.');
end;
writeln;
k := 0;
end;
procedure task_2;
//процедура для 2 задания
var
X, X1: double;
//Число Х
d, p1, p2: char;
//переменные для символьного вывода(дробная часть и степенная часть)
i: byte;
//переменная-счётчик
begin
p1 := '0';
p2 := p1;
//по умолчанию число в степени Е+00
Write('X = ');
readln(X);
X1 := X;
Write('Result: ');
while (abs(X) >= 1) do
begin
X := X / 10;
p2 := chr(Ord(p2) + 1);
if (p2 = ':') then
begin
p1 := chr(Ord(p1) + 1);
p2 := '0';
end;
end;
//увеличиваем степень, если число больше 10, пользуясь операциями chr и ord (символы для 0-9 последовательно пронумерованы в ASCII)
while (abs(X) < 1e-9) and (abs(X) > 0) do
begin
X := X * 10;
p2 := chr(Ord(p2) + 1);
if (p2 = ':') then
begin
p1 := chr(Ord(p1) + 1);
p2 := '0';
end;
end;
//уменьшаем степень, если число меньше 0.000000001
if (X >= 0) then
Write('+')
else
Write('-');
Write('0.');
if (X < 0) then
X := (-1) * X;
for i := 1 to 9 do
begin
X := X * 10;
d := chr(48 + trunc(X) mod 10);
Write(d);
end;
//при помощи операции mod выводим все цифры после запятой
Write('E');
if (abs(X1) < 1e-9) and (abs(X1) > 0) then
Write('-')
else
Write('+');
Write(p1, p2);
writeln;
end;
var
ch: char;
//переменная для зацикливания(определяет, продолжать ли работу программе на основе ввода пользователя)
begin
repeat
task_1;
task_2;
writeln('Do you want to continue? Y/N');
readln(ch);
repeat
if (ch = 'N') or (ch = 'n') then
begin
Write('Shutting down...');
halt;
end;
if (ch = 'Y') or (ch = 'y') then
break;
writeln('Incorrect input. Try again.');
until False;
//цикл, проводящий общение с пользователем(продолжать программу или нет)
until False;
end.
Тестовые данные
Ввод 1 | Ввод 2 | Результат |
I love ICT!? | 34873457385987 | 1: 0 пар 2: +0.348734573E+14 |
I want to get a creditt? | -19 | 1: 1 пара 2: -0.190000000E+02 |
Profitsssss? | 0.5 | 1: 4 пары 2: +0.500000000E+00 |
ddssfld? | 1e+40 | 1: 2 пары 2: +0.100000000E+41 |
Скриншоты