- •1. Основные этапы решения задач на эвм
- •Формулировка задачи
- •Математическая постановка задачи
- •Разработка алгоритма решения задачи
- •Написание текста программы на языке программирования
- •Ввод текста программы в эвм
- •Поиск и устранение синтаксических ошибок
- •Тестирование программы. Поиск и устранение логических ошибок в программе
- •Этапы создания исполняемой программы
- •Базовые компоненты программ
- •Буквы и цифры
- •Пробельные символы
- •Знаки пунктуации и специальные символы
- •Идентификаторы
- •Ключевые слова
- •Комментарии
- •Лексемы
- •Типы данных
- •Целые константы
- •Константы с плавающей точкой
- •Константа-символ
- •Строковые литералы
- •Универсальные функции ввода и вывода любых типов данных
- •Структуры и форма написания программы
- •Программирование разветвляющихся вычислительных процессов
- •Цикл while – цикл с предусловием.
- •Цикл do while – цикл с постусловием
- •Цикл for
- •Безусловная передача управления внутри цикла
- •Описание некоторых стандартов алгоритмов
- •Работа с файлами (функции ввода вывода верхнего уровня)
- •Указатели
- •Одномерные массивы Объявление массива.
- •Стандартные функции обработки строк
- •Многомерные массивы на примере двумерных
- •Классы памяти
- •Способы передачи данных в функцию
- •Функции и строки
- •Функции и одномерные числовые массивы
- •Функции и двумерные массивы
- •Функции с параметрами по умолчанию
- •Перегрузка функции
- •Шаблоны функции
- •Типы данных, определяемые пользователем
- •4.1. Структуры
- •Шаблон структуры
- •Структурные переменные
- •Инициализация структуры
- •Доступ к полям структуры
- •Массив структур
- •Вложенные структуры
- •Битовые поля структур
- •Передача структуры в функцию
- •Двоичный ввод-вывод структур
- •Функции двоичного ввода-вывода
- •Динамические структуры данных
- •4.2. Объединения
- •4.3. Перечисления
- •Файловые операции ввода/вывода
- •Файловый ввод/вывод с прямым доступом
Одномерные массивы Объявление массива.
Синтаксис:
Имя_типа имя_массива[размер массива];
Под размером понимается количество элементов массива. Размер массива всегда константа и должен быть указан.
Пример:
int mas1 [5];
float mas2 [25];
char mas3 [60];
После выделения памяти в элементах массива находится «мусор». При объявлении массива возможна инициализация.
int a[4]={7,-3,8,243};
Если констант меньше, чем необходимо, остальные элементы массива обнуляются. Если констант больше, возникает ошибка компиляции.
Обращение к элементам массива по имени.
Обращение к элементам массива осуществляется по индексу, значение которого начинается с нуля.
Пример:
int a[ 5];
a [0]-к первому по счету или с инд=0.
a [1]-
a [2]-
…….
a[4] – к последнему элементу массива.
Одномерные массивы и указатели.
Имя массива, объявленного статически, является адресом-константой элемента массива с индексом 0.
Начальный адрес определяется в момент описания массива и не может быть переопределен. Зная адрес элемента массива с индексом 0, можно получить адрес любого элемента массива, добавляя соответствующее смещение к адресу элемента массива с индексом 0. По выражению адреса можно получить значение любого элемента массива.
номер1 2 3 4 5
индекс 0 1 2 3 4
|
|
|
|
|
имя эл.масс. a[0] a[1] a[2] a[3] a[4]
адрес эл.масс. a a+1 a+2 a+3 a+4
знач.эл.масс. *a *(a+1) *(a+2) *(a+3) *(a+4)
по адресу
Выделение памяти под массив динамически.
Выделение памяти динамически – выделение памяти под массив в процессе выполнения программы.
Выделить память под 7 элементов массива целого типа:
# define SIZE 7
int *p;
p=new int[SIZE];
p-содержит адрес начала массива..
Организация перебора элементов числового массива.
int a [10];
cin>>* a;
cin>>* (a+1); или for (i=0; i<10; i++)
cin>>*( a+2); cin>>* (a+i); //или cin>>a[i];
…………………
cin>>* (a+9);
Стандартный цикл перебора символов в строке.
char str [80];
int kol=0;
cin>>str;
for (i=0; str [i]!=0; i++) //подсчет количества символов в строке
kol++;
Задача 1:
Дан массив статически, заполнить с клавиатуры
Вычислить сумму элементов кратных числу k.
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
int main (void)
{
const int N=5;
int mas[N],k,i,sum=0;
cout << "\nВведите K: ";
cin >> k;
cout << "\nВведите массив: ";
for (i=0; i<N; i++)
cin >> mas[i];
for (i=0; i<N; i++) {
if (mas[i]%k==0)
sum += mas[i];
}
cout << "\nS=" << sum << endl;;
return 0;
}
Задача 2:
Выделить память динамически. Заполнить массив случайными числами. Вывести массив на экран. Вычислить минимум в массиве
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
#include "time.h"
#include "stdlib.h"
int main (void)
{
srand((unsigned)time(NULL));
int n, i, m=10000;
double min;
cout << "\nВведите размерность массива: ";
cin >> n;
double *p=new double[n];
for (i=0; i<n; i++) {
p[i] = (rand()%(2*m+1)-m)*0.9738179;
}
min = p[0];
cout << "\nмассив ";
for (i=0; i<n; i++) {
cout << i << "=" << p[i] << " ";
if (min>p[i])
min=p[i];
}
cout << "\nmin=" << min << endl;;
return 0;
}
Задача 3.
Задать строку статически. Ввести с клавиатуры и определить кол-во символов в строке
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
int main(void)
{
char str[80];
int n, i;
cout << "\n Введите строку:";
cin.getline(str,80);
for (i=0, n=0; str[i]!=0; i++) {
n++;
}
cout << "\n Кол-во=" << n << endl;
return 0;
}
Задача 4.
Решить задачу 1, выделяя память динамически и работая через адрес
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
int main(void)
{
char *p=new char[80];
int n=0;
cout << "\n Введите строку:";
cin.getline(p,80);
// цикл построен таким образом, что p содержит адрес текущего символа
while(*p!=0) {
n++;
p++; // Увеличиваем адрес для перехода к следующему символу
}
cout << "\n Кол-во=" << n << endl;
return 0;
}