- •Федеральное агентство по образованию Российской Федерации
- •Программирование
- •Часть I
- •Предисловие
- •1. Основные понятия алгоритмизации и программирования
- •1.1. Этапы решения задач на эвм
- •1. Постановка задачи:
- •2. Формализация (анализ и исследование задачи, модели, представление ее в виде уравнений, соотношений, ограничений и т.П.):
- •Понятие моделирования
- •Отладка программы
- •Тест и тестирование программы
- •1.2. Основы алгоритмизации
- •Свойства алгоритма
- •Критерии качества алгоритма
- •Способы описания алгоритмов
- •Структурограмма
- •Синтаксическая диаграмма (формулы Бэкуса-Наура)
- •Базовые алгоритмические конструкции
- •Примеры команды если
- •1.3. Теоретические основы программирования
- •Арифметические выражения
- •Арифметические выражения записываются по следующим правилам:
- •Лабораторная работа № 1 Запись арифметических выражений
- •Задание I
- •Задание II
- •Контрольные вопросы
- •2. Программирование алгоритмов линейной структуры
- •2.2. Основные понятия языка
- •2.3. Данные и способы их организации
- •Порядок объявления и инициализации переменных
- •2.4. Стандартные простые типы данных
- •2.5. Структура программы
- •2.6. Операторы
- •Оператор «выражение»
- •2.7. Организация ввода/вывода данных
- •Лабораторная работа № 2 Программирование алгоритмов линейной структуры
- •Задание I
- •Задание II
- •Задание III
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Пример выполнения лабораторной работы
- •Решение
- •Математическая модель
- •Алгоритм (блок - схема)
- •3. Программа
- •4. Результат работы программы
- •Решение
- •Математическая модель
- •4. Результат работы программы:
- •3. Операторы ветвления
- •3.1. Простые и составные условия
- •Операция &&
- •Операция ||
- •Операция !
- •3.2. Составной оператор
- •3.3. Условная операция (?:)
- •3.4. Условный оператор if
- •If (условие) оператор 1; else оператор 2;
- •If (условие) оператор;
- •3.5. Оператор switch
- •3.6. Оператор перехода goto
- •Лабораторная работа № 3 Программирование алгоритмов разветвляющейся структуры
- •Задание I
- •Задание II
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Пример выполнения лабораторной работы
- •Решение
- •1. Математическая модель
- •4. Результат работы программы
- •Решение
- •1. Математическая модель
- •4. Результат работы программы
- •4. Циклы
- •4.1. Оператор цикла с параметром (for)
- •4.2. Оператор цикла с предусловием (while)
- •4.3. Оператор цикла с постусловием (do while)
- •Отличие оператора цикла while от оператора цикла do..While
- •4.4. Вложенные циклы
- •Математическая модель
- •Лабораторная работа № 4 Программирование алгоритмов циклической структуры
- •Задание I
- •Задание II
- •Задание III
- •Контрольные вопросы
- •Пример выполнения лабораторной работы
- •Решение
- •1. Математическая модель
- •4. Результат работы программы
- •Решение
- •1. Математическая модель
- •4. Результат работы программы
- •5. Подпрограммы
- •5.1. Понятие подпрограммы
- •5.2. Формальные и фактические параметры
- •5.3. Локальные и глобальные переменные
- •5.4. Функции
- •Задание I
- •Задание II
- •Лабораторная работа №5 Использование функций для решения прикладных задач
- •Контрольные вопросы
- •Пример выполнения лабораторной работы
- •Решение
- •1. Математическая модель
- •3. Программа 4. Результат работы программы:
- •6. Итерация и рекурсия
- •6.1. Понятие итеративного процесса
- •6.2. Понятие рекурсии
- •Лабораторная работа №6 Программирование рекурсивных алгоритмов
- •Задание
- •Контрольные вопросы
- •Пример выполнения лабораторной работы
- •Решение
- •1. Математическая модель
- •2. Алгоритм
- •3. Программа
- •4. Результат работы программы
- •7. Одномерные массивы
- •7.1. Понятие структурированного типа данных
- •7.2. Понятие и описание типа массив
- •7.3. Одномерные массивы
- •7.4. Основные действия над элементами массивов
- •1. Инициализация массива: присвоение каждому элементу начального значения:
- •2. Вывод массива на экран:
- •3. Обработка массива
- •Лабораторная работа №7 Использование числовых одномерных массивов
- •Задание I
- •Задание II
- •Контрольные вопросы
- •Пример выполнения задания II лабораторной работы
- •Решение
- •Математическая модель
- •4. Результат работы программы:
- •8. Двумерные массивы
- •Лабораторная работа №8 Двумерные массивы
- •Задание
- •Контрольные вопросы
- •Пример выполнения лабораторной работы
- •Решение
- •Математическая модель
- •9. Алгоритмы решения задач внутренней сортировки и алгоритмы поиска информации
- •9.1. Сложность алгоритмов
- •9.2. Постановка задачи поиска
- •9.3. Последовательный (линейный) поиск
- •9.4. Бинарный поиск
- •9.5. Постановка задачи сортировки данных
- •9.6. Прямые и быстрые методы внутренней сортировки
- •9.7. Сортировка вставками
- •9.8. Сортировка с помощью прямого выбора
- •9.9. Сортировка с помощью прямого обмена
- •Лабораторная работа № 9 Задачи сортировки и поиска
- •Контрольные вопросы
- •10. Указатели и массивы
- •10.1. Указатели
- •10.2. Взаимосвязь между массивами и указателями
- •10.3. Порядок объявления динамических массивов
- •10.4. Передача массивов в качестве параметров функции
- •Лабораторная работа №10 Применение массивов и указателей для решения прикладных задач
- •Задание I
- •Задание II
- •Задание III
- •11. Особенности работы с функциями
- •11.1. Способы передачи параметров в функцию
- •11.2. Передача имен функций в качестве параметров
- •11.3. Перегрузка функций
- •Лабораторная работа № 11 Исследование способов работы с функциями
- •Задание I
- •Задание II
- •12. Строки как массив элементов типа char
- •Лабораторная работа № 12
- •Задание I
- •Изучение способов формирования строк в языке Си
- •Применение функций работы со строками для обработки символьных массивов
- •Задание II
- •13. Строки как специальный класс string
- •Лабораторная работа № 13 Исследование способов работы с функциями
- •Задание I
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Форма отчета
- •14. Структуры
- •14.1. Изучение порядка объявления и инициализации структур
- •14.2. Программирование с использованием структур
- •14.3. Использование функций для работы с производными типами данных
- •Лабораторная работа № 14 Применение структур для решения прикладных задач
- •Задание I
- •15. Файлы
- •15.1. Подход с использованием возможностей языка Си
- •Ifstream идентификатор_потока(имя_файла,ключи_потока);
- •Лабораторная работа № 15 Исследование методов доступа к файлам данных
- •Задание I
- •1. Работа с неструктурированными данными
- •2. Работа со структурированными данными
- •Пример выполнения лабораторной работы
- •Литература
- •Приложение 1 Порядок выполнения лабораторных работ
- •Приложение 2 Базовые функции
2. Вывод массива на экран:
cout <<” Массив А: ” <<endl;
for ( i = 0; i < n; i++) cout <<a[i] <<”\t”;
3. Обработка массива
При работе с одномерными массивами существует большое количество алгоритмов, которые считаются типовыми, т.е. часто встречающимися в практических задачах: ввод-вывод массива, вычисление значений элементов массива, поиск суммы и (или) произведения элементов массива, поиск максимального (минимального) элемента массива, упорядочивание элементов массива, добавление (вставка) новых элементов в массив, удаление данных из массива и т.д.
Пример. Дан массив действительных чисел из n элементов. Найти максимальный по модулю элемент и разделить все элементы массива на полученное значение. Вывести на экран монитора массив после обработки.
Возможный текст программы:
#include <math.h>
#include <iostream>
using namespace std;
int main()
{
const int n = 5;
double x[n], max;
int i; // Задаём массив из n действительных чисел
cout << "Input " << n << " numbers:" << endl;
for(i = 0; i < n; i++)
cin >> x[i];
// Поиск максимального по модулю элемента массива
// Предположим, что x[0] - это и есть максимальный
// по модулю элемент массива:
max = fabs(x[0]);
// А теперь пробуем себя опровергнуть:
for(i = 1; i < n; i++) //перебираем все элементы массива с первого
if(fabs(x[i]) > max) // сравниваем с текущим максимальным
max = fabs(x[i]); // выполняем переприсваевание
cout << "max=" << max << endl; // Максимум найден:
for(i = 0; i < n; i++)
x[i] /= max; // Делим все элементы на max
cout << "Massiv:" << endl; // Распечатка массива
for(i = 0; i < n; i++)
cout << x[i] << endl;
return 0;
}
Лабораторная работа №7 Использование числовых одномерных массивов
ЦЕЛЬ РАБОТЫ: освоение способов описания массива, приобретение навыков организации ввода-вывода и обработки массива.
Выполнение работы: освоить теоретический материал, выполнить общее для всех задание I и в соответствии с вариантом составить программу (задание II), при необходимости реализовав пользовательскую функцию.
Задание I
Изучить порядок описания, ввода-вывода и обработки массивов:
Набрать и отладить программу нахождения суммы элементов массива, стоящих в нечетных позициях. Оформить в тетради, записав условие, код, блок-схему и результат работы, объяснить назначение операторов 0-4.
#include <time.h>
#include <stdlib.h>
int main()
{
setlocale(LC_ALL,”Rus”);
srand(time(0)); // Оператор 0
const int N=10;
int Arr[N];
int sum=0; // Оператор 1
for (int i=0;i<N;i++)
{
Arr[i]= rand()%100; // Оператор 2
cout<<Arr[i]<<"\t";
}
for (int i=1;i<N;i+=2) // Оператор 3
sum+=Arr[i]; // Оператор 4
cout<<"\nСумма = "<<sum<<endl;
return 0;
}
Набрать и отладить программу нахождения суммы элементов массива, кратных 3. Оформить в тетради, записав условие, код, блок-схему и результат работы, объяснить назначение операторов 0-3.
#include <time.h>
#include <stdlib.h>
int main()
{
time_t t;
srand((unsigned)time(&t)); // Оператор 0
const int N=10;
int Arr[N];
int sum=0; // Оператор 1
for (int i=0;i<N;i++)
{
Arr[i]=rand()%50; // Оператор 2
cout<<Arr[i]<<"\t";
}
for (int i=1;i<N;i++)
if (Arr[i]%3==0) sum+=Arr[i]; // Оператор 3
cout<<"\nSumma="<<sum<<endl;
return 0;
}
набрать и отладить программу нахождения наибольшего элемента массива из N целых чисел с выводом номеров наибольших элементов. Оформить в тетради, записав условие, код, блок-схему и результат работы, объяснить назначение операторов 1-6.
#include <time.h>
#include <stdlib.h>
int main()
{
srand(time(0));
const int N=10;
int Arr[N];
int index[N]={0}; // Оператор 1
int max, k=0;
for (int i=0;i<N;i++){
Arr[i]=rand()%100-50; // Оператор 2
cout<<Arr[i]<<"\t";
}
max=Arr[0]; // Оператор 3
for (int i=1;i<N;i++)
if (Arr[i]>=max) // Оператор 4
{
max=Arr[i];
index[k]=i+1; // Оператор 5
k++;
}
k=0;
cout<<"\nMax="<<max<<"\nИндексы: ";
while(index[k]>0) // Оператор 6
{
cout<<index[k]-1<<"\t";
k++;
}
return 0;
}
