Файл: Контроль обучения 4 Первое контрольное задание 5 Второе контрольное задание 31.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 469
Скачиваний: 4
Контроль обучения 4
Первое контрольное задание 5
Второе контрольное задание 31
Третье контрольное задание 65
Контроль обучения
Дисциплина «Программирование и основы алгоритмизации» изучается на протяжении одного семестра. В процессе дистанционного обучения дисциплине студент должен выполнить три контрольных заданий и компьютерную экзаменационную работу. Каждое контрольное задание требует создания нескольких программ. Студент должен выполнить свой вариант заданий. Составленные и отлаженные программы (обязательно с комментариями в тексте) студент по мере освоения программирования периодически пересылает в папку Гость/Отчеты/имя личной папки. При правильном выполнении программы студент получает подтверждение о том, что они зачтены. Если программа составлена неправильно, студент получает описание ошибок программы. В конце семестра студент выполняет экзаменационную работу.Первое контрольное задание
Первое контрольное (текстовое) задание посвящено созданию программ с использованием простых управляющих структур: условного оператора, цикла. В этом задании используются простые типы данных и нет необходимости использовать массивы. Поэтому не засчитываются программы, написанные с использованием массивов. Кроме того, требуется писать программы в рамках структурного программирования. В частности, запрещается использовать операторы перехода и метки.Задание состоит из трех задач, вам требуется составить программы на языке Паскаль. В некоторых программах полезно определить какие-то вспомогательные функции. Многие задачи из этой контрольной имеют вид: «Дана последовательность из n (действительных) целых чисел. Определить (вычислить) …» или «Даны натуральное n и вещественные числа a1, a2, ..., an. Определить (вычислить) …» и подобного рода. Во всех этих задачах не требуется хранения исходных последовательностей значений. Вы вводите n, потом в цикле, работающем n раз, осуществляете пошаговый ввод чисел и каким-то образом постепенно вычисляете необходимый результат.Примеры задач с решением-
Вычислить: y = sin1 + sin1.1 + sin1.2 + ... + sin2.
-
Обнуляем начальное значение переменной y строка 5, в которой будем накапливать сумму. -
Начальное значение аргумента функции i равно 1 (строка 6). -
Проверяем, значение i меньше или равно 2, т.к. по заданию аргумент функции изменяется от 1 до 2 (строка 7). -
Если «да», то определяем очередное значение функции (строка 9). Сохраняем его в переменной с. Если «нет», то расчет суммы закончен – переходим на шаг 8. -
Добавляем это слагаемое в сумму (строка 10). -
Увеличиваем значение аргумента i на 0.1 (строка 11). -
Переходим на шаг 3. -
Выводим результат на экран (строка 13).
| 1) | var y, c, i : real; |
| 2) | begin |
| 3) | writeln('Полученное значение расчета формулы ', |
| 4) | 'y=sin1+sin1.1+sin1.2+ ... +sin2 = '); |
| 5) | y:=0; |
| 6) | i:=1; |
| 7) | while i <=2 do |
| 8) | Begin |
| 9) | c := sin(i); |
| 10) | y:=y+c; |
| 11) | i:=i+0.1; |
| 12) | end; |
| 13) | writeln(y); |
| 14) | end. |
-
Обнуляем начальное значение переменной y строка 6, в которой будем накапливать сумму. -
Организуем цикл для определения суммы (параметр данного цикла должен измениться от 0 до 10) . -
В данном цикле определяем очередное слагаемое по формуле и добавляем это слагаемое в сумму (строка 7). -
Выводим результат на экран (строка 8).
| 1) | var y : real; |
| 2) | i : integer; |
| 3) | Begin |
| 4) | writeln('Полученное значение расчета формулы ', |
| 5) | 'y=sin1+sin1.1+sin1.2+ ... +sin2 = '); |
| 6) | y:=0; |
| 7) | for i:=0 to 10 do y:=y+sin(1+0.1*i); |
| 8) | writeln(y); |
| 9) | end. |
, поэтому воспользовались оператором целочисленного деления на 2 (n div 2). В данном цикле выполняем следующее.
Определяем, является ли очередное i делителем числа n (в качестве n в данном цикле используем j). Для этого определяем остаток от деления j на i. Если остаток равен 0 (строка 10), т.е. число i является делителем j, то определяем, сколько таких делителей, уменьшая число n (строки 11–18). Переменной f присваиваем значение true (строка 12) – это означает, что у заданного числа n есть делители. Организуем цикл, пока остаток от деления j на i равен 0 (строка 13). В данном цикле выводим делитель на экран (строка 15) и уменьшаем заданное число, деля его целочисленно на делитель (строка 16). Повторяем цикл.
После завершения этого цикла возвращаемся на цикл For (строка 9), изменяем i и повторяем те же действия для нового делителя.
5. Если у числа нет делителей (оно является простым), то данное число можно разложить только на 1 и само на себя. Вспомогательная переменная f и определяет, были ли делители у числа n. Если значение переменной f осталось false, то делителей не было, поэтому выводим само это число (строка 19).
| 1) | var i, n, j : integer; f: boolean; |
| 2) | begin |
| 3) | repeat |
| 4) | write('Введите натуральное число N= '); |
| 5) | readln(n); |
| 6) | until n>0; |
| 7) | write (N:6, '=1'); |
| 8) | f:=false; j:=n; |
| 9) | for i:=2 to n div 2 do |
| 10) | if j mod i = 0 then |
| 11) | begin |
| 12) | f:=true; |
| | {цикл определят, сколько таких множителей i в нашем числе n} |
| 13) | while j mod i=0 do |
| 14) | begin |
| 15) | write('*', i); |
| 16) | j:=j div i; |
| 17) | end; |
| 18) | end; |
| | {f определяет, были ли найдены простые множители, |
| | большие единицы} |
| 19) | if not f then writeln('*', n); |
| 20) | writeln |
| 21) | end. |
4. Даны натуральное n и последовательность a1, a2,…,an вещественных чисел. Найдите знакочередующую сумму S = a1a2+ a3… + (1)n+1 an.Переменные:n – количество чисел;a – очередное число;p – булевский признак знака слагаемого;i – переменная цикла;S – знакочередующая сумма чисел.Алгоритм решения задачи:
-
вводим длину последовательности n и устанавливаем начальное значение S; -
булевская переменная p первоначально истинна, она будет указывать на знак слагаемого в сумме; -
последовательно считываем числа и, если p = true, то прибавляем его к сумме S, иначе отнимаем; -
на каждом шаге цикла значение p меняем на противоположное; -
выводим результат.
-
вводим длину последовательности n и устанавливаем начальное значение sum; -
последовательно считываем числа и, если число отрицательное, то прибавляем его к сумме sum; -
в зависимости от значения sum выводим результат.