Линейные алгоритмы.
1. Найти
сумму двух чисел
алг сумма
нач вещ a,b
. вывод “введите два числа”
. ввод a,b
. вывод “сумма равна”,a+b
кон
или
алг сумма
нач вещ a,b,с
. вывод “введите два числа”
. ввод a,b
с:=a+b
. вывод “сумма равна”,c
кон
2.
Найти разность двух чисел
алг разность |
Задания по теме «Алгоритм линейной
структуры»
Задача 1.
Написать программу нахождения гипотенузы прямоугольного
треугольника по двум катетам
алг гипотенуза |
Задача 2.
Найти объем куба, если известна его сторона.
алг объем куба |
Задача 3.
Найти площадь прямоугольника, если известно, что одна сторона
больше другой на 2
алг площадь прямоугольника |
Задача 4.
Найти периметр треугольника, зная длину всех его сторон.
алг периметр треугольника |
Задача 5.
Найти периметр прямоугольника и площадь.
алг p s прямоугольника |
Задача 6.
Найти среднее
арифметическое пяти чисел.
алг среднее арифметическое |
Как сделать программу в кумире сложение двух чисел на клавиатуре?
помогите!
Найди верный ответ на вопрос ✅ «Как сделать программу в кумире сложение двух чисел на клавиатуре? помогите! …» по предмету 📙 Информатика, а если ответа нет или никто не дал верного ответа, то воспользуйся поиском и попробуй найти ответ среди похожих вопросов.
Искать другие ответы
Новые вопросы по информатике
Главная » Информатика » Как сделать программу в кумире сложение двух чисел на клавиатуре? помогите!
МБОУ «Школа-гимназия»
ПРОЕКТ
по информатике
на тему:
«Решение простейших математических задач
в системе программирования КуМир»
Выполняли
ученики 5 А класса:
Шипарёв Владислав,
Степанов Дмитрий
Руководитель:
учитель информатики,
Слащинина Е. В.
Ярцево,
2018
Паспорт проектной работы
Название проекта |
«Решение простейших математических задач в системе программирования «КуМир»» |
Руководитель проекта и консультант |
Слащинина Елена Владимировна |
Образовательная область |
Информатика |
Состав проектной группы |
Шипарёв Владислав, Степанов Дмитрий |
Тип проекта (информационный, исследовательский, ролевой, практико-ориентированный, творческий) |
информационный |
Заказчик проекта (гимназия, родители, учитель-предметник) |
МБОУ «Школа-гимназия» |
Цель проект |
|
Задачи проекта |
– изучить систему команд Кумира; – рассмотреть способы решения задач с использованием разных типов алгоритма (линейный, ветвление, циклический) – составить подборку задач по математике 5-6 класса, которые можно решить в системе Кумир, представить тексты всех задний в электронной форме. – решить задачи в системе программирования Кумир |
Предполагаемый продукт(ы) проекта |
Сборник задач с решением |
Этапы работы над проектом |
Подготовительный: – определение темы проекта; – уточнение цели и задач; – определение источников информации. Основной этап: – распределение обязанностей в группе – определение шагов действий для каждого участника группы – высказывание возможных путей разрешения спорных вопросов, обсуждения спорных вопросов; – поиск и сбор информации каждым участником проекта с помощью литературы, средств массовой информации, сети интернета, собственного опыта и исследования. Заключительный: – анализ полученной информации и её систематизации – подведение выводов; – изготовление буклетов и презентации как продуктов проекта; – защита проекта – обсуждение результатов работы |
Образовательные и культурно-просветительские учреждения, на базе которых выполнялся проект: база гимназии, библиотека, музей и др. |
МБОУ «Школа-гимназия» |
Содержание
- Введение ……………………………………………………………………………….. 4стр
- Основная часть
- Изучаем алгоритмы. Алгоритмы и исполнители ………………. 6стр
- Система программирования КуМир. Простые команды ……..7стр
- Величины в алгоритмах. Описание переменных …………………8стр
- Заключение ………………………………………………………………………………. 11стр
- Список литературных источников ……………………………………..12стр
- Приложение …………………………………………………………..13стр
Актуальность:
В наш информационный век профессия программиста является не только популярной, но и очень востребованной. Само название профессии происходит от слова «программа», оно здесь ключевое. Мы, как и многие современные школьники, тоже мечтаем быть программистами. Работа любого программиста начинается с написания первой простейшей программы. Создавать свои программы, и быть с компьютером на «ты», что может быть интереснее. Но так ли проста работа программиста, легко ли писать программы? Попробуем с этим разобраться.
Первая система программирования, с которой мы познакомились в этом учебном году, называется Кумир. С помощью исполнителя Чертёжник мы научились создавать рисунки в координатах. А затем решили научиться решать простейшие математические задачи из курса математики 5-6 класса.
Проблема: Можно ли простейшие алгебраические задачи решить средствами программирования?
Цель: научиться решать простейшие математические задачи в системе программирования Кумир; составить электронный сборник заданий для 5-6 класса.
Задачи:
- Изучить систему команд Кумира;
- Рассмотреть способы решения задач с использованием разных типов алгоритма (линейный, ветвление, циклический)
- Составить подборку задач по математике 5-6 класса, которые можно решить в системе Кумир, представить тексты всех задний в электронной форме.
- Решить задачи в системе программирования Кумир
Методы исследования: изучение теории по выбранной теме, анализ литературы, практическое применение.
Материалы и ресурсы: ватман, бумага формата А4, клей, карандаши.
Программные средства: веб-браузер, текстовый процессор OpenOfficeWritter, презентация.
Этапы работы над проектом
Подготовительный:
– определение темы проекта;
– уточнение цели и задач;
– определение источников информации.
Основной этап:
– распределение обязанностей в группе
– определение шагов действий для каждого участника группы
– высказывание возможных путей разрешения спорных вопросов, обсуждения спорных вопросов;
– поиск и сбор информации каждым участником проекта с помощью литературы, средств массовой информации, сети интернета, собственного опыта и исследования.
Заключительный:
– анализ полученной информации и её систематизации
– подведение выводов;
– защита проекта
-обсуждение результатов работы
Основная часть
Изучаем алгоритмы
Алгоритмы и исполнители
Все, что бы мы ни делали, имеет какую-то цель. Не всегда ее удается достигнуть, но для того чтобы это было возможно необходимо как следует сформулировать желаемый для себя результат, а потом продумать четкий план его достижения. Часто план сформулирован в виде предписаний или инструкций.
Алгоритм – понятное и точное предписание исполнителю выполнить конечную последовательность команд, приводящую к достижению результата.
Исполнитель – тот объект или субъект, для управления которым составлен алгоритм.
Характеристики исполнителя:
- СКИ — система команд исполнителя – вся совокупность команд, которые исполнитель умеет выполнять.
- среда – обстановка, в которой функционирует исполнитель.
Свойства алгоритма:
- Понятность – алгоритм должен быть составлен только из команд, входящих в СКИ.
- Дискретность (детализация) – алгоритм разбивается на отдельные элементарные шаги, которые могут быть исполнены при помощи СКИ.
- Однозначность (определенность или детерминированность) – каждый шаг алгоритма имеет единственность толкования выполнения действия и порядка их выполнения.
- Результативность (конечность) – выполнение алгоритма должно приводить к результату за конечное число шагов.
- Массовость – возможность применения алгоритма к классу однотипных задач, различающихся исходными данными.
Определенная последовательность действий исполнителя всегда применяется к некоторым исходным данным. Например: для приготовления пирога нужны соответствующие продукты, для решения математической задачи – решение квадратного уравнения – нужны числовые данные (значения его коэффициентов). Необходимый и достаточный набор данных для решения поставленной задачи (получения искомого результата) называется полным набором данных.
Способы записи алгоритмов
На практике наиболее распространены следующие формы представления алгоритмов:
- словесная (запись на естественном языке);
- графическая (изображения из графических символов блок-схемы);
- псевдокоды (полуформализованные описания алгоритмов на условном алгоритмическом языке, включающие в себя как элементы языка программирования, так и фразы естественного языка, общепринятые математические обозначения и др.);
- программная (тексты на языках программирования).
Система программирования КуМир
КуМир (Комплект Учебных МИРов) – система программирования, предназначенная для поддержки начальных курсов информатики и программирования в средней и высшей школе.
Сайт: http://www.niisi.ru/kumir/ и http://lpm.org.ru/kumir2/
В системе КуМир используется школьный алгоритмический язык с русской лексикой и встроенными исполнителями Робот и Чертёжник.
При вводе программы КуМир осуществляет постоянный полный контроль ее правильности, сообщая на полях программы об всех обнаруженных ошибках.
При выполнении программы в пошаговом режиме КуМир выводит на поля результаты операций присваивания и значения логических выражений. Это позволяет ускорить процесс освоения азов программирования.
В простейшем случае программа на КуМире выглядит так:
алг Первый
нач
.
кон
После «алг» (алгоритм) пишется имя алгоритма, между «нач» (начало) и «кон» (конец) пишутся команды алгоритма. При написании автоматически создаются отступы вначале строки, это делает программу более наглядной, удалять или пытаться сделать отступ самим не надо.
Приведенный алгоритм «Первый» не будет ничего делать, т. к. между «нач» и «кон» у него нет команд.
Вот пример уже работоспособного алгоритма:
алг Площадь прямоугольника
нач
. вещ длина, ширина, площадь
. вывод “введите значения длины и ширины прямоугольника”
. ввод длина, ширина
. площадь := длина * ширина
. вывод “Площадь прямоугольника равна “, площадь
.кон
Его уже можно запустить на выполнение, он запросит у пользователя значения длины и ширины, вычислит и напечатает результат вычислений…
Простые команды
Эти команды используются практически во всех алгоритмах.
- команда описания переменных
- команда присваивания
- команды ввода-вывода
Величины в алгоритмах
Для запоминания информации в памяти используют величины.
Компьютер работает с информацией, хранящейся в его памяти. Отдельный информационный объект (число, символ, строка, таблица и пр.) называется величиной.
Величины в программировании, как и в математике, делятся на переменные и константы. Значение константы остается неизменной в течении всей работы программы, значение переменной величины может изменяться.
У каждой переменной есть имя, тип и текущее значение.
Прежде чем писать последовательность команд алгоритма, надо определить количество и тип переменных, участвующих в решении задачи.
Для этого из условия задачи выделить:
* что дано (например, сколько чисел и какие они: целые или вещественные)
* что требуется вывести как результат.
Придумывать имена переменным, как и самим алгоритмам, не обязательно, но желательно так, чтобы по ним было понятно назначение переменной в алгоритме. Имя – это последовательность слов, разделенных пробелами. Первое слово имени не должно начинаться с цифры. Ни одно из слов не должно быть ключевым словом (уже имеющим значение в АЯ, например: цел, кон и др.)
В именах можно использовать:
- буквы (русские и латинские, прописные и строчные)
- цифры
- два специальных знака: @ _
Примеры возможных имен: m, x2, площадь, погода на завтра, Ноябрь 7, Седьмое ноября, дом_57б.
Также будьте внимательны при использовании имен, одинаково выглядящих на русском языке и записанных латинскими буквами. Переменные “x” (икс) и “x” (хэ) – это разные переменные.
Типы переменных
Существуют три основных типа величин, с которыми работает компьютер: числовой, символьный и логический.
Тип величины определяет какие значения она может принимать и какие действия с ней можно выполнять. В зависимости от типа переменной в памяти компьютера будет выделена определенная область. В КуМире числовые типы бывают двух видов: целочисленные и вещественные.
Числовые типы
- цел – целые числа от -2147483647 до 2147483647
- вещ – действительные числа от -1.797693 × 10308 до 1.797693 × 10308
Текстовые типы
- сим – один любой символ
- лит – строка символов
Описание переменных
Для того чтобы компьютер мог работать с величиной, нужно указать тип и имя величины, например «цел n». Такое указание называется описанием величины.
алг
нач
цел а, б
вещ частное
…
кон
Команда присваивания
Для того чтобы запомнить или изменить значение величины есть специальная команда — команда присваивания, которая записывается в виде:
имя величины := выражение
Например:
частное := а/б
с:= div(а,б)
k:= sqrt(a)
Команда вывода
Позволяет выводить на экран текстовые сообщения, значения переменных и результаты выражений.
вывод “тексты”, имена величин, выражения, нс
Обратите внимание:
- текстовые сообщения берутся в кавычки;
- имена переменных и выражения перечисляются через запятую без кавычек;
- нс – команда перехода на новую строку
Команда ввода
Позволяет вводить с клавиатуры значения переменных перечисленных в этой команде
ввод а, б
Заключение
Вывод:
В ходе работы над проектом мы научились планировать свою деятельность и распределять обязанности в группе.
Выяснили, что такое алгоритм решения задачи, познакомились с системой программирования КуМир и изучили ее команды, составили свой сборник заданий, на основе учебников математики 5-6 класса и сопроводили его подробным решением каждой задачи.
Практическая значимость проекта: разработанный нами сборник заданий можно использовать на уроках информатики как дидактический материал, а также для самостоятельного изучения курса программирования в среде КуМир.
Литературные источники
- Сайт К. Полякова. Практикум по программированию в среде КумМир. URL: http://kpolyakov.spb.ru/school/kumir.htm
- Программирование в среде КуМир. URL: http://pskumir.blogspot.ru/
- Wiki. Изучаем алгоритмы. URL: https://wiki.lyc84.ru/index.php?
- Алгоритмизация в среде КуМир. URL: https://edusar.soiro.ru/course/view.php?id=475
- Практикум по программированию Д. Кириенко. URL: http://server.179.ru/wiki/?page=DenisKirienko/Kumir
Приложение
Решаем задачи и примеры
Сложение
алг сложение
нач
. цел а, б, сумма
. вывод “введите два целых числа”
. ввод а, б
. сумма:=а+б
. вывод “Сумма равна “, а,“+”,б,“=”,сумма
кон
Вычитание
алг вычитание
нач
. цел а, б, разность
. вывод “введите два целых числа”
. ввод а, б
. разность:=а-б
. вывод “Разность равна “, а,“-“,б,“=”,разность
кон
Умножение
алг умножение
нач
. цел а, б, произвидение
. вывод “введите два целых числа”
. ввод а, б
. произвидение:=а*б
. вывод “Произведение равно “, а,“*”,б,“=”,произвидение
кон
Деление
алг деление
нач
. вещ а, б, частное
. вывод “введите три числа”
. ввод а, б
. частное:=а/б
. вывод “Частное равно “, а,“/”,б,“=”,частное
кон
Периметр прямоугольника
алг Периметр прямоугольника
нач
. цел а, б, в, P |а-длина б-ширина в-2 P-периметр
. вывод “введите три целых числа а, б, в”
. ввод а, б, в
. P:=(а+б)*в
. вывод “Периметр равен “, ” (“, а, “+”, б, “)”, “*”, в, “=”, P
кон
Площадь прямоугольника
алг площадь прямоугольника
нач
. цел а, б, S
. ввод а, б
. S:=а*б
. вывод “площадь равна “, S
кон
Объём параллелепипеда
алг объем
нач
. цел a, b, h, V
. вывод “Введите три целых числа”
. ввод a, b, h
. V:=a*b*h
. вывод “Объём равен “, a,“*”,b,“*”,h,“=”,V
кон
Немного задач…
Скорость сближения
алг скорость сближения
нач
. вещ а, б, р, ч|
. вывод “введите три целых числа”
. ввод а, б, р
. ч:=р/(а+б)
. вывод “СКОРОСТЬ СБЛЖЕНИЕ =”, ч
кон
Нахождение скорости
алг задача
нач
. цел а, б, в, г | а-скорость лодки=6км/ч б-скорость лодки=9км/ч в-2 востолько раз больше скорость гидроцикла г-скорость гидроцикла=?
. вывод “введите три целых числа”
. ввод а, б, в
. г:=(а+б)*в
. вывод “скорость гидроцикла-“ , “(“, а, “+”, б, “)”, “*”, в, “=”, г
кон
Найти сумму n-го числа слагаемых
алг сумма
нач
. цел i,n |i – счетчик , n – число слагаемых
. вещ s | s -сумма
. вывод ‘введите число слагаемых n =’, нс
. s:=0
. ввод n
. нц n раз
. . вывод ‘введите слагаемое’,нс
. . ввод i
. . s:=s+i
. кц
. вывод ‘сумма ‘,n,‘-х слагаемых =’,s:0:2
кон
Найти произведение n-го числа множителей
алг произведение
нач
. цел i,n |i – счетчик , n – число множителей
. вещ p | p -произведение
. вывод ‘введите число множителей n =’, нс
. p:=1
. ввод n
. нц n раз
. . вывод ‘введите множитель’,нс
. . ввод i
. . p:=p*i
. кц
. вывод ‘произведение ‘,n,‘ множителей =’,p:0:2
кон
Сравнить а) два числа и вывести их в порядке возрастания;
алг сравнить два числа
нач
. цел a,b | a,b -числа
. вывод ‘введите два числа’, нс
. ввод a,b
. если a>b
. . то вывод ‘число ‘,a,‘ > числа ‘,b иначе
. . . вывод ‘число ‘,a,‘ < числа ‘,b
. все
кон
Сравнить б) три числа и вывести их в порядке возрастания;
алг сравнить три числа
нач
. цел a,b,c,m | a,b,c -числа, m – наибольшее число
. вывод ‘введите три числа’, нс
. ввод a,b,c
. если a>b
. . то
. . . если a>c
. . . . то
. . . . . m:=a
. . . . иначе m:=c
. . . все
. . иначе
. . . если b>c
. . . . то m:=b
. . . . иначе m:=c
. . . все
. все
. вывод ‘наибольшое число = ‘,m
кон
Представить двухзначное число в виде суммы разрядных слагаемых
алг сумма разрядных слагаемых
нач
. цел x,a,b| x – число, a,b – цифры числа
. вывод ‘введите число’, нс
. ввод x
. a:=div(x,10)
. b:= mod(x, 10)
. вывод x,‘=’,a,‘*10’,‘+’,b,‘*1’
кон
Представить трехзначное число в виде суммы разрядных слагаемых
алг сумма разрядных слагаемых
нач
. цел x,a,b,c| x – число, a,b – цифры числа
. вывод ‘введите число’, нс
. ввод x
. a:=div(x,100)
. b:= div(mod(x, 100),10)
. c:=mod(x,10)
. вывод x,‘=’,a,‘*100’,‘+’,b,‘*10’,‘+’,c,‘*1’
кон
Округлить число до тыс., сот., дес., до старшего разряда
алг округлить число
нач
. цел x,a,b,c,d| x – число, a,b,c,d – цифры числа
. вывод ‘введите число’, нс
. ввод x
. a:=div(x,1000)
. b:= mod(div(x, 100),10)
. c:=div(mod(x,100),10)
. d:=mod(x,10)
. если b>5 или b=5
. . то
. . . вывод x,‘~’,(a+1)*1000, ‘до тысяч’,нс
. . иначе
. . . вывод x,‘~’,a*1000, ‘до тысяч’,нс
. все
. если c>5 или c=5
. . то
. . . вывод x,‘~’,a*1000 +(b+1)*100,‘до сотен’,нс
. . иначе
. . . вывод x,‘~’,a*1000+b*100, ‘до сотен’,нс
. все
. если d>5 или d=5
. . то
. . . вывод x,‘~’,a*1000 +b*100+(c+1)*10, ‘до десятков’,нс
. . иначе
. . . вывод x,‘~’,a*1000+b*100+c*10, ‘до десятков’, нс
. все
. вывод x,‘~’,a*1000+b*100+c*10+d, ‘до единиц’, нс
кон
Сколько существует двузначных чисел, у которых
первая цифра больше второй.
алг двузначные числа
нач
. цел i,a,b,s| i – счетчик, a,b – цифры, s – сумма
. i:=10
. s:=0
. нц 90 раз
. . a:=div(i,10)
. . b:=mod(i,10)
. . если a>b
. . . то
. . . . s:=s+1
. . все
. . i:=i+1
. кц
. вывод s
кон
Найти сумму 1+2+3+4+5+ …+n-го числа слагаемых (с помощью цикла)
алг сумма n числа слагаемых
нач
. цел i,n,s| i – счетчик, n – число слагаемых, s – сумма
. вывод ‘введите число слагаемых n =’
. ввод n
. i:=1
. s:=0
. нц n раз
. . s:=s+i
. . i:=i+1
. кц
. вывод s
кон
Найти сумму 1+2+3+4+5+ …+n-го числа слагаемых (с помощью метода Гауса)
алг сумма n числа слагаемых
нач
. вещ i,n,s| i – счетчик, n – число слагаемых, s – сумма
. вывод ‘введите число слагаемых n =’
. ввод n
. s:=((1+n)*n)/2
. вывод s
кон
Найдите сумму: а) нечетных чисел 1+3+5+ …+n и б) четных чисел 2+4+6+.. +n(с помощью цикла)
алг сумма нечетных_четных слагаемых
нач
. цел i,n,s1,s2| i – счетчик, n – число слагаемых, s1 – сумма четных слагаемых, s2 – сумма нечетных слагаемых
. вывод ‘введите число слагаемых n =’
. ввод n
. i:=1
. s1:=0
. s2:=0
. нц n раз
. . если mod(i,2)=0
. . . то
. . . . s1:=s1+i
. . . иначе
. . . . s2:=s2+i
. . все
. . i:=i+1
. кц
. вывод ‘сумма четных слагаемых = ‘,s1, нс
. вывод ‘сумма нечетных слагаемых = ‘,s2, нс
.
кон
Найдите сумму: а) нечетных чисел 1+3+5+ …+n
(по формуле см. № 226 учебника 6 кл.)
алг сумма нечетных слагаемых
нач
. цел i,n,s2| i – счетчик, n – число слагаемых, s2 – сумма нечетных слагаемых
. вывод ‘введите число слагаемых n =’
. ввод n
. i:=1
. s2:=0
. нц n раз
. . если mod(i,2)<>0
. . . то
. . . . s2:=s2+1
. . все
. . i:=i+1
. кц
. вывод ‘сумма нечетных слагаемых = ‘,s2*s2, нс
.
Кон
Определить вид треугольника(если таковой существует): а) (остроугольный, прямоугольный, тупоугольный), если известные градусные меры всех его улов.
алг вид треугольника по углам
нач
. цел a,b,c| a,b,c – градусные меры всех углов треугольника
. вывод ‘введите величины углов треугольника a =,b=,c=’
. ввод a,b,c
. если a+b+c=180 и a<>0 и b<>0 и c<>0
. . то
. . . если a>90 или b>90 или c>90
. . . . то
. . . . . вывод ‘треугольник тупоугольный’
. . . . иначе
. . . . . если a=90 или b=90 или c=90
. . . . . . то
. . . . . . . вывод ‘треугольник прямоугольный’
. . . . . . иначе
. . . . . . . вывод ‘треугольник остроугольный’
. . . . . все
. . . все
. . иначе
. . . вывод‘треугольник не существует’
. все
кон
Определить вид треугольника(если таковой существует): б) (равнобедренный, равносторонний, разносторонний), если известны длины всех его сторон.
алг вид треугольника по сторонам
нач
. цел a,b,c| a,b,c – длины всех сторон треугольника
. вывод ‘введите длины сторон треугольника a =,b=,c=’
. ввод a,b,c
. если a<b+c и b<a+c и c<a+b
. . то
. . . если a=c=b
. . . . то
. . . . . вывод ‘треугольник равносторонний’
. . . . иначе
. . . . . если a=b или b=c или a=c
. . . . . . то
. . . . . . . вывод ‘треугольник равнобедренный’
. . . . . . иначе
. . . . . . . вывод ‘треугольник разносторонний’
. . . . . все
. . . все
. . иначе
. . . вывод‘треугольник не существует’
. все
кон
Найти НОД(а,в)
алг НОД
нач
. цел a,b,x,y| a,b – числа
. вывод ‘введите числа ‘
. ввод a,b
. x:=a
. y:=b
. нц пока a<>b
. . если a>b
. . . то a:=a–b
. . . иначе b:=b–a
. . все
. кц
. вывод‘НОД(‘,x,‘,’,y,‘)=’,a
кон
Как сделать программу в кумире сложение двух чисел на клавиатуре?
Помогите!
На этой странице находится вопрос Как сделать программу в кумире сложение двух чисел на клавиатуре?. Здесь же – ответы на него,
и похожие вопросы в категории Информатика, которые можно найти с помощью
простой в использовании поисковой системы. Уровень сложности вопроса
соответствует уровню подготовки учащихся 5 – 9 классов. В комментариях,
оставленных ниже, ознакомьтесь с вариантами ответов посетителей страницы. С
ними можно обсудить тему вопроса в режиме on-line. Если ни один из
предложенных ответов не устраивает, сформулируйте новый вопрос в поисковой
строке, расположенной вверху, и нажмите кнопку.
Программирование (АлгЯзык)
§ 17. Введение
§ 18. Линейные программы
§ 19. Ветвления
§ 2 0. Программирование циклических алгоритмов
§ 21 . Массивы
§ 22 . Алгоритмы обработки массивов
Программирование (АлгЯзык)
§ 17. Введение
Что такое программирование?
Программирование — это создание программ для компьютеров. Этим занимаются программисты .
Чем занимаются программисты:
анализ задачи (выделение исходных данных, связей между ними, этапов решения задачи)
системные аналитики
разработка алгоритмов
алгоритмисты
написание и отладка программ
кодировщики
тестирование программ
тестировщики
написание документации
технические писатели
Направления в программировании
системный программист
операционные системы, утилиты, драйверы
прикладной программист
прикладные программы, в т.ч. для мобильных устройств
веб-программист
веб-сайты
программист баз данных
системы управления базами данных
Простейшая программа
название программы
алг Куку
нач | начало программы
| тело программы
кон | конец программы
комментарии после | не обрабатываются
?
Что делает эта программа ?
Вывод на экран
алг Привет
нач
вывод ‘ Привет! ‘
кон
оператор вывода
Оператор — это команда языка программирования.
?
вывод ‘ Привет ‘ , Вася !
Что плохо?
вывод ‘ Привет , Вася !’
вся строка в апострофах
Переход на новую строку
вывод ‘ Привет , Вася !’
вывод ‘ Привет , Петя !’
ожидание:
Привет , Вася !
Привет , Петя !
реальность:
Привет , Вася ! Привет , Петя !
решение:
новая строка
вывод ‘ Привет , Вася !’ , нс
вывод ‘ Привет , Петя !’
нс
Системы программирования
Системы программирования — это средства для создания новых программ.
Транслятор — это программа, которая переводит тексты программ, написанных программистом, в машинные коды (команды процессора).
- компилятор — переводит всю программу в машинные коды, строит исполняемый файл ( .exe )
- интерпретатор — сам выполняет программу по частям ( по одному оператору).
алг Привет
нач
вывод ‘ Привет! ‘
кон
1010010100
privet.exe
Системы программирования
Отладчик — это программа для поиска ошибок в других программах.
- пошаговый режим — выполнение программы по шагам (по одному оператору)
- просмотр значений переменных во время выполнения программы
- точки останова – операторы в программе, перед выполнением которых нужно остановиться.
Среда программирования ( IDE ) :
- редактор текста программ
- транслятор
- отладчик
Задачи
« B »: Вывести на экран текст «лесенкой»
Вася
пошел
гулять
« C »: Вывести на экран рисунок из букв
Ж
ЖЖЖ
ЖЖЖЖЖ
ЖЖЖЖЖЖЖ
HH HH
ZZZZZ
Программирование (АлгЯзык)
§ 1 9. Линейные программы
Пример задачи
Задача . Ввести два числа и вычислить их сумму.
алг Сумма
нач
| ввести два числа
| вычислить их сумму
| вывести сумму на экран
кон
?
Выполнится?
Псевдокод – алгоритм на русском языке с элементами языка программирования.
!
Компьютер не может исполнить псевдокод!
Зачем нужны переменные?
алг Сумма
нач
| ввести два числа
| вычислить их сумму
| вывести сумму на экран
кон
Где запомнить?
Переменная — это величина, которая имеет имя, тип и значение. Значение переменной может изменяться во время выполнения программы.
объявление переменных
цел a, b, c
ячейки памяти
Имена переменных
Идентификатор — это имя программы или переменной.
цел a, b, c
заглавные и строчные буквы различаются
МОЖНО использовать
- латинские буквы ( A-Z , a-z) , русские буквы (А-Я , а-я) цифры знак подчеркивания _
- латинские буквы ( A-Z , a-z) , русские буквы (А-Я , а-я)
- цифры
- знак подчеркивания _
!
Имя не может начинаться с цифры!
Какие имена правильные?
AXby R&B 4Wheel Вася “PesBarbos” TU154 [QuQu] _ABBA A+B
14
Работа с переменными
Присваивание (запись значения)
a ← 5
a := 5
:=
оператор присваивания
a := 5
a := 18
?
Что будет храниться в a ?
Вывод на экран
?
вывод a
В чём разница?
с:= 14
вывод с
с:= 14
вывод ‘ с ‘
14
c
Работа с переменными
Изменение значения
увеличить на 1
i ← i + 1
i:= i + 1
a
b
4
a:= 4
b:= 7
a:= a + 1
b:= b + 1
a:= a + b
b:= b + a
a:= a + 2
b:= b + a
7
5
8
13
21
1 5
36
Ввод с клавиатуры
Цель – изменить исходные данные, не меняя программу.
5
ввод a
!
- Программа ждет, пока пользователь введет значение и нажмет Enter .
- Введенное значение записывается в переменную a .
Ввод с клавиатуры
ввод a, b
через пробел:
25 30
через запятую:
25,30
a
25
b
30
a
25
b
30
Программа сложения чисел
алг Сумма
нач
цел a, b, c
ввод a, b | ввести два числа
c:= a + b | вычислить их сумму
вывод c | вывести сумму на экран
кон
?
Что плохо?
ожидание:
Введите два числа: 5 7
5+7=12
реальность:
5 7
12
?
Как улучшить диалог?
Вывод данных с текстом
значение b
значение a
значение с
5+7=12
текст
вывод a
вывод ‘+’
вывод b
вывод ‘=’
вывод c
вывод a , ‘+’ , b , ‘=’ , c
Программа сложения чисел
алг Сумма
нач
цел a, b, c
вывод ‘ Введите два числа: ‘
ввод a, b
c:= a + b
вывод a , ‘+’ , b , ‘=’ , c
кон
?
Как переделать для 3-х чисел?
Задачи
« A »: Ввести три числа, найти их сумму.
Пример:
Введите три числа:
4
5
7
4+5+7=16
« B »: Ввести три числа, найти их сумму и произведение.
Пример:
Введите три числа:
4
5
7
4+5+7=16
4*5*7=140
Задачи
« C »: Ввести три числа, найти их сумму, произведение и среднее арифметическое.
Пример:
Введите три числа:
4
5
7
4+5+7=16
4*5*7=140
(4+5+7) / 3 =5.33 3333
Арифметические выражения
Линейная запись (в одну строку):
a:=(c+b- 1 )/ 2 *d
Операции :
+ –
* – умножение
/ – деление
** – возведение в степень ( x 2 x**2 )
цел x, a, b
ввод a, b
x:= a / b
?
Что плохо?
a / b
вещ x
24
Порядок выполнения операций
- действия в скобках
- возведение в степень
- умножение и деление, слева направо
- сложение и вычитание, слева направо
1
2
3
4
5
6
a := c + (1 – 2 * b) / 2 * d
Частное и остаток
div – деление нацело (остаток отбрасывается)
mod – остаток от деления
- div – деление нацело (остаток отбрасывается) mod – остаток от деления
?
175 сек = 2 мин 55 сек
Как получить 2 и 55?
цел t, m, s
- цел t, m, s
t := 17 5
m := div ( t, 6 0 ) | 2
s := mod (t, 6 0 ) | 5 5
- t := 17 5 m := div ( t, 6 0 ) | 2 s := mod (t, 6 0 ) | 5 5
Частное и остаток
?
Что получится?
n := 123
d := div ( n, 10 ) | 1 2
k := mod (n, 10 ) | 3
- n := 123 d := div ( n, 10 ) | 1 2 k := mod (n, 10 ) | 3
При делении на 10 нацело отбрасывается последняя цифра числа.
Остаток от деления на 10 – это последняя цифра числа.
Форматный вывод
цел a= 1 , b= 2 , c= 3
- цел a= 1 , b= 2 , c= 3
вывод a, b, c
- вывод a, b, c
123
1 2 3
вывод a, ‘ ‘ ,b, ‘ ‘ ,c
- вывод a, ‘ ‘ ,b, ‘ ‘ ,c
1 2 3
вывод a, b: 3 , c: 5
- вывод a, b: 3 , c: 5
3
5
количество знаков на вывод числа
?
Сколько знаков для вывода a ?
Задачи
« A »: Ввести число, обозначающее количество секунд. Вывести то же самое время в минутах и секундах.
Пример :
Введите число секунд: 175
2 мин. 55 с.
« B »: Ввести число, обозначающее количество секунд. Вывести то же самое время в часах, минутах и секундах.
Пример :
Введите число секунд: 8325
2 ч. 18 мин. 45 с
Задачи
«С»: Занятия в школе начинаются в 8-30. Урок длится 45 минут, перерывы между уроками – 10 минут. Ввести номер урока и вывести время его окончания.
Пример :
Введите номер урока: 6
13-50
Форматный вывод
вещ x= 12.34567891234
- вещ x= 12.34567891234
вывод x
- вывод x
12 . 3 45679
6
вывод x : 10 : 3
- вывод x : 10 : 3
12 . 3 46
по умолчанию
3
всего на число
в дробной части
10
вывод x : 8 : 2
- вывод x : 8 : 2
12 . 3 4
вывод x : 2 : 2
- вывод x : 2 : 2
12 . 3 4
вывод x : 0 : 1
- вывод x : 0 : 1
12 . 3
минимально возможное
Научный формат чисел
вещ x= 123456789
- вещ x= 123456789
вывод x
- вывод x
1 . 23 4568 e+008
1,23 4568 10 8
вещ x= 0.0000 123456789
- вещ x= 0.0000 123456789
вывод x
- вывод x
1 . 23 4568 e-005
1,23 4568 10 –5
Операции с вещественными числами
int – целая часть числа (ближайшее целое слева !)
- int – целая часть числа (ближайшее целое слева !)
вещ x= 1 .5
- вещ x= 1 .5
вывод int ( x )
- вывод int ( x )
1
– 1,5
вещ x= -1.5
- вещ x= -1.5
вывод int ( x )
- вывод int ( x )
-2
x
– 1
– 2
– 3
0
1
sqrt – квадратный корень
- sqrt – квадратный корень
вещ x= 2 . 2 5
- вещ x= 2 . 2 5
вывод sqrt ( x )
- вывод sqrt ( x )
1.5
Операции с вещественными числами
1 /3 = 0,33333…
бесконечно много знаков
!
Большинство вещественных чисел хранятся в памяти компьютера с ошибкой!
вещ x , y, z
- вещ x , y, z
x:= 1 / 2
y:= 1 / 3
z:= 5 / 6 | 5/6=1/2+1/3
вывод x +y-z
- x:= 1 / 2 y:= 1 / 3 z:= 5 / 6 | 5/6=1/2+1/3 вывод x +y-z
-1.110223e-016
Задачи
« A »: Ввести число, обозначающее размер одной фотографии в Мбайтах. Определить, сколько фотографий поместится на флэш-карту объёмом 2 Гбайта.
Пример :
Размер фотографии в Мбайтах: 6.3
Поместится фотографий: 325.
Задачи
« B »: Оцифровка звука выполняется в режиме стерео с частотой дискретизации 44,1 кГц и глубиной кодирования 24 бита. Ввести время записи в минутах и определить, сколько Мбайт нужно выделить для хранения полученного файла (округлить результат в большую сторону).
Пример :
Введите время записи в минутах: 10
Размер файла 152 Мбайт
Задачи
«С»: Разведчики-математики для того, чтобы опознать своих, используют числовые пароли. Услышав число-пароль, разведчик должен возвести его в квадрат и сказать в ответ первую цифры дробной части полученного числа. Напишите программу, которая по полученному паролю (вещественному числу) вычисляет число-ответ.
Пример :
Введите пароль: 1.92
Ответ: 6
потому что 1,92 2 = 3, 6 864…, первая цифра дробной части – 6
Случайные и псевдослучайные числа
Случайные явления
- встретил слона – не встретил слона
- жеребьёвка на соревнованиях
- лотерея
- случайная скорость (направление выстрела ) в игре
- …
Случайные числа — это последовательность чисел, в которой невозможно предсказать следующее число, даже зная все предыдущие.
Случайные и псевдослучайные числа
!
Компьютер неслучаен!
Псевдослучайные числа — похожи на случайные, но строятся по формуле.
следующее
предыдущее
X n+1 : = mod ( a*X n +b, c) | от 0 до c-1
X n+1 : = mod ( X n + 3 , 10 ) | от 0 до 9
2
8
5
3
9
6
X = 0
0
8
1
4
7
зерно
зацикливание
Датчик случайных чисел
Целые числа на отрезке:
цел K , L
K:= ira nd ( 1 , 6 ) | отрезок [1,6]
L := ira nd ( 1 , 6 ) | это уже другое число!
англ. integer – целый
random – случайный
Вещественные числа в полуинтервале:
цел x , y
x:= ra nd ( 0 , 1 0 ) | полуинтервал [ 0 , 10)
y := ra nd ( 0 , 1 0 ) | это уже другое число!
Задачи
« A »: В игре «Русское лото» из мешка случайным образом выбираются бочонки, на каждом из которых написано число от 1 до 90. Напишите программу, которая выводит наугад первые 5 выигрышных номеров.
« B »: + Доработайте программу «Русское лото» так, чтобы все 5 значений гарантированно были бы разными (используйте разные диапазоны).
Задачи
«С»: + Игральный кубик бросается три раза (выпадает три случайных значения). Из этих чисел составляется целое число, программа должна найти его квадрат.
Пример :
Выпало очков:
1 2 3
Число 123
Его квадрат 15129
Задачи
« D »: + Получить случайное трёхзначное число и вывести в столбик его отдельные цифры.
Пример :
Получено число 123
сотни: 1
десятки: 2
единицы: 3
Программирование (АлгЯзык)
§ 19. Ветвления
b то M:= a иначе M:= b все a b? M:= a M:= b вывод M ? Если a = b? конец ” width=”640″
Выбор наибольшего из двух чисел
полная форма ветвления
начало
ввод a , b
да
нет
если a b то
M:= a
иначе
M:= b
все
a b?
M:= a
M:= b
вывод M
?
Если a = b?
конец
b то иначе все вывод ‘Наибольшее число ‘ , M кон полная форма условного оператора M:=a M:=b ” width=”640″
45
Вариант 1. Программа
алг Максимум нач цел a, b, M вывод ‘Введите два целых числа’ , нс ввод a, b если a b то иначе все вывод ‘Наибольшее число ‘ , M кон
полная форма условного оператора
M:=a
M:=b
a? M:= b вывод M конец ” width=”640″
Выбор наибольшего из двух чисел-2
начало
ввод a,b
неполная форма ветвления
M:= a
да
нет
b a?
M:= b
вывод M
конец
a то M:= b все вывод ‘Наибольшее число ‘, M кон неполная форма условного оператора ” width=”640″
Вариант 2. Программа
алг Максимум 2 нач цел a, b, M вывод ‘Введите два целых числа’, нс ввод a, b
M:= a если b a то M:= b все вывод ‘Наибольшее число ‘, M кон
неполная форма условного оператора
Примеры
Поиск минимального :
если a b то
M:= a
все
если b a то
M:= b
все
?
Что плохо ?
?
Когда работает неверно ?
?
если a b то
c := a
a:= b
b:= c
все
Что делает эта программа ?
В других языках программирования
Паскаль :
С :
if a b then begin
c: = a ;
a:= b;
b:= c;
end;
if ( a b ) {
c = a ;
a = b;
b = c;
}
Python:
if a b :
c = a
a = b
b = c
b то вывод ‘Андрей старше’ иначе вывод ‘Борис старше’ все ” width=”640″
Вложенные условные операторы
Задача . В переменной a записан возраст Антона, а в переменной b – возраст Бориса. Определить, кто из них старше.
?
Сколько вариантов ответа ?
если a = b то
вывод ‘Одного возраста’
иначе
если a=b то
вывод ‘Одного возраста’
иначе
вывод ‘Борис старше’
все
все
вложенный условный
оператор
если a b то
вывод ‘Андрей старше’
иначе
вывод ‘Борис старше’
все
Задачи
« A »: Ввести два целых числа, найти наибольшее и наименьшее из них.
Пример :
Введите два целых числа:
1 5
Наибольшее число 5
Наименьшее число 1
« B »: Ввести четыре целых числа, найти наибольшее из них.
Пример :
Введите четыре целых числа:
1 5 4 3
Наибольшее число 5
Задачи
« C »: Ввести последовательно возраст Антона, Бориса и Виктора. Определить, кто из них старше.
Пример :
Возраст Антона: 15
Возраст Бориса: 17
Возраст Виктора: 16
Ответ: Борис старше всех.
Пример :
Возраст Антона: 17
Возраст Бориса: 17
Возраст Виктора: 16
Ответ: Антон и Борис старше Виктора.
Сложные условия
Задача . Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ ‘подходит’ или ‘не подходит’ ) .
Особенность : надо проверить, выполняются ли два условия одновременно:
возраст 25 возраст 40
?
Можно ли решить известными методами ?
= 25 то если x 40 то вывод ‘Подходит!’ иначе вывод ‘Не подходит.’ все иначе вывод ‘Не подходит.’ все кон вложенный условный оператор ” width=”640″
Плохое решение
алг Сотрудник
нач
цел x
вывод ‘Введите ваш возраст’ , нс
ввод x
если x = 25 то
если x 40 то
вывод ‘Подходит!’
иначе
вывод ‘Не подходит.’
все
иначе
вывод ‘Не подходит.’
все
кон
вложенный условный оператор
= 25 и x 40 то вывод ‘Подходит!’ иначе вывод ‘Не подходит.’ все кон сложное условие ” width=”640″
Хорошее решение (операция «И»)
алг Сотрудник
нач
цел x
вывод ‘Введите ваш возраст’ , нс
ввод x
если x = 25 и x 40 то
вывод ‘Подходит!’
иначе
вывод ‘Не подходит.’
все
кон
сложное условие
Примеры
Задача . Вывести ‘ Да ‘ , если число в переменной a – двузначное.
если 10 a и a 99 то
вывод ‘Да’
все
Задача . Вывести ‘ Да ‘ , если число в переменной a – двузначное и делится на 7.
если 10 a и a 99 и mod (a, 7 )= 0 то
вывод ‘Да’
все
Сложные условия
Задача . Самолёт летает по понедельникам и четвергам. Ввести номер дня недели и определить, летает ли в этот день самолёт.
Особенность : надо проверить, выполняется ли одно из двух условий:
день = 1 день = 4
если d = 1 или d = 4 то
вывод ‘Летает’
d = 1 или d = 4
иначе
вывод ‘Не летает’
все
сложное условие
40 если ??? то вывод ‘Не подходит!’ иначе вывод ‘Подходит.’ все ” width=”640″
Ещё пример
Задача . Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ ‘подходит’ или ‘не подходит’ ) . Использовать « ИЛИ ».
x 25 или x 40
если ??? то
вывод ‘Не подходит!’
иначе
вывод ‘Подходит.’
все
= = Сложное условие – это условие, состоящее из нескольких простых условий (отношений), связанных с помощью логических операций: И – одновременное выполнение условий И – одновременное выполнение условий x = 25 и x x = 25 и x ИЛИ – выполнение хотя бы одного из условий ИЛИ – выполнение хотя бы одного из условий x или x = 40 x или x = 40 НЕ – отрицание, обратное условие НЕ – отрицание, обратное условие не ( x 25 ) ??? не ( x 25 ) ??? равно не равно x ” width=”640″
Простые и сложные условия
Простые условия (отношения)
= =
Сложное условие – это условие, состоящее из нескольких простых условий (отношений), связанных с помощью логических операций:
- И – одновременное выполнение условий
- И – одновременное выполнение условий
x = 25 и x
- x = 25 и x
- ИЛИ – выполнение хотя бы одного из условий
- ИЛИ – выполнение хотя бы одного из условий
x или x = 40
- x или x = 40
- НЕ – отрицание, обратное условие
- НЕ – отрицание, обратное условие
не ( x 25 ) ???
- не ( x 25 ) ???
равно
не равно
x
=, =, НЕ И ИЛИ , =, =, НЕ И ИЛИ 1 4 2 3 5 6 если не a 2 или c 5 и b то … все если не a 2 или c 5 и b то … все ” width=”640″
Порядок выполнения операций
- выражения в скобках
- выражения в скобках
- , =, =, НЕ И ИЛИ
- , =, =,
- НЕ
- И
- ИЛИ
1
4
2
3
5
6
если не a 2 или c 5 и b то
…
все
- если не a 2 или c 5 и b то … все
b) не (a b) a и b a c или b c a и b c a c и b d a и b a c или b c a и b c a c и b d не (a = b) или c = d не (a = b) или c = d a = b или не (c a c или b c или b a a = b или не (c a c или b c или b a Да Да Нет Нет Нет Да Да Да ” width=”640″
Сложные условия
Истинно или ложно при a := 2; b := 3; c := 4;
не (a b)
- не (a b)
a и b
a c или b c
a и b c
a c и b d
- a и b a c или b c a и b c a c и b d
не (a = b) или c = d
- не (a = b) или c = d
a = b или не (c
a c или b c или b a
- a = b или не (c a c или b c или b a
Да
Да
Нет
Нет
Нет
Да
Да
Да
Задачи
« A »: Напишите программу, которая получает три числа – рост трёх спортсменов, и выводит сообщение «По росту.», если они стоят по возрастанию роста, или сообщение «Не по росту!», если они стоят не по росту.
Пример :
Введите рост трёх спортсменов:
165 170 172
По росту.
Пример :
Введите рост трёх спортсменов:
175 170 172
Не по росту!
Задачи
« B »: Напишите программу, которая получает номер месяца и выводит соответствующее ему время года или сообщение об ошибке.
Пример :
Введите номер месяца:
5
Весна.
Пример :
Введите номер месяца:
15
Неверный номер месяца.
Задачи
« C »: Напишите программу, которая получает возраст человека (целое число, не превышающее 120) и выводит этот возраст со словом «год», «года» или «лет». Например, «21 год», «22 года», «25 лет».
Пример :
Введите возраст: 18
Вам 18 лет.
Пример :
Введите возраст: 21
Вам 21 год.
Пример :
Введите возраст: 2 2
Вам 22 года.
Логические переменные
лог b
- лог b
…
b:= да
b:= нет
- … b:= да b:= нет
только два возможных значения
Пример:
лог выходной
- лог выходной
…
выходной:= (d= 6 или d= 7 )
…
если не выходной то
вывод ‘Рабочий день.’
иначе
вывод ‘Выходной!’
все
- … выходной:= (d= 6 или d= 7 ) … если не выходной то вывод ‘Рабочий день.’ иначе вывод ‘Выходной!’ все
Задачи
« A »: Напишите программу, которая получает с клавиатуры целое число и записывает в логическую переменную значение «да» ( True ), если это число трёхзначное. После этого на экран выводится ответ на вопрос: «Верно ли, что было получено трёхзначное число?».
Пример :
Введите число: 165
Ответ: да.
Пример :
Введите число: 1651
Ответ: нет.
Задачи
« B »: Напишите программу, которая получает с клавиатуры трёхзначное число и записывает в логическую переменную значение «да» ( True ), если это число – палиндром, то есть читается одинаково слева направо и справа налево. После этого на экран выводится ответ на вопрос: «Верно ли, что введённое число – палиндром?».
Пример :
Введите число: 165
Ответ: нет.
Пример :
Введите число: 656
Ответ: да.
Задачи
«С»: Напишите программу, которая получает с клавиатуры трёхзначное число и записывает в логическую переменную значение «да» ( True ), если это все его цифры одинаковы. После этого на экран выводится ответ на вопрос: «Верно ли, что все цифры введённого числа одинаковы?»
Пример :
Введите число: 161
Ответ: нет.
Пример :
Введите число: 555
Ответ: да.
Экспертная система
Экспертная система — это компьютерная программа, задача которой — заменить человека-эксперта при принятии решений в сложной ситуации.
База знаний = факты + правила вывода :
- если у животного есть перья, то это птица ;
- если животное кормит детенышей молоком, то это — млекопитающее ;
- если животное — млекопитающее и ест мясо, то это — хищник.
Диалог :
Это животное кормит детей молоком? Нет
Это животное имеет перья? Да
Это птица .
Дерево решений
Кормит детей молоком?
да
нет
млекопитающее
Имеет перья?
Ест мясо?
да
да
нет
нет
?
птица
?
хищник
Программирование экспертной системы
Ответы пользователя: да и нет – символьные строки.
лит ответ
- лит ответ
вывод ‘Кормит детей молоком? ‘
ввод ответ
если ответ = ‘да’ то
… | вариант 1
иначе
… | вариант 2
все
- вывод ‘Кормит детей молоком? ‘ ввод ответ если ответ = ‘да’ то … | вариант 1 иначе … | вариант 2 все
| вариант 1
- | вариант 1
вывод ‘Млекопитающее.’ , нс
вывод ‘Ест мясо? ‘
ввод ответ
если ответ = ‘да’ то
вывод ‘Хищник.’ , нс
иначе
вывод ‘Не знаю.’ , нс
все
- вывод ‘Млекопитающее.’ , нс вывод ‘Ест мясо? ‘ ввод ответ если ответ = ‘да’ то вывод ‘Хищник.’ , нс иначе вывод ‘Не знаю.’ , нс все
Заглавные и строчные буквы
лит ответ
- лит ответ
…
если ответ = ‘да’ то
…
- … если ответ = ‘да’ то …
не сработает на ‘ Да ‘
?
Как исправить ?
если ответ = ‘да’ или ответ = ‘Да’ то
…
- если ответ = ‘да’ или ответ = ‘Да’ то …
Ещё лучше:
если нижний регистр (ответ) = ‘да’ то
…
- если нижний регистр (ответ) = ‘да’ то …
преобразовать все заглавные в строчные
если верхний регистр (ответ) = ‘ДА’ то
…
- если верхний регистр (ответ) = ‘ДА’ то …
Программирование (АлгЯзык)
§ 2 0. Отладка программ
Виды ошибок
Синтаксические ошибки – нарушение правил записи операторов языка программирования.
Обнаруживаются транслятором.
Логические ошибки – неверно составленный алгоритм.
Отказ (ошибка времени выполнения) – аварийная ситуация во время выполнения программы.
Отладка – поиск и исправление ошибок в программе.
Пример отладки программы
Программа решения квадратного уравнения
алг КвУр
нач
вещ a, b, c, D, x1, x2
вывод ‘Введите a, b, c: ‘
ввод a, b, c
D:=b*b- 4 *a*a
x1:=(-b+ sqrt (D))/ 2 *a
x2:=(-b- sqrt (D))/ 2 *a
вывод ‘ x1=’ , x1, ‘ x2=’ , x2
кон
- алг КвУр нач вещ a, b, c, D, x1, x2 вывод ‘Введите a, b, c: ‘ ввод a, b, c D:=b*b- 4 *a*a x1:=(-b+ sqrt (D))/ 2 *a x2:=(-b- sqrt (D))/ 2 *a вывод ‘ x1=’ , x1, ‘ x2=’ , x2 кон
Тестирование
Тест 1 . a = 1, b = 2, c = 1.
Реальность:
Ожидание:
x1=-1.0 x2=-1.0
x1=-1.0 x2=-1.0
Тест 2 . a = 1, b = – 5 , c = 6 .
x1=3.0 x2=2.0
x1=4.791 x2=0.209
Найден вариант, когда программа работает неверно. Ошибка воспроизводится !
Возможные причины :
- неверный ввод данных
- неверное вычисление дискриминанта
- неверное вычисление корней
- неверный вывод результатов
Отладочная печать
Идея : выводить все промежуточные результаты.
ввод a, b, c
вывод a, ‘ ‘ , b, ‘ ‘ , c, нс
D:=b*b- 4 *a*a
вывод ‘ D=’ , D, нс
…
- ввод a, b, c вывод a, ‘ ‘ , b, ‘ ‘ , c, нс D:=b*b- 4 *a*a вывод ‘ D=’ , D, нс …
вывод a, ‘ ‘ , b, ‘ ‘ , c, нс
- вывод a, ‘ ‘ , b, ‘ ‘ , c, нс
вывод ‘ D=’ , D, нс
- вывод ‘ D=’ , D, нс
Результат:
Введите a, b, c: 1 -5 6
1.0 -5.0 6.0
D=21.0
D=21.0
!
D:=b*b- 4 *a* с ;
- D:=b*b- 4 *a* с ;
с
Одна ошибка найдена!
Отладка программы
Тест 1 . a = 1, b = 2, c = 1.
Ожидание:
Реальность:
x1=-1.0 x2=-1.0
x1=-1.0 x2=-1.0
Тест 2 . a = 1, b = – 5 , c = 6 .
x1=3.0 x2=2.0
x1=3.0 x2=2.0
?
Программа работает верно?
Тест 3 . a = 8 , b = – 6 , c = 1 .
x1= 0 . 5 x2= 0 . 25
x1=3 2 .0 x2= 16 .0
( 2 *a )
x1:=(-b+ sqrt (D))/ 2 *a
x2:=(-b- sqrt (D))/ 2 *a
- x1:=(-b+ sqrt (D))/ 2 *a x2:=(-b- sqrt (D))/ 2 *a
?
Что неверно?
( 2 *a )
Задачи
« A »: Загрузите программу , которая должна вычислять сумму цифр трёхзначного числа:
- « A »: Загрузите программу , которая должна вычислять сумму цифр трёхзначного числа:
- « A »: Загрузите программу , которая должна вычислять сумму цифр трёхзначного числа:
цел N, d1, d2, s
- цел N, d1, d2, s
- цел N, d1, d2, s
ввод ‘N = ‘ ; вывод N
d0:= mod (N, 10 )
d1:= mod (N, 100 )
d2:= div (N, 100 )
d0 + d2 := s
вывод s
- ввод ‘N = ‘ ; вывод N d0:= mod (N, 10 ) d1:= mod (N, 100 ) d2:= div (N, 100 ) d0 + d2 := s вывод s
- ввод ‘N = ‘ ; вывод N d0:= mod (N, 10 ) d1:= mod (N, 100 ) d2:= div (N, 100 ) d0 + d2 := s вывод s
Выполните отладку программы:
- исправьте синтаксические ошибки
- определите ситуации, когда она работает неверно
- исправьте логические ошибки.
Задачи
« B »: Доработайте программу из п. А так, чтобы она правильно работала с отрицательными трёхзначными числами: при вводе числа «–123» программа должна выдавать ответ 6.
- « B »: Доработайте программу из п. А так, чтобы она правильно работала с отрицательными трёхзначными числами: при вводе числа «–123» программа должна выдавать ответ 6.
- « B »: Доработайте программу из п. А так, чтобы она правильно работала с отрицательными трёхзначными числами: при вводе числа «–123» программа должна выдавать ответ 6.
b то M:= a иначе M:= b если c b то M:= b иначе M:= c вывод M ввод ‘a = ‘ ; ввод a вывод ‘b = ‘ ; вывод b ввод ‘c = ‘ ; ввод c если a b то M:= a иначе M:= b если c b то M:= b иначе M:= c вывод M ввод ‘a = ‘ ; ввод a вывод ‘b = ‘ ; вывод b ввод ‘c = ‘ ; ввод c если a b то M:= a иначе M:= b если c b то M:= b иначе M:= c вывод M Выполните отладку программы: исправьте синтаксические ошибки определите ситуации, когда она работает неверно исправьте логические ошибки. ” width=”640″
Задачи
«С»: Загрузите программу, которая должна вычислять наибольшее из трёх чисел:
- «С»: Загрузите программу, которая должна вычислять наибольшее из трёх чисел:
- «С»: Загрузите программу, которая должна вычислять наибольшее из трёх чисел:
цел a, b, c, M
- цел a, b, c, M
- цел a, b, c, M
ввод ‘a = ‘ ; ввод a
вывод ‘b = ‘ ; вывод b
ввод ‘c = ‘ ; ввод c
если a b то M:= a
иначе M:= b
если c b то M:= b
иначе M:= c
вывод M
- ввод ‘a = ‘ ; ввод a вывод ‘b = ‘ ; вывод b ввод ‘c = ‘ ; ввод c если a b то M:= a иначе M:= b если c b то M:= b иначе M:= c вывод M
- ввод ‘a = ‘ ; ввод a вывод ‘b = ‘ ; вывод b ввод ‘c = ‘ ; ввод c если a b то M:= a иначе M:= b если c b то M:= b иначе M:= c вывод M
Выполните отладку программы:
- исправьте синтаксические ошибки
- определите ситуации, когда она работает неверно
- исправьте логические ошибки.
Программирование (АлгЯзык)
§ 2 0. Программирование циклических алгоритмов
Зачем нужен цикл?
Задача . Вывести 5 раз «Привет!».
вывод ‘Привет’ , нс
вывод ‘Привет’ , нс
вывод ‘Привет’ , нс
вывод ‘Привет’ , нс
вывод ‘Привет’ , нс
?
А если 5000?
Цикл « N раз» :
нц 5 раз
вывод ‘Привет’ , нс
кц
Как работает цикл?
!
Нужно запоминать, сколько раз цикл уже выполнен!
переменная-счётчик
ещё не делали
счётчик:= 0
нц пока счётчик 5
вывод ‘Привет’ , нс
счётчик:= счётчик + 1
кц
сделали ещё раз
??? вывод ‘Привет’ , нс счётчик:= счётчик ??? кц 0 – 1 ” width=”640″
Как работает цикл?
Идея : запоминать, сколько шагов осталось.
счётчик:= 5
нц пока счётчик ???
вывод ‘Привет’ , нс
счётчик:= счётчик ???
кц
0
– 1
Цикл с предусловием
- условие проверяется при входе в цикл
- как только условие становится ложным, работа цикла заканчивается
- если условие ложно в самом начале, цикл не выполняется ни разу
нц пока условие
…
кц
тело цикла
?
Если условие никогда не станет ложно?
бесконечный цикл (зацикливание)
нц пока да
…
кц
Сумма цифр числа
Задача. Вычислить сумму цифр введённого числа.
123 1 + 2 + 3 = 6
Выделить последнюю цифру числа в переменной N :
d:= mod (N, 10 )
123 3
Отбросить последнюю цифру числа в переменной N :
N:= div (N, 10 )
123 12
Добавить к переменной sum значение переменной d :
sum = 6 6 + 4 = 1 0
d = 4
sum:= sum + d
Сумма цифр числа
- выделяем последнюю цифру числа ( mod )
- увеличиваем сумму на значение цифры ( sum:=sum+d )
- отсекаем последнюю цифру числа ( div )
N
d
123
sum
12
3
0
1
3
2
0
1
5
6
начальные значения
Сумма цифр числа
начало
обнулить сумму
ввод N
sum:= 0
выполнять ‘пока N 0 ‘
нет
N 0 ?
да
вывод sum
d:= mod (N, 10 )
sum:= sum + d
N:= div (N, 10 )
конец
Сумма цифр числа
алг Сумма цифр
нач
цел N, d, sum
вывод ‘Введите целое число’ , нс
ввод N
sum : = 0
вывод ‘Сумма цифр числа ‘ , N, ‘ равна’ , sum
кон
, N1
; N1:= N
нц пока N 0
d := mod ( N , 10 )
sum:= sum + d
N:= div (N, 10 )
кц
?
Что плохо ?
N1,
Задачи
« A »: Напишите программу, которая получает с клавиатуры количество повторений и выводит столько же раз какое-нибудь сообщение.
Пример :
Сколько раз повторить? 3
Привет!
Привет!
Привет!
« B »: Напишите программу, которая получает с клавиатуры натуральное число и определяет, сколько раз в его десятичной записи встречается цифра 1.
Пример :
Введите число? 311
Единиц: 2
Задачи
« C »: Напишите программу, которая получает с клавиатуры натуральное число и находит наибольшую цифру в его десятичной записи.
Пример :
Введите число : 311
Наибольшая цифра: 3
« D »: Напишите программу, которая получает с клавиатуры натуральное число и определяет, есть ли в его десятичной записи одинаковые цифры, стоящие рядом.
Пример :
Введите число : 553 Введите число : 5 3 5
Ответ: да. Ответ: нет.
Алгоритм Евклида
Задача. Найти наибольший общий делитель (НОД) двух натуральных чисел.
Заменяем большее из двух чисел разностью большего и меньшего до тех пор, пока они не станут равны. Это и есть НОД.
НОД( a,b)= НОД( a-b, b)
= НОД( a, b-a)
Евклид
(365-300 до. н. э.)
Пример:
НОД (14 , 21 ) = НОД (14 , 21-14 ) = НОД (14 , 7 )
= НОД (7 , 7 ) = 7
много шагов при большой разнице чисел:
НОД (1998 , 2 ) = НОД (1996 , 2 ) = … = 2
b? нет да b:=b-a a:=a-b ” width=”640″
Алгоритм Евклида
начало
a = b?
да
конец
нет
a b?
нет
да
b:=b-a
a:=a-b
b то a:= a – b иначе b:= b – a все кц ? Где будет НОД? Как его вывести? ? Как вывести НОД в формате НОД(14,21) = 7? ? А без дополнительных переменных? ” width=”640″
Алгоритм Евклида
нц пока a b
если a b
то a:= a – b
иначе b:= b – a
все
кц
?
Где будет НОД? Как его вывести?
?
Как вывести НОД в формате НОД(14,21) = 7?
?
А без дополнительных переменных?
Модифицированный алгоритм Евклида
Заменяем большее из двух чисел остатком от деления большего на меньшее до тех пор, пока меньшее не станет равно нулю . Тогда большее — это НОД.
НОД( a,b)= НОД( mod (a,b), b)
= НОД( a, mod (b,a))
Пример :
НОД (14 , 21 ) = НОД (14 , 7 ) = НОД (0 , 7 ) = 7
b то a:= mod (a, b) иначе b:= mod (b, a) все кц ? Где будет НОД? Как его вывести? если a 0 вывод a иначе вывод b все вывод ??? a +b ” width=”640″
Модифицированный алгоритм
нц пока a 0 и b 0
если a b то
a:= mod (a, b)
иначе
b:= mod (b, a)
все
кц
?
Где будет НОД? Как его вывести?
если a 0
вывод a
иначе
вывод b
все
вывод ???
a +b
b) a = a % b; else b = b % a; } while (a 0 ) and (b 0 ) do if ab then a:= a mod b else b:= b mod a; Python: while a!= 0 and b!= 0 : if a b: a = a % b else: b = b % a ” width=”640″
В других языках программирования
С :
Паскаль :
while (a!= 0 && b!= 0 )
{
if (a b)
a = a % b;
else
b = b % a;
}
while (a 0 ) and
(b 0 ) do
if ab then
a:= a mod b
else
b:= b mod a;
Python:
while a!= 0 and b!= 0 :
if a b:
a = a % b
else:
b = b % a
Задачи
« A »: Ввести с клавиатуры два натуральных числа и найти их НОД с помощью алгоритма Евклида.
Пример :
Введите два числа:
21 14
НОД(21,14)=7
« B »: Ввести с клавиатуры два натуральных числа и найти их НОД с помощью модифицированного алгоритма Евклида. Заполните таблицу:
a
b
64168
НОД( a,b )
358853
82678
6365133
691042
17905514
11494962
23108855
549868978
298294835
Задачи
« C »: Ввести с клавиатуры два натуральных числа и сравнить количество шагов цикла для вычисления их НОД с помощью обычного и модифицированного алгоритмов Евклида.
Пример :
Введите два числа:
1998 2
НОД(1998,2)=2
Обычный алгоритм: 998
Модифицированный: 1
Обработка потока данных
Задача . На вход программы поступает поток данных — последовательность целых чисел, которая заканчивается нулём . Требуется найти сумму элементов этой последовательности.
нц пока x 0
| добавить x к сумме
| x := следующее число
кц
?
Откуда возьмётся x в первый раз?
Обработка потока данных
цел x, sum
sum:= 0
ввод x | ввести первое число
нц пока x 0
sum:= sum + x
ввод x | ввести следующее
кц
вывод ‘Сумма ‘ , sum
?
Как найти сумму положительных?
Задачи
« A »: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Определить, сколько получено чисел, которые делятся на 3.
« B »: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Определить, сколько получено двузначных чисел, которые заканчиваются на 3.
« C »: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Найти максимальное из введённых чётных чисел.
0: ‘ ввод N кц при N 0 N N 0 ? нет условие окончания работы цикла да конец ” width=”640″
Цикл с постусловием
- условие проверяется после завершения очередного шага цикла
- цикл всегда выполняется хотя бы один раз
- как только условие становится истинным , работа цикла заканчивается
начало
нц
вывод ‘Введите N 0: ‘
ввод N
кц при N 0
N
N 0 ?
нет
условие окончания работы цикла
да
конец
Задачи
« A »: Напишите программу, которая предлагает ввести пароль и не переходит к выполнению основной части, пока не введён правильный пароль. Основная часть – вывод на экран «секретных сведений».
« B »: Напишите программу, которая получает с клавиатуры натуральное число, которое больше 1, и определяет, простое оно или нет. Для этого нужно делить число на все натуральные числа, начиная с 2, пока не получится деление без остатка.
« C »: Напишите программу, которая получает с клавиатуры два целых числа и вычисляет их произведение, используя только операции сложения.
Задачи
« D »: Напишите программу, которая получает с клавиатуры натуральное число и вычисляет целый квадратный корень из него – наибольшее число, квадрат которого не больше данного числа.
Цикл по переменной
Задача . Вывести на экран степени числа 2 от 2 1 до 2 10 .
k:= 1
N:= 2
нц пока k 10
вывод N, нс
N:= N* 2
k:= k + 1
кц
!
k:= 1
Работа с k в трёх местах!
Идея : собрать всё вместе.
k 10
N:= 2
нц для k от 1 до 10
вывод N, нс
N:= N* 2
кц
k:= k + 1
k от 1 до 10
увеличение на 1 по умолчанию
Цикл по переменной
Задача . Найти сумму чисел от 1 до 1000.
цел sum, i
sum:= 0
нц для i от 1 до 1000
sum:= sum + i
кц
Задача . Вывести квадраты чисел от 10 до 1 по убыванию.
нц для k от 10 до 1 шаг –1
вывод k*k, нс
кц
шаг –1
любое целое
Цикл по переменной
Задача . Найти сумму чётных чисел от 2 до 1000.
sum:= 0
нц для i от 1 до 1000
если mod (i, 2 ) = 0 то
sum:= sum + i
все
кц
?
Что плохо?
sum:= 0
нц для i от 2 до 1000 шаг 2
sum:= sum + i
кц
шаг 2
В других языках программирования
С :
Паскаль :
int sum, i;
sum = 0 ;
for (i= 1 ; i 1000 ; i++)
sum += i;
sum:= 0 ;
for i:= 1 to 1000 do
sum:= sum + i;
i=i+1;
шаг только 1 или –1 ( downto )
sum=sum+i;
Python:
Sum = 0
for i in range ( 1 , 1001 ):
S um += i
диапазон [1;1001)
Задачи
« A »: Ипполит задумал трёхзначное число, которое при делении на 15 даёт в остатке 11, а при делении на 11 даёт в остатке 9. Напишите программу, которая находит все такие числа.
« B »: С клавиатуры вводится натуральное число N. Программа должна найти факториал этого числа (обозначается как N!) – произведение всех натуральных чисел от 1 до N. Например,
5! = 1 • 2 • 3 • 4 • 5 = 120.
« C »: Натуральное число называется числом Армстронга , если сумма цифр числа, возведенных в N -ную степень (где N – количество цифр в числе) равна самому числу. Например, 153 = 1 3 + 5 3 + 3 3 . Найдите все трёхзначные Армстронга.
Программирование (АлгЯзык)
§ 21 . Массивы
Что такое массив?
?
Как ввести 10000 переменных?
Массив – это группа переменных одного типа, расположенных в памяти рядом (в соседних ячейках) и имеющих общее имя.
Надо :
- выделять память
- записывать данные в нужную ячейку
- читать данные из ячейки
Выделение памяти (объявление)
!
минимальный индекс
Массив = таблица !
максимальный индекс
целтаб A[ 1 : 5 ]
вещтаб V[ 0 : 5 ]
логтаб L[ -5 : 5 ]
симтаб S[ 65 : 90 ]
Индекс элемента — это значение, которое указывает на конкретный элемент массива.
размер через константу
цел N = 10
целтаб A[ 1 : N ]
?
Зачем?
Что неправильно?
целтаб A [ 10 : 1 ]
…
A[ 5 ] := 4.5 ;
[ 1 : 10 ]
целтаб A[ 1 : 10 ]
…
A[ 15 ] := ‘a’
116
Обращение к элементу массива
НОМЕР элемента массива
(ИНДЕКС)
A
массив
3
1
2
3
4
5
15
5
10
15
20
25
A[1]
A[2]
A[3]
A[4]
A[5]
ЗНАЧЕНИЕ элемента массива
НОМЕР (ИНДЕКС) элемента массива : 2
A[2]
ЗНАЧЕНИЕ элемента массива : 10
Обращение к элементу массива
1
2
3
4
5
23
12
7
43
51
цел i
i:= 2
A[ 3 ]:= A[i] + 2 *A[i- 1 ] + A[ 2 *i]
вывод A[ 3 ]+A[ 5 ]
?
Что получится?
101
A[ 3 ]:= A[ 2 ] + 2 *A[ 1 ] + A[ 4 ]
вывод A[ 3 ]+A[ 5 ]
1 52
Что неверно?
целтаб A[ 1 : 5 ]
цел x
…
x:= 2
вывод A[x- 3 ]
A[x+ 4 ]:=A[x- 1 ]+A[ 2 *x]
?
Что плохо?
вывод A[ – 1 ]
A[ 6 ]:=A[ 1 ]+A[ 4 ]
Выход за границы массива — это обращение к элементу с индексом, который не существует в массиве.
Перебор элементов массива
цел N = 10
целтаб A[ 1 : N ]
Перебор элементов : просматриваем все элементы массива и, если нужно, выполняем с каждым из них некоторую операцию.
нц для i от 1 до N
| здесь работаем с A[i]
кц
Заполнение массива
нц для i от 1 до N
A[i]:= i
кц
?
Что произойдёт?
В развёрнутом виде
A[ 1 ]:= 1
A[ 2 ]:= 2
A[ 3 ]:= 3
…
A[N]:= N
1
2
3
N
…
Заполнение массива в обратном порядке
N
…
3
2
1
X:= N
A[ 1 ]:= N
A[ 2 ]:= N- 1
A[ 3 ]:= N- 2
…
A[N]:= 1
нц для i от 1 до N
A[i]:= X
кц
X:= X – 1
кц
?
Как меняется X ?
X = N, N-1, …, 2, 1
уменьшение на 1
начальное значение
Заполнение массива в обратном порядке
A[i]:= X
N
…
3
2
1
?
Как связаны i и X ?
нц для i от 1 до N
A[i]:= N + 1 – i
кц
i
X
1
N
2
3
N-1
N-2
…
…
N
1
– 1
+1
!
Сумма i и X не меняется!
i + X = N + 1
X = N + 1 – i
Вывод массива на экран
нц для i от 1 до N
вывод A[i]
кц
?
, ‘ ‘
Что плохо?
интервал между значениями
или так:
нц для i от 1 до N
вывод A[i] , нс
кц
в столбик
или так:
?
Как убрать?
вывод ‘[‘
нц для i от 1 до N
вывод A[i] , ‘,’
кц
вывод ‘]’
[1,2,3,4,5,]
Ввод с клавиатуры
нц для i от 1 до N
вывод A[i]
кц
?
Что плохо?
С подсказкой для ввода:
A[1] =
A[2] =
A[3] =
A[4] =
A[5] =
5
12
34
56
13
нц для i от 1 до N
вывод ‘ A[ ‘ ,i, ‘ ]= ‘
ввод A[i]
кц
В других языках программирования
Паскаль :
const N = 10;
var i: integer ;
A: array[ 1 ..N] of integer ;
begin
for i:= 1 to N do
A[i]:= i;
for i:= 1 to N do
write(A[i], ‘ ‘ );
end.
В других языках программирования
Python:
A = [ 0 ]*N
for i in range (N):
A[i] = i + 1
print(A)
!
Нумерация элементов всегда с нуля !
С ++:
int A[N], i;
for (i = 0 ; i
A[i] = i + 1;
for (i = 0 ; i
cout ” “ ;
Задачи
« A »: а) Заполните все элементы массива из 10 элементов значением X , введённым с клавиатуры.
б) Заполните массив из 10 элементов последовательными натуральными числами, начиная с X (значение X введите с клавиатуры).
« B »: а) Заполните массив из 10 элементов натуральными числами в обратном порядке, начиная со значения X, введённого с клавиатуры. Последний элемент должен быть равен X , предпоследний равен X – 1 и т.д.
б) Заполните массив из 10 элементов степенями числа 2 (от 2 1 до 2 N ), так чтобы элемент с индексом i был равен 2 i .
Задачи
« C »: а) Заполните массив из 10 элементов степенями числа 2, начиная с конца, так чтобы последний элемент массива был равен 1, а каждый предыдущий был в 2 раза больше следующего.
б) С клавиатуры вводится целое число X . Заполните массив из 11 элементов целыми числами, так чтобы средний элемент массива был равен X , слева от него элементы стояли по возрастанию, а справа – по убыванию. Соседние элементы отличаются на единицу. Например, при X = 3 массив из 5 элементов заполняется так: 1 2 3 2 1.
Заполнение случайными числами
нц для i от 1 до N
A[i]:= irand ( 20 , 100 )
вывод A[i], ‘ ‘
кц
сразу вывод на экран
Задачи -2
« A »: Напишите программу, которая заполняет массив из 10 элементов случайными числами в диапазоне [0,10], выводит его на экран, а затем выводит на экран квадраты всех элементов массива.
Пример :
Массив: 5 6 2 3 1 4 8 7
Квадраты: 2 5 36 4 9 1 1 6 6 4 49
« B »: Напишите программу, которая заполняет массив из 10 элементов случайными числами в диапазоне [100,300] и выводит его на экран. После этого на экран выводятся средние цифры (число десятков) всех чисел, записанных в массив.
Пример :
Массив: 142 324 135 257 167 295 126 223 138 270
Число десятков: 4 2 3 5 6 9 2 2 3 7
Задачи -2
« C »: Напишите программу, которая заполняет массив из 10 элементов случайными числами в диапазоне [100,500] и выводит его на экран. После этого на экран выводятся суммы цифр всех чисел, записанных в массив.
Пример :
Массив: 162 425 340 128 278 195 326 414 312 177
Суммы цифр: 9 11 7 11 17 15 11 9 6 15
Программирование (АлгЯзык)
§ 22 . Алгоритмы обработки массивов
Сумма элементов массива
Задача . Найти сумму элементов массива.
цел N = 10
целтаб A[ 1 : N ]
?
Какие переменные нужны?
5
2
8
3
1
sum:= 0
нц для i от 1 до N
sum:= sum + A[i]
кц
вывод sum
i
sum
0
1
5
2
7
3
15
4
1 8
5
19
Сумма не всех элементов массива
Задача . Найти сумму чётных элементов массива.
?
Что делаем с нечётными?
sum:= 0
нц для i от 1 до N
sum:= sum + A[i]
кц
вывод sum
если mod (A[i], 2 )= 0 то
sum:= sum + A[i]
все
кц
вывод sum
если mod (A[i], 2 )= 0 то
Задачи
« A »: Напишите программу, которая заполняет массив из 10 элементов случайными числами на отрезке [–5; 5] и находит сумму положительных элементов.
« B »: Напишите программу, которая заполняет массив из 10 элементов случайными числами на отрезке [–2; 2] и находит произведение ненулевых элементов.
« C »: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [100; 1000] и находит отдельно сумму элементов в первой и во второй половинах массива.
Подсчёт элементов по условию
Задача . Найти количество чётных элементов массива.
?
Какие переменные нужны?
переменная-счётчик
цел count
count := 0
нц для i от 1 до N
если mod (A[i], 2 )= 0 то
count := count + 1
все
кц
вывод count
?
Что тут делаем?
180 то sum:= sum + A[i] все кц вывод sum/N ? Что плохо? ” width=”640″
Среднее арифметическое
Задача . Найти среднее арифметическое элементов массива, которые больше 180 (рост в см).
sum:= 0
нц для i от 1 до N
если A[i] 180 то
sum:= sum + A[i]
все
кц
вывод sum/N
?
Что плохо?
180 то count := count + 1 sum:= sum + A[i] все кц вывод sum/ count ? Что тут делаем? ” width=”640″
Среднее арифметическое
Задача . Найти среднее арифметическое элементов массива, которые больше 180 (рост в см).
?
Какие переменные нужны?
sum:= 0
count:= 0
нц для i от 1 до N
если A[i] 180 то
count := count + 1
sum:= sum + A[i]
все
кц
вывод sum/ count
?
Что тут делаем?
Задачи
« A »: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [0; 200] и считает число элементов, которые делятся на 10.
« B »: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [0; 200] и считает число двузначных чисел в массиве.
« C »: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [10; 100] и считает число пар соседних элементов, сумма которых делится на 3.
0 нужен цикл это цикл с условием (число шагов неизвестно) ? Когда увеличивать счётчик ? ? Какой цикл ? счётчик = 0 пока не введён 0 : если введено число 0 то счётчик: = счётчик + 1 ” width=”640″
Обработка потока данных
Задача . С клавиатуры вводятся числа, ввод завершается числом 0. Определить, сколько было введено положительных чисел.
- нужен счётчик
- счётчик увеличивается если число 0
- нужен цикл
- это цикл с условием (число шагов неизвестно)
?
Когда увеличивать счётчик ?
?
Какой цикл ?
счётчик = 0
пока не введён 0 :
если введено число 0 то
счётчик: = счётчик + 1
0 то count:= count + 1 все ввод x кц вывод count откуда взять x ? ? Что плохо ? ” width=”640″
Обработка потока данных
цел x, count
count: = 0
ввод x
нц пока x 0
если x 0 то
count:= count + 1
все
ввод x
кц
вывод count
откуда взять x ?
?
Что плохо ?
0 то count:= count + 1 все ввод x ввод x кц вывод count ” width=”640″
Найди ошибку!
цел x, count
count: = 0
ввод x
нц пока x 0
если x 0 то
count:= count + 1
все
ввод x
ввод x
кц
вывод count
0 то count:= count + 1 все ввод x кц вывод count ” width=”640″
Найди ошибку!
цел x, count
count: = 0
count: = 0
ввод x
нц пока x = 0
если x 0 то
count:= count + 1
все
ввод x
кц
вывод count
Обработка потока данных
Задача . С клавиатуры вводятся числа, ввод завершается числом 0. Найти сумму введённых чисел, оканчивающихся на цифру “5”.
- нужна переменная для суммы
- число добавляется к сумме, если оно заканчивается на “5”
- нужен цикл с условием
?
Как это записать ?
сумма: = 0
пока не введён 0 :
если число оканчивается на “5” то
сумма: = сумма + число
если mod (x, 10 ) = 5 то
Обработка потока данных
Задача . С клавиатуры вводятся числа, ввод завершается числом 0. Найти сумму введённых чисел, оканчивающихся на цифру “5”.
цел x, sum
sum: = 0
ввод x
нц пока x 0
если mod (x, 10 ) = 5 то
sum:= sum + x
все
ввод x
кц
вывод sum
?
Чего не хватает ?
Найди ошибку!
цел x, sum
sum: = 0
ввод x
ввод x
нц пока x 0
если mod (x, 10 ) = 5 то
sum:= sum + x
все
ввод x
кц
вывод sum
Задачи
« A »: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Определить, сколько получено чисел, которые делятся на 3.
« B »: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Определить, сколько получено двузначных чисел, которые заканчиваются на 3.
Задачи
« C »: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Найти среднее арифметическое всех двузначных чисел, которые делятся на 7.
« D »: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Найти максимальное из введённых чётных чисел.
Перестановка элементов массива
?
Как поменять местами значения двух переменных a и b ?
вспомогательная переменная
элементы массива:
с:= a
a:= b
b:= c
с:= A[i]
A[i]:= A[k]
A[k]:= c
Перестановка пар соседних элементов
Задача . Массив A содержит чётное количество элементов N. Нужно поменять местами пары соседних элементов: первый со вторым, третий — с четвёртым и т. д.
1
2
7
3
12
4
38
5
N-1
…
N
40
23
1
12
2
3
7
4
5
38
…
N-1
23
N
40
Перестановка пар соседних элементов
нц для i от 1 до N
поменять местами A[i] и A[i+1]
кц
?
Что плохо ?
1
2
7
12
3
4
38
5
5
6
40
23
12
7
38
5
40
23
выход за границы массива
12
38
7
5
40
23
12
38
5
7
40
23
12
38
5
40
7
23
?
12
38
5
40
23
7
Перестановка пар соседних элементов
не трогаем те, что уже переставлены
не выходим за границу
нц для i от 1 до N- 1 шаг 2
| переставляем A[i] и A[i+1]
с:= A[i]
A[i]:= A[i+ 1 ]
A[i+ 1 ]:= c
кц
A[ 1 ] A[ 2 ], A[ 3 ] A[ 4 ], …, A[N- 1 ] A[N]
Реверс массива
Задача . Переставить элементы массива в обратном порядке (выполнить реверс ).
1
2
7
3
12
5
N-2
…
N-1
38
N
40
23
1
23
2
3
40
38
…
N -2
5
N-1
12
N
7
1 + N = N + 1
2 +N- 1 = N+ 1
A[ 1 ] A[N]
A[ 2 ] A[N- 1 ]
A[i] A[N+ 1 -i]
A[N] A[ 1 ]
i+ ??? = N+ 1
N+ 1 = N+ 1
Реверс массива
div (N ,2)
нц для i от 1 до N
поменять местами A[i] и A[ N+ 1 -i ]
кц
?
Что плохо ?
1
2
7
12
3
4
40
23
i= 1
i= 2
23
12
40
7
i= 3
23
40
12
7
23
12
40
7
i= 4
7
12
40
23
?
Как исправить ?
155
Конец фильма
ПОЛЯКОВ Константин Юрьевич
д.т.н., учитель информатики
ГБОУ СОШ № 163, г. Санкт-Петербург
[email protected]
ЕРЕМИН Евгений Александрович
к.ф.-м.н., доцент кафедры мультимедийной дидактики и ИТО ПГГПУ, г. Пермь
[email protected]
Источники иллюстраций
- иллюстрации художников издательства «Бином»
- авторские материалы