Мегаобучалка Главная | О нас | Обратная связь


Запись положительных элементов массива A в массив B



2019-11-21 234 Обсуждений (0)
Запись положительных элементов массива A в массив B 0.00 из 5.00 0 оценок




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

/*обращение массива */ #include <stdio.h> main() { int p,i=0; Static a[10]={10,11,12,13,14,15,16,17,18,19}; while(i<10/2) { p=a[i]; a[i]=a[9-i]; a[9-i]=p; i++; } i=0; while(i<10) printf ("%d",a[i++]); }  

Пример2. Найти среднее арифметическое элементов заданного массива.

#include<stdio.h>
#define TEN 10 //так объявляются константы. Менять значения TEN после этого объявления мы не имеем права
//Здесь же константе TEN мы присвоили значение 10

Void main()

{
float a[TEN], s=0; //мы объявили массив типа float из TEN(десяти) элементов и переменную s



2019-11-21 234 Обсуждений (0)
Запись положительных элементов массива A в массив B 0.00 из 5.00 0 оценок









Обсуждение в статье: Запись положительных элементов массива A в массив B

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (234)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)