Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория по языку СИ.doc
Скачиваний:
27
Добавлен:
03.03.2016
Размер:
1.93 Mб
Скачать

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 (выражение);

Локальные переменные это переменные, описанные внутри функции, а так же переменные из списка аргументов. Область действия локальной переменной не выходит за рамки функции. Значения локальных переменных между вызовами одной и той же функции не сохраняются.

Глобальные переменные это переменные, определенные до объявления всех функций и доступные всем функциям.

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.