- •4. 1. Базовые средства языка
- •Алфавит языка
- •4.1.5. Типы данных Си
- •Логический тип
- •4.1.8. Операции и выражения
- •Операции присваивания
- •Арифметические операции
- •Логические операции
- •4.1.11. Ввод и вывод данных
- •Функции ввода- вывода
- •4.1.10. Структура программы
- •Объектно-ориентированные средства ввода-вывода.
- •4.2. Операторы управления
- •4.2.1. Понятие алгоритма
- •4.2.2. Изображение алгоритма в виде блок-схемы
- •2.3. Составной оператор
- •2.4. Операторы ветвления
- •If (выражение) оператор;
- •4.2.5. Примеры программ
- •4.2.6. Оператор варианта
- •4.2.7. Алгоритмы циклической структуры
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •Оператор цикла с параметром
- •Операторы передачи управления
- •4.2.8. Решение задач с использованием циклов
- •4.3. Обработка массивов
- •4.3.1. Описание массивов
- •4.3.2. Основные операции над массивами
- •4.3.3. Ввод-вывод элементов массива
- •4.3.4. Вычисление суммы элементов массива
- •4.3.5. Вычисление произведения элементов массива
- •4.3.6. Поиск максимального элемента и его номера
- •4.3.7. Сортировка элементов в массиве
- •4.3.8. Удаление элемента из массива
- •4.3.9. Решение задач с использованием массивов
- •4.4. Обработка матриц
- •4.4.1. Ввод-вывод матрицы
- •4.4.2. Примеры алгоритмов обработки матрицами
- •4.5.1. Передача параметров в функцию
- •4.5.2. Возврат результата с помощью оператора return
- •4.6. Указатели и динамические массивы
- •5. Примеры организации вычислительного процесса
- •5.1 Организация разветвляющегося вычислительного процесса
- •5.2. Организация циклов с известным числом повторений»
- •Блок-схема
- •Текст программы
- •Блок-схема
- •Текст программы
- •5.4.Обработки одномерного массива с перестановкой элементов
- •5.5. Обработка матрицы.
- •Литература
4.3.8. Удаление элемента из массива
Пусть нужно удалить из массива X, состоящего из n элементов, m–й по номеру элемент. Алгоритм удаления на рис. 23.

Рис. 23. Алгоритм удаления элемента из массива
Фрагмент программы:
cout<<"\n m="; cin>>m;
for (i=m;i<n-1;X[i]=X[i+1],i++);
for (i=0;i<n-1; cout<<X[i]<<"\t", i++);
4.3.9. Решение задач с использованием массивов
ЗАДАЧА 12. Дан массив А состоящий из k целых положительных чисел. Записать все четные по значению элементы массива А в массив В.
int main()
{
int a[20], b[20], k, i, m;
printf("k="); scanf("%d",&k);
for (m=-1,i=0; i<k; i++)
{
printf("\n a[%d]=",i);
scanf("%d",&a[i]);
if (a[i]%2==0)
{
m++;
b[m]=a[i];
}
}
if (m=-1) printf("\n There are not even elements! \n");
else
for (i=0;i<=m;i++)
printf("\n b[%d]=%d \t", i, b[i]);
}
ЗАДАЧА 13. Дан массив Х = (х0, …,хn-1). Переписать 7 первых положительных элементов массива Х подряд в массив Y = (y0, …, y6).
#include <iostream.h>
int main()
{
float X[20], Y[20]; int k, i, n;
cout<<"n="; cin>>n;
for (i=0;i<n;cin>>X[i++]);
for (k=-1,i=0;i<n;i++)
if (X[i]>0)
{
Y[++k]=X[i];
if (k==6) break;
}
if (k>-1) for (i=0;i<=k;cout<<Y[i++]<<"\t");
else cout<<"ERROR!!!";
}
ЗАДАЧА 14. Все наименьшие элементы массива Х(n) заменить средним арифметическим его значений.
#include<iostream.h>
int main()
{
float X[20],S,min;int n,i;
cout<<"n="; cin>>n;
for (i=0;i<n;cin>>X[i++]);
for (S=0,min=X[0],i=0; i<n;S+=X[i],i++)
if (X[i]<min)min=X[i];
S=S/n;
cout<<"min="<<min<<"\t S="<<S<<endl;
for (i=0;i<n; cout<<X[i++]<<"\t");
cout<<endl;
for (i=0;i<n;i++)
if (X[i]==min) X[i]=S;
for (i=0;i<n; cout<<X[i++]<<"\t");
}
ЗАДАЧА 15. Удалить из массива последний нулевой элемент.
#include<iostream.h>
int main()
{float X[20]; int n,i,nom;
cout<<"n="; cin>>n;
for (i=0;i<n;cin>>X[i++]);
for (nom=n,i=n-1;i>=0;i--)
if (X[i]==0)
{nom=i;break;}
cout<<"nom="<<nom<<endl;
for (i=0;i<n; cout<<X[i++]<<"\t");
for (i=nom;i<n-1; X[i]=X[i+1],i++);
if (nom!=n) n--;
for (i=0;i<n; cout<<X[i++]<<"\t");
}
4.4. Обработка матриц
Рассмотрим основные операции, выполняемые над матрицами.
4.4.1. Ввод-вывод матрицы
Матрицы, как и массивы, нужно вводить (выводить) поэлементно. Далее приведен текст программы, в которой организован поэлементный ввод матрицы Аи вывод ее на экран в виде таблицы.
Вариант 1.
#include <stdio.h>
int main()
{int i,j,n,m; float b,a[25][25];
printf("Введите размеры матрицы\n"); scanf("%d%d",&n,&m);
printf("Ввод матрицы A\n");
for(i=0;i<n;i++)
for(j=0;j<m; scanf("%g",&a[i][j]);j++)
printf("Матрица A\n");
for(i=0;i<n; printf("\n");i++)
for(j=0;j<m; printf("%g\t",a[i][j]);j++)
}
Вариант 2
#include<iostream.h>
void main()
{int A[10][10],N,M,i,j;
cout <<"\n N="; cin >>N;cout <<"\n M="; cin >>M;
for (i=0;i<N;i++)
for (j=0;j<M;cout<<"\n A["<<i<<","<<j<<"]=";
cin>>A[i][j];j++)
for (i=0;i<N; cout <<"\n";i++)
for (j=0;j<M; cout <<"\t"<<A[i][j];j++)
}
4.4.2. Примеры алгоритмов обработки матрицами
Рассмотрим несколько задач обработки матриц, зная их свойства (рис. 24):

Рис. 24. Свойства матриц
ЗАДАЧА 16. Найти сумму элементов матрицы, лежащих выше главной диагонали (рис. 25-26).


Рис. 25. Алгоритм решения Рис. 26. Алгоритм решения
задачи 16 (первый способ) задачи 16 (второй способ)
//Первый способ
int main()
{int S,i,j,N,M,a[20][20];
cout<<"N="; cin>>N; cout<<"M="; cin>>M;
cout<<"Input Matrix A"<<endl;
for(i=0;i<N;i++)
for(j=0;j<M;j++) cin>>a[i][j];
for(S=i=0;i<N;i++)
for(j=0;j<M;j++) if (j>i) S+=a[i][j];
cout<<"S="<<S<<endl;}
//Второй способ
for(s=0,i=0;i<n;i++)
for(j=i+1;j<m; s+=a[i][j], j++)
printf("s =%f \n",s);}
ЗАДАЧА 17. Вычислить количество положительных элементов квадратной матрицы, расположенных по ее периметру и на диагоналях.
#include <stdio.h>
#include <math.h>
int main()
{int n,i,j,k; float b,a[25][25];
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n; scanf("%g",&b); a[i][j]=b;j++)
for(k=0,i=0;i<n;i++)
{
if (a[i][i]>0) k++;
if (a[i][n-i-1]>0) k++;
}
for(i=1;i<n-1;i++)
{
if (a[0][i]>0) k++;
if (a[n-1][i]>0) k++;
if (a[i][0]>0) k++;
if (a[i][n-1]>0) k++;
}
if ((n%2!=0)&&(a[n%2+1][n%2+1]>0)) k--;
printf("k=%d",k);
}
4.5. Функций в С++
Подпрограмма – именованная, логически законченная группа операторов языка, которую можно вызвать для выполнения любое количество раз из различных мест программы. В С++ подпрограммы реализованы в виде функций
Функция - поименованный набор описаний и операторов, выполняющих определенную задачу. Функция может принимать параметры и возвращать значение. Параметр функции это информация, передаваемая в нее для обработки. Значение функции - результат ее вычислений. Обращение к функции называют вызовом.
Любая программа на С++ состоит из одной или нескольких функций.
При запуске программы первой выполняется функция main. Если среди операторов функции main встречается вызов функции, то управление передается операторам функции. Когда все операторы функции будут выполнены, управление возвращается оператору, следующему за вызовом функции.
Перед вызовом функция должны быть обязательно описана. Описание функции состоит из заголовка и тела функции:
тип имя_функции(список_перем)
{
тело_функции
}
Заголовок функции содержит:
тип – тип возвращаемого функцией значения (может быть любым; если функция не возвращает значения, то тип void);
имя_функции – имя, с которым она будет вызываться;
список_переменных – перечень передаваемых в функцию величин (аргументов), которые отделяются друг от друга запятыми; для каждой переменной из списка указывается тип и имя; если функция не имеет аргументов, то в скобках указывают либо тип void, либо ничего.
Тело функции представляет собой последовательность описаний и операторов, заключенных в фигурные скобки.
В общем виде структура программы на С++ может иметь вид:
директивы компилятора
тип имя_1(список_перем)
{
тело_функции_1;
}
тип имя_2(список_перем)
{
тело_функции_2;
}
...
тип имя_n(список_перем)
{
тело_функции_n;
}
int main(список_перем)
{
тело__основной_функции;
имя_1;
имя_2;
...,
имя_n;
}
Вызвать функцию можно в любом месте программы. Для вызова функции необходимо указать ее имя и в круглых скобках, через запятую перечислить имена или значения аргументов, если таковые имеются:
имя_функции(список_переменных);
Если тип возвращаемого значения не void, то функция может входить в состав выражений.
Типы и порядок следования переменных в определении и при вызове функции должны совпадать.
Для того чтобы функция вернула какое-либо значение, в ней должен быть оператор:
return (выражение);
Локальные переменные это переменные, описанные внутри функции, а так же переменные из списка аргументов. Область действия локальной переменной не выходит за рамки функции. Значения локальных переменных между вызовами одной и той же функции не сохраняются.
Глобальные переменные это переменные, определенные до объявления всех функций и доступные всем функциям.
