Smart Task: Решебник задач по информатике

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Smart Task: Решебник задач по информатике » Алгоритмы и Программирование » Создание программ по заданному условию (Pascal)


Создание программ по заданному условию (Pascal)

Сообщений 1 страница 5 из 5

1

Задача 1. Вывести на экран действительное число в различных форматах представления.

Решение

В этой задаче важно понимание того, как работает форматированный вывод

Код:
var
    a: real;
begin
    write('Input real number: '); //подсказка для ввода вещественного числа
    readln(a);//ввод числа
 
    writeln('Output without formatting: ',a); //обычный вывод
    writeln('Output in exponential form: ',a:12); //вывод вещественного числа с двенадцатью знаками
    writeln('Output in exponential form: ',a:7); //вывод вещественного числа с семью знаками
    writeln('Output in fixet-point: ',a:10:3); //вывод числа с десятью знаками, из которых три - десятичная часть
    writeln('Output in fixet-point: ',a:12:6);//вывод числа с двенадцатью знаками всего, из которых шесть - под дробную часть
end.

2

Задача 2. В зависимости от того, в каких единицах измерения вводится значение, перевести его в другие единицы измерения. В данном случае переводится объем информации (байты, килобайты, мегабайты и гигабайты).

Решение

Если пользователь ввел значение в байтах, то надо перевести его в килобайты, мегабайты и гигабайты. 1Кб = 1024 байта, 1Мб = 1024Кб = 1024 * 1024 байта и т. д. Значит надо постепенно делить на 1024.

Если введено значение в килобайтах, то оно переводится в байты путем умножения на 1024, а в мегабайты деления. И т. д.

Код:
var
    units: byte;
	qty: real;
 
begin
    writeln('1 - bytes'); writeln('2 - kilobytes');
    writeln('3 - megabytes'); writeln('4 - gigabytes');
    write('Select: '); readln(units);
 
    if units = 1 then begin
    write('How many bytes: '); readln(qty);
    qty := qty / 1024;
    writeln('Kilobytes: ', qty:10:2);
    qty := qty / 1024;
    writeln('Megabytes: ', qty:10:2);
    qty := qty / 1024;
    writeln('Gigabytes: ', qty:10:2);
	end
	else 
    if units = 2 then begin
    	write('How many Kilobytes: '); readln(qty);
    	qty := qty * 1024;
    	writeln('Bytes:     ', qty:10:2);
    	qty := qty / 1024 / 1024;
    	writeln('Megabytes: ', qty:10:2);
    	qty := qty / 1024;
    	writeln('Gigabytes: ', qty:10:2);
    end
    else 
    	if units = 3 then begin
        write('How many Megabytes: '); readln(qty);
        qty := qty * 1024 * 1024;
        writeln('Bytes:     ', qty:10:2);
        qty := qty / 1024;
        writeln('Kilobytes: ', qty:10:2);
        qty := qty / 1024 / 1024;
        writeln('Gigabytes: ', qty:10:2);
    	end
    	else
        if units = 4 then begin
        	write('How many Gigabytes: '); readln(qty);
        	qty := qty * 1024 * 1024 * 1024;
        	writeln('Bytes:     ', qty:10:2);
        	qty := qty / 1024;
        	writeln('Kilobytes: ', qty:10:2);
        	qty := qty / 1024;
        	writeln('Megabytes: ', qty:10:2);
        end;
end.

3

Задача 3. Подсчитать количество слов во введенной пользователем строке. Для упрощения задачи считаем, что слова разделяются исключительно одним пробелом, а первый и последний символы строки не являются пробелами.

Решение

Алгоритм решения задачи:
Измеряем длину введенной пользователем строки.
Если длина не нулевая, то это значит, что есть хотя бы одно слово.
Перебираем каждый символ строки.
Если очередной символ является пробелом, то увеличиваем счетчик слов.

Код:
var
        str: string;
        i, count: integer;
begin
        write('Your string: ');
        readln(str);
 
        i := length(str);
        if i > 0 then begin
                count := 1;
                while i > 0 do begin
                        if str[i] = ' ' then
                                count := count + 1;
                        i := i - 1;
                end;
        end
        else
                count := 0;
 
 
        writeln('Number of words: ', count);
readln;
end.

4

Задача 4. Среди трех чисел найти среднее. Если среди чисел есть равные, вывести сообщение "Ошибка".

Решение

Хотя задача кажется простой, ее решение не такое очевидное. Можно, например, проверить каждое число, лежит ли оно между двумя другими. Или найти минимальное из трех, после чего вывести минимальное из оставшихся двух. Ниже выбран первый способ.

1. Исключаем равенство чисел. Если первое число равно второму или первое равно третьему или второе равно третьему или все три числа равны (первое равно второму и второе равно третьему), то вывести сообщение "Ошибка". Иначе переходим к п. 2.
2. Проверяем лежит ли первое число между вторым и третьим. Если первое число больше второго, но меньше третьего (т.е. второе минимально), или первое число меньше второго, но больше третьего (т.е. третье минимально), то значит оно среднее. Иначе переходим к п. 3.
3. Проверяем лежит ли второе число между первым и третьим. Если второе число больше первого, но меньше третьего, или меньше первого, но больше третьего, то оно среднее. Иначе переходим к п. 4
4. Среднее число третье, так как ни один другой вариант не подошел. Действительно, числа не равны друг другу, первое и второе числа средними не являются.

Код:
var
    a1, a2, a3: integer;
 
begin
    write ('Введите три числа: ');
    readln (a1, a2, a3);
 
    if (a1 = a2) or (a1 = a3) or (a2 = a3) or ((a1 = a2) and (a2 = a3)) then
        writeln('Ошибка')
    else
        if ((a1 > a2) and (a1 < a3)) or ((a1 < a2) and (a1 > a3)) then
            writeln(a1)
        else
            if ((a2 > a1) and (a2 < a3)) or ((a2 < a1) and (a2 > a3)) then
                writeln(a2)
            else
                writeln(a3);
 
end.

5

Задача 5. Десять раз генерировать ряд случайных чисел от 0 до 99. Каждый ряд также должен иметь произвольную длину. В каждом ряде следует найти максимальное число. Сохранить только максимальные числа и вывести их на экран.

Решение

arrmax – обычный массив, где будут сохраняться максимальные значения рядов;
row – динамический массив для текущего ряда чисел;
n – длина текущего ряда чисел.

Алгоритм решения задачи:
Переменной j будет играть роль индекса элементов массива arrmax. В конце цикла for, который сделает 10 итераций, j будет увеличиваться на единицу, что будет означать переход к следующей ячейке массива.

Длина очередного ряда чисел случайна. Получив значение n, выделяем память под динамический массив с помощью процедуры getmem.

Заполняем динамический массив случайными числами.

Записываем в очередную ячейку массива arrmax первое значение динамического массива. Если какое-либо последующее значение массива, на который указывает row, будет больше arrmax[j], то производится перезапись значения.

После нахождения максимума память можно освободить (freemem).

Код:
type
    arrdinamic = array[1..50] of integer;
 
var
    arrmax: array[1..10] of integer;
    row: ^arrdinamic;
    n, i, j, k: integer;
 
begin
    randomize;
 
    j := 1;
    for i := 1 to 10 do begin
        n := random(50) + 1;
        getmem(row,n*sizeof(integer));
        for k := 1 to n do
            row^[k] := random(100);
        arrmax[j] := row^[1];
        for k := 1 to n do
            if row^[k] > arrmax[j] then
                arrmax[j] := row^[k];
        freemem(row,n*sizeof(integer));
        j := j + 1
    end;
 
    for i := 1 to 10 do
        write(arrmax[i], ' ');
 
readln
end.

Вы здесь » Smart Task: Решебник задач по информатике » Алгоритмы и Программирование » Создание программ по заданному условию (Pascal)


Рейтинг форумов | Создать форум бесплатно