Запись положительных элементов массива A в массив B
int main() { float a[20],b[20]; int i,n,k; cout<<"n="; cin>>n; cout<<"Massiv a\n"; for(i=0;i<n;i++) cin>>a[i]; for(k=i=0;i<n;i++) if (a[i]>0) b[k++]=a[i]; cout<<"Massiv b\n"; for(i=0;i<k;i++) cout<<"b("<<i<<")="<<b[i]<<"\t"; cout<<endl; return 0; } Вставка элемента b в упорядоченный массив X, не нарушив его упорядоченности Пусть массив Х(N) упорядочен по возрастанию, необходимо в него вставить элемент b, не нарушив упорядоченности массива. int main() { float x[20],b; int i,j,n; cout<<"n="; cin>>n; cout<<"Massiv x\n"; for(i=0;i<n;i++) cin>>x[i]; cout<<"b="; cin>>b; if (b>=x[n-1]) x[n]=b; else { for(i=0;i<n;i++) if (x[i]>b) {j=i;break;} for(i=n;i>j;i--) x[i]=x[i-1]; x[j]=b; } n++; cout<<"Massiv x\n"; for(i=0;i<n;i++) cout<<"x("<<i<<")="<< x[i]<<"\t"; cout<<endl; return 0; } Найдем максимальный элемент главной диагонали двумерного целочисленного массива размерностью nxn, заданного случайными числами на промежутке [-100; 100). /*Описание функции поиска максимального элемента главной диагонали*/ int maxi(int str,int slb, int m[max_x][max_y]){ int i,j,e_max=m[0][0]; for(i=0;i<str;i++) for(j=0;j<slb;j++) if((i==j)&&(m[i][j]>e_max)) e_max=m[i][j]; return e_max; } Пример 5. Найдите сумму элементов столбца двумерного массива, номер которого задается с клавиатуры. /*Описание функции суммирования элементов заданного номера столбца матрицы*/ int summa(int str, int slb, int nom,int m[max_x][max_y]){ int i,j,sum=0; for(i=0;i<str;i++) for(j=0;j<slb;j++) if(j==nom-1) sum+=m[i][j]; return sum; } Пример 6. Дан двумерный вещественный массив размерностью nxn, заданный случайными числами на промежутке [-100; 100). Замените все элементы выше главной диагонали на 1.1 и ниже ее на 0.0. //Описание функции замены void zamena (int str,int slb, double m[max_x][max_y]) { int i,j; for (i=0;i<str;i++) for (j=0;j<slb;j++) { if (i>j) m[i][j]=0.0; if (i<j) m[i][j]=1.1; } } Сортировка в двумерном целочисленном массиве элементов k-той строки по невозрастанию. void sort_dn(int k,int slb, int m[max][max]) { int i,j,buf; for (i=0;i<slb;i++) for (j=slb-1;j>i;j--) if (m[k][j]>m[k][j-1]){ //фиксированная строка с номером k buf= m[k][j]; m[k][j]= m[k][j-1]; m[k][j-1]=buf; } } Для поиска максимальных (минимальных) элементов с целью их дальнейшего упорядочивания удобно выделять отдельно одномерный массив, в котором хранить не значения элементов, а номера столбцов или строк, в которых они располагаются. Например, чтобы найти минимальные элементы в каждом столбце массива n x m отдельно, удобно выделить одномерный массив min[m], в котором число элементов равно числу столбцов. Значениями элементов такого массива будут номера строк, в которых располагаются минимальные элементы каждого столбца. Если же минимальных элементов в столбце несколько, то будет найден первый (или последний) минимальный, что не скажется на значении. Пример 2. Поиск номеров минимальных элементов в каждом столбце двумерного массива. void minimum(int str,int slb, int m[max][max],int min[max_y]){ int i,j; for (j=0;j<slb;j++){//фиксируем номер столбца min[j]=0; for (i=1;i<str;i++) //пробег по столбцу, меняется номер строки if (m[i][j]<m[min[j]][j]) min[j]=i; } } В данном примере min[max_y] – это массив, значениями которого будут номера строк, в которых располагается первый минимальный элемент столбца. Так для min[j] начальное значение инициализируется как 0, то есть предполагается, что минимальный элемент расположен в строке с номером 0. Обращение m[min[j]][j] понимается так: элемент массива m, расположенный в строке с номером min[j] и столбце с номером j. Но в строке min[j] для столбца j как раз и находится минимальный элемент. В задачах на перестановку отдельных элементов массива, столбцов или строк используется алгоритм обмена значениями двух переменных через третью переменную (возможны и другие способы обмена значениями двух переменных). Пример 3. Обмен значениями элементов диагоналей квадратной матрицы, расположенных в одной строке. void obmen(int strslb, int m[max][max]) { int i,buf,t; for (i=0;i<strslb;i++){ //номера строки и столбца элемента главной диагонали равны buf= m[i][i]; //t-номер столбца соответствующего элемента побочной диагонали t= abs(strslb-i-1); m[i][i]= m[i][t]; m[i][t]=buf; } } Пример 4. Дана квадратная матрица размера n x n, заполненная с клавиатуры целыми числами так, что в каждой строке и каждом столбце ровно по одному нулевому элементу. Переставьте строки матрицы так, чтобы нулевые элементы были расположены вдоль главной диагонали. Выведите массив на экран в виде таблицы дважды – до и после перестановки. Оформите генерацию, вывод массива и перестановку строк с помощью функций. #include "stdafx.h" #include <iostream> using namespace std; #define max 10
void gen (int k,int x[max][max]); void out (int k,int x[max][max]); void change (int k,int x[max][max]);
int _tmain(int argc, _TCHAR* argv[]) { int a[max][max]; int n; do { printf("\nВведите количество элементов массива n (n<=%d):", max); scanf ("%d",&n); } while (n>max); gen(n,a); out(n,a); change(n,a); out(n,a); system("pause"); return 0; }
void gen (int k,int x[max][max]){ int i,j; for (i=0;i<k;i++){ printf("\nВведите значения элементов %d-й строки массива: \n",i); for (j=0;j<k;j++){ printf("x[%d][%d]= ",i,j); scanf("%d",&x[i][j]); } } }
void out (int k,int x[max][max]){ int i,j; printf("\nВывод значений %d элементов массива в строку: \n",k); for (i=0;i<k;i++) { for (j=0;j<k;j++) printf("\t%d",x[i][j]); printf("\n"); } }
void change (int k,int x[max][max]){ int i,j,buf; int zero[max]; //массив номеров столбцов нулевых элементов for (i=0;i<k;i++) //инициализация массива zero[i] = -1; for (i=0;i<k;i++) for (j=0;j<k;j++) /*генерация массива номерами столбцов, в которых расположены нулевые элементы*/ if (x[i][j]==0) { zero[i]=j; j=k; } for (i=0;i<k;i++) for (j=0;j<k;j++){ /*обмен значениями элементов текущей строки с соответствующей, чтобы нулевой элемент занял место на главной диагонали*/ buf=x[i][j]; x[i][j]=x[zero[i]][j]; x[zero[i]][j]=buf; /*после перестановки строк изменяется номер столбца нулевого элемента*/ zero[zero[i]]=zero[i]; } } В данном примере zero[max] – это массив, значениями которого будут номера столбцов, в которых располагается нулевой каждой строки (по условию задачи, такой элемент в каждом столбце и каждой строке единственный). Обращение x[zero[i]][j] понимается так: элемент массива x, расположенный в строке с номером zero[i] и столбце с номером j. Но для строки с номером i нулевой элемент располагается в столбце с номером zero[i]. Для каждого элемента главной диагонали индексы строки и столбца равны, поэтому нулевой элемент из столбца zero[i] должен быть перемещен в строку с аналогичным номером (вместе со всеми элементами этой же строки). Обращение zero[zero[i]] означает, что после перестановки строк с номерами i и zero[i] нулевой элемент строки zero[i] будет находиться в столбце с номером zero[zero[i]].
Примеры
Пусть, например, в заданном массиве из 10 целых чисел надо изменить порядок следования его элементов на обратный без использования вспомогательного массива. Текст программы приведен на примере 1. Пример 1
Пример2. Найти среднее арифметическое элементов заданного массива. #include<stdio.h> Void main() {
Популярное: Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ... Почему стероиды повышают давление?: Основных причин три... Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (234)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |