Задача 96. Следующая Программа определяет и печатает, сколько раз в заданном массиве встречается каждый из его элементов, а также находит тот из них, который встречается наибольшее количество раз 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Задача 96. Следующая Программа определяет и печатает, сколько раз в заданном массиве встречается каждый из его элементов, а также находит тот из них, который встречается наибольшее количество раз



 

// Программа отлажена в Visual Studio 2008

 

#include "stdafx.h"

#define n 10

#include<stdio.h>

#include<conio.h>

int main()

{

int k,i,r,kol;

int a[n]={10,9,8,5,9,7,9,8,9,1},

t[n]={0}, max,nmax;

// В массиве t[] фиксируется количество вхождений

// каждого из элементов массива a[].

for(i=0; i<n; i++)

{ r=a[i]; kol=0;

for(k=0; k<n; k++)

if(a[k]==r)

kol++;

t[i]=kol;

}

for(i=0; i<n; i++)

printf("%3d встречается %3d раз(а)\n",a[i],t[i]);

max=t[0]; nmax=0;

for(k=0; k<n; k++)

if(t[k] > max)

{ max=t[k];

nmax=k;

}

printf("Число %3d встречается %3d раз(а)\n",a[nmax], t[nmax]);

 

getch(); return 0;

}

 

Задача 97. Программа находит в заданном массиве три наибольших числа и выводит их значения на экран. Сначала элементы массива подвергаются сортировке сравнением смежных пар по убыванию. Три первых числа упорядоченного массива и есть результат работы программы.

// Программа отлажена в Visual Studio 2008

#include "stdafx.h"

#include<stdio.h>

#include<conio.h>

int main()

{

int k, i, priz, r;

int a[]={10,9,5,7,2,4,12};

int n=sizeof(a)/sizeof(int);

k=n;

do

{ priz=1; k--;

for(i=0; i<k; i++)

if(a[i] < a[i+1])

{ r=a[i];

a[i]=a[i+1];

a[i+1]=r;

priz=0;

}

}

while(! priz);

for(i=0; i<3; i++)

printf("%d\n",a[i]);

getch(); return 0;

}

 

Замечание. При более детальном анализе приведенной выше программы мы вынуждены будем согласиться, что она работает неверно, если в массиве есть одинаковые максимальные числа.

 

 

Задача 98. Это более совершенный алгоритм предыдущей задачи: если в массиве a [] имеется несколько одинаковых максимальных чисел, то программа после выявления первого максимального числа удаляет из массива все его вхождения, сдвигая все элементы массива в начало и корректируя число элементов n. Затем программа находит второе максимальное число и проделывает с ним то же самое. В конце концов, она сообщит о найденных трёх максимальных числах массива, предварительно переслав их в массив b[].

 

// Программа отлажена в Visual Studio 2008

#include "stdafx.h"

#include<stdio.h>

#include<conio.h>

 

// вернуть как результат работы функции 3 максимальные

// числа в массиве с последовательным их удалением

int max3(int a[], int n, int b[])

{ int k,i,t,max;

for(i=0; i<3; i++)

{ max=a[0];

//найти очередной максимум

for(k=1; k<n; k++)

if(a[k] > max) max=a[k];

b[i] = max;

//удалить все его вхождения

t=0;

for(k=0; k<n; k++)

if(a[k]!= max)

a[t++] = a[k];

n=t; //новый размер массива

}

return n;

}

 

int main()

{

int b[3],a[]={10,19,25,7,25,4,19,11,11};

int i,n=sizeof(a)/sizeof(int);

//**************

max3(a,n,b);

//**************

for(i=0; i<3; i++)

printf("%d-й максимум=%d\n",i+1, b[i]);

 

getch(); return 0;

}

 

Задача 99. Программа находит в заданном двумерном массиве mat[m][n] сумму минимальных элементов каждой строки матрицы.

 

// Программа отлажена в Visual Studio 2008

#include <iostream>

#include <conio.h>

using namespace std;

 

const int m=4,n=5;

int main()

{ int mat[m][n]= {{7,8,9,4,3},

{8,2,19,3,7},

{4,8,9,11,5},

{1,2,3,4,9}};

int min,i,k,s=0;

for (i=0; i<m; i++)

{ min=mat[i][0];

for(k=0; k<n; k++)

if(mat[i][k]< min)

min=mat[i][k];

s+=min;

}

cout<<"Сумма миним. элементов = "<<s;

getch(); return 0;

}

 

Задача 100. Даны два двумерных массива A[M][N] и B[M][N]. Построить одномерный массив R[M*N], содержащий те элементы массива A, которые не входят в массив B (т. н. разность множеств A и B).

 

// Программа отлажена в Visual Studio 2008

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

 

int main()

{

const int m=4, n=5; int flag;

int d,i,j,k,l,r[m*n],

a[m][n]={{1,2,3,4,5},

{1,52,53,4,6},

{1,62,63,4,7},

{1,2,3,44,8}},

 

b[m][n]={{1,2,3,4,5},

{1,42,43,4,6},

{1,72,73,4,7},

{1,2,3,4,8} };

int t=0;

for(i=0; i<m; i++)

for(j=0; j<n; j++)

{ d=a[i][j]; flag=0;

for(k=0; k<m; k++)

{ for(l=0; l<n; l++)

if(d==b[k][l])

{ flag=1; goto m1;} // break;}

// if (flag==1)

// break;

}

m1:if(flag==0)

r[t++]=d;

}

 

cout << " Разность множеств А и В:"<<endl;

for(k=0;k<t;k++)

cout<<r[k]<<'\n';

getch(); return 0;

}

 

Задача 101. Определить квадратную матрицу n –го порядка. Создать функцию для транспонирования заданной матрицы. Результат поместить на месте исходной матрицы.

 

При определении формального параматра-матрицы (int a[][n]) первая пара скобок после имени пуста, а вот количество столбцов матрицы во второй паре скобок следует указать явно. Количество столбцов жестко задано в функции, но количество строк может изменяться. Имейте в виду, что следующее объявление не будет работать надлежащим образом:

 

int a[][]; //ошибочное объявление

 

Обратите внимание, что для транспонирования матрицы только те её элементы, которые находятся под главной диагональю (или над нею), переставляются местами с элементами, симметричными им относительно главной диагонали.

 

// Программа отлажена в Visual Studio 2008

#include<conio.h>

#include<stdio.h>

#include<iostream>

using namespace std;

const int n=5;

// функция транспонирования матрицы

void transp_matr(int a[][n])

{ int rab,i,k;

for (i=1; i<n; i++)

for(k=0; k<i; k++)

{ rab = a[i][k];

a[i][k] = a[k][i];

a[k][i] = rab;

}

}

 

 

int main()

{ int mat[n][n]={{ 1, 2, 3,4, 5},

{ 6, 7, 8, 9,10},

{11,12,13,14,15},

{16,17,18,19,20},

{21,22,23,24,25} };

int i, k;

// Устанавливаем локализацию для выходного потока

wcout.imbue(locale("rus_rus.866"));

// Выводим строку на русском языке!

wcout<<L"Исходная матрица:\n";

for (i=0; i<n; i++)

{ for(k=0; k<n; k++)

printf("%3d ", mat[i][k]);

cout<<endl;

}

//*****************

transp_matr(mat);

 

//*****************

wcout<<L"Транспонированная иатрица:\n";

for (i=0; i<n; i++)

{ for(k=0; k<n; k++)

printf("%3d ", mat[i][k]);

cout<<endl;

}

getch(); return 0;

}

 

 

Задача 102. Определить квадратную матрицу n–го порядка. Подсчитать сумму её элементов под главной диагональю и произведение элементов под побочной диагональю.

 

// Программа отлажена в Visual Studio 2008

#include<iostream>

#include<conio.h>

using namespace std;

const int n=4;

int main()

{int mat[n][n]={{7,8,3,4},

{8,2,9,7},

{4,8,2,5},

{1,2,3,1}};

int i,k,s1=0,s2=1;

 

for (i=0;i<n;i++)

for(k=0;k<n;k++)

{ if (i>k) s1=s1+mat[i][k];

if (i+k>=n) s2=s2*mat[i][k];

}

 

// Устанавливаем локализацию для выходного потока

wcout.imbue(locale("rus_rus.866"));

 

wcout<<L"Сумма элементов под главной диагональю = "<<s1<<endl;

wcout<<L"Произведение элементов под побочной диагональю = "<<s2;

_getch();return 0;

}

 

 

Задача 103. Пусть дана вещественная матрица размером M x N (M, N – заданные константы). Упорядочить её строки по неубыванию сумм их элементов (Задача 9.23б из В. Пильщикова).

 

// Программа отлажена в Visual Studio 2008

 

#include "stdafx.h"

#include<conio.h>

#include<stdio.h>

 

const int M=6, N=6;

 

// функция сортировки строк матрицы

void sort_matr(float mat[][N],int m, int n, float s[])

{ float rab; int j, i, k;

// сортировка строк матрицы

for (i=0; i<m-1; i++)

for (k=i+1; k<n; k++)

if(s[i] > s[k])

{ rab=s[i]; s[i]=s[k]; s[k]=rab;

for(j=0; j<n; j++)

{ //перестановка строк

rab=mat[i][j];

mat[i][j]=mat[k][j];

mat[k][j]= rab;

}

}

return;

 

}

int main()

{ float mat[M][N] = {{6,666,1,1,1,1},

{5,555,1,1,1,1},

{1,111,1,1,1,1},

{3,333,1,1,1,1},

{2,222,1,1,1,1},

{4,444,1,1,1,1}};

int i,k; float s[M];

//сумма элементов каждой строки

for (i=0; i<M; i++)

{

//cout<<i<<" я строка:\n";

s[i]=0;

for (k=0; k<N; k++)

s[i]=s[i] + mat[i][k];

}

 

printf("исходная матрица сумма по строке\n");

 

for(i=0; i<M; i++)

{

printf("\n");

for(k=0; k<N; k++)

printf ("%5.0f ", mat[i][k]);

printf ("%7d -я строка %6.0f ",i, s[i]);

}

//-******************

 

sort_matr(mat, M, N, s);

 

//*******************

printf("\n\nрезультат сортировки матрицы\n");

for(i=0; i<M; i++)

{

printf("\n");

for(k=0; k<N; k++)

printf ("%5.0f ", mat[i][k]);

}

 

getch(); return 0;

}

 

 

Задача 104. По заданной матрице A [m, m] определить линейный массив В[m], получаемый из элементов побочной диагонали матрицы их делением на максимальный среди элементов, расположенных ниже главной диагонали матрицы A. Выполнить сортировку массива В по убыванию элементов.

 

// Программа отлажена в Visual Studio 2008

#include "stdafx.h"

#include<conio.h>

#include<stdio.h>

#include<iostream>

using namespace std;

 

const int n=5;

// функция сортировки сравнением смежных пар

void sort_sp(double x[], int n)

{ int flag;

do

{ n--; flag=0; // флаг, возможно, досрочного завершения

for(int i=0; i<n; i++)

if(x[i]< x[i+1])

{ double r=x[i];

x[i]=x[i+1];

x[i+1]=r;

flag=1;

}

}

while(n!= 0 && flag);

return;

}

 

//Головной модуль

int main()

{ double a[n][n] = {{ 1, 2, 3, 4, 5},

{ 6, 7, 8, 9, 10},

{11, 12, 13, 14, 15},

{16, 17, 18, 19, 20},

{21, 22, 23, 24, 25} };

double b[n]; int i, k;

 

// Устанавливаем локализацию для выходного потока

wcout.imbue(locale("rus_rus.866"));

// Выводим строку на русском!

wcout<<L"Исходная матрица:\n";

for (i=0; i<n; i++)

{ for(k=0; k<n; k++)

printf("%3.0lf ", a[i][k]);

cout<<endl;

}

// Найти максимальный среди элементов ниже главной диагонали

double max = a[1][0];

for (i=1; i<n; i++)

for(k=0; k<i; k++)

if (a[i][k] > max)

max = a[i][k];

 

//Создать массив из побочной диагонали

wcout<<L"массив из побочной диагонали:\n";

for (i=0; i<n; i++)

b[i]= a[i][n-i-1]/max;

 

// вызвать функцию сортировки по убыванию элементов

 

sort_sp(b, n);

 

for (i=0; i<n; i++)

printf("%5.2lf ", b[i]);

getch(); return 0;

}

 

Задача 105. В заданной матрице A[n, n] максимальный элемент каждой строки таблицы обменять с диагональным элементом этой же строки.

// Программа отлажена в Visual Studio 2008

//swap_dia.cpp - максимальный элемент каждой строки таблицы

// обменять с диагональным элементом этой же строки.

#include "stdafx.h"

#include <conio.h>

#include <iostream>

using namespace std;

const int N = 4;

int main()

{

int a[N][N]={ {8, 3, 11, 5},

{4, 22, 9, 13},

{8, 1, 0, 33},

{-1, 0,91, 1}}, i,k,amax,kmax;

for (i=0;i<N;i++)

{ amax=a[i][0]; kmax=0;

for (k=1;k<N;k++)

if (a[i][k]>amax)

{ amax=a[i][k];kmax=k;}

a[i][kmax] = a[i][i];

a[i][i] = amax;

}

for (i=0;i<N;i++)

{

for (k=0;k<N;k++)

cout<<"\t "<<a[i][k];

cout<<"\n";

}

getch(); return 0;

}

 

 

 

Задачи для самостоятельного решения

а) линейные массивы

1. В заданном целочисленном массиве A[20] найти первый равный нулю элемент и напечатать его порядковый номер.

 

2. Зарплата m сотрудников фирмы представлена как массив вещественных чисел. Вычислить среднюю зарплату и порядковый номер того сотрудника, у которого зарплата максимальна

 

3. Составить программу, которая организует массив P[ m ], куда последовательно вводится вес багажа каждого из m пассажиров авиарейса. Затем программа вычисляет и выводит на экран:

- суммарный вес багажа всех пассажиров;

- максимальный вес багажа;

- средний багаж на 1 пассажира

 

4. В детском садике регулярно измеряют рост и вес детей, занося данные изменений в два массива H и P. Найти в каждом массиве порядковый номер элемента, соответствующий минимальному весу и максимальному росту ребёнка соответственно

 

5. На товарном складе данные о проданных товарах хранятся в виде двух массивов: массив объёмов товаров (в шт.) и массив цен (грн. за штуку). Сформировать третий массив — стоимость каждой партии товаров. Результат выдать на экран.

 

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

 

7. Элементы заданного целочисленного массива A упорядочены по возрастанию. Расположить эти числа в массиве B в порядке убывания их значений.

 

8. Переслать нечётные элементы заданного целочисленного массива А в его начало, а чётные — в конец массива А. Результаты выдать на экран.

 

9. Переслать положительные элементы заданного целочисленного массива А в новый массив В, а отрицательные — в массив С. Результаты выдать на экран.

 

10. Дан массив A[N]. Составить программу, которая подсчитывает наибольшее количество одинаковых подряд идущих элементов.

 

11. Урожайность зерновых в 16 районах Одесской области представлена как массив вещественных чисел. Составить программу, которая находит максимальную и минимальную урожайность.

 

12. Для заданного массива из 100 чисел подсчитать S1 и количество K1 его положительных элементов, а также сумму S2 и количество K2 отрицательных элементов.

 

13. Составить программу, которая определяет, есть ли в массиве А[1..n] одинаковые элементы и выдает на экран такие числа и их индексы.

 

14. Элементы заданного целочисленного массива A упорядочены по возрастанию. Расположить эти числа в массиве B в порядке убывания их значений.

 

15. Даны два массива A[N] и B[M], упорядоченные по возрастанию значений их элементов. Переслать все элементы этих массивов в новый массив C[N+M], который также должен быть упорядочен по возрастанию. Сортировку не применять.

 

16. Задан массива чисел A[N]. Составить программу, которая в качестве каждого i-го элемента этого массива записывает сумму предшествующих ему чисел от A[0] до A[i] включительно (i = 1,2,...,N-1).

 

17. Составить программу, которая по заданному массиву A строит новый массив B, содержащий вначале все чётные, а затем - все нечётные элементы исходного массива.

 

18. Подготовлена сводка о среднесуточной температуре воздуха в г. Одессе за прошлый месяц. Определить, какая температура была для прошедшего месяца наиболее характерной.

 

19. Дан массив A[N]. Составить программу, которая определяет, какое из чисел встречается в нём наибольшее количество раз.

20. В заданном целочисленном массиве Z[0..n] выполнить циклический сдвиг всех его элементов на К шагов влево. При этом каждый элемент Z[i] перемещается на место Z[i-K], а те элементы, которым "не хватило места", последовательно заполняют массив с противоположного конца.

21. В заданном целочисленном массиве Z[1..n] найти наиболее протяжённую последовательность повторяющихся чисел, напечатав количество таких чисел и индексы начала и конца такой последовательности(например, в массиве 8,3,3,7,8,8,8,8,9 это цепочка 8,8,8,8).

22. Найти наибольший общий делитель любого количества чисел, вводимых пользователем. Использовать функцию нахождения НОД двух чисел.

23. Найти наименьшее общее кратное любого количества чисел, вводимых пользователем. Использовать функцию нахождения НОК двух чисел.

 

 

б) двумерные массивы (матрицы)

24. В двух столбцах матрицы заданы количество некоторого товара и его цена. Вычислить третий столбец — стоимость всей партии каждого товара, а также общую стоимость всех товаров. Результаты напечатать.

 

25. Дана квадратная матрица n-го порядка, элементы которой — натуральные числа. Найти сумму элементов главной и побочной диагоналей.

26. В заданной матрице размерами m x n найти строку, сумма элементов которой максимальна. Найти в этой строке минимальный элемент.

27. В двумерном массиве A[m][n] все числа различны. В каждой строке выбирается мини­мальный элемент, а затем среди этих чисел выбирается максимальное. Определить номер строки и столбца массива А, в которых расположено выбранное число.

28. Найти число положительных и число отрицательных элементов каждой строки матрицы A[1..m][1..n]. Результаты выдать на экран, а также переслать в массивы КР[1..m] и KO[1..m] соответственно.

29. Определить количество положительных элементов каждого столбца матрицы X[M][N] и запомнить найденные числа в массиве B[N].

30. В заданной матрице A[M][N] найти строку, в которой находится максимальный элемент матрицы и переслать эту строку в массив B[N].

31. В заданной целочисленной матрице A[M][N] найти строку, содержащую наибольшее число нулевых элементов и напечатать её.

32. Составить программу формирования и печати квадратной матрицы n-го порядка, содержащей нули на главной диагонали, единицы под главной диагональю и двойки — над ней.

33. Составить программу формирования и печати матрицы X[8][8], заполненной нулями и единицами в шахматном порядке.

34. В заданном двумерном массиве приведены сведения о ежедневной температуре воздуха в ряде населённых пунктов области. Определить, в каком пункте области было теплее всего за весь этот период и какой день был самым тёплым.

35. В данной матрице A[N][N] найти минимальный из элементов, расположенных под главной диагональю, и максимальный из элементов, расположенных над главной диагональю.

 

в) массивы как параметры функций

 

36. В массиве A[N] каждый элемент равен 0, 1, или 2. Составить функцию, которая позволяет переставить элементы массива так, чтобы сначала располагались все двойки, затем нули и, наконец, все единицы.

37. Составить функцию для циклической перестановки элементов массива A[m] на заданное число n шагов, так что элемент A[i] перемещается в A[i+n], а последние n элементов, которым “не хватило места”, перемещаются в освободившиеся первые n ячеек массива.

38. Создать функцию, которая позволяет сформировать массив f[30], содержащий последовательность чисел Фибоначчи. Эти числа определяются так: f0 = 1, f1 = 1, а каждое следующее число равно сумме двух предыдущих:

 

fn+1 = fn + fn-1 n = 1, 2, 3, …

 

Вот несколько первых чисел Фибоначчи:

 

1, 1, 2, 3, 5, 8, 13, 21, …

 

39. Создать функцию, которая позволяет проверить, составляют ли элементы заданного целочисленного массива A[0..N] арифметическую прогрессию.

 

40. Создать функцию, которая позволяет переслать положительные элементы заданного массива a[] в массив b[], а отрицательные — в массив c[] и подсчитать количество тех и других (K1 и K2 соответственно).

41. Создать функцию, которая по заданному массиву а[20] формирует новый массив b[20], каждый элемент которого формируется так:

 

b[0] = a[0]

b[1] = a[0] + a[1]

b[2] = a[0] + a[1] + a[2]

…………………………

 

42. Создать функцию, которая позволяет для целого числа N выделить каждую его цифру и записать последовательность цифр в массив a[5]. Результат выдать на экран.

43. Создать функцию, которая позволяет решить следующую задачу. Дан массив А[ ] — непустая последовательность ненулевых целых чисел, за которой следует 0. Определить, сколько раз в этой последовательности меняется знак. (Например, в последовательности 1, –34, 5, 6, –9 знак меняется 3 раза)

44. Создать функцию, которая, позволяет в упорядоченном по возрастанию элементов массиве X найти все те элементы, которые не принадлежат заданному интервалу [A,B] и переслать их в массив Y. Результат выдать на экран.

45. В заданном целочисленном массиве A[1..n] подсчитать количество различных чисел (повторяющиеся числа учитывать один раз). Например, в массиве 8, 3, 8, 4, 8, 3, 4 три различных числа. Оформить в виде функции.

46. Создать функцию, которая позволяет найти элемент матрицы, минимальный в той строке, в которой стоит элемент, максимальный для всей матрицы.

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

48. Даны два двумерных массива A[M][N] и B[M][N]. Построить одномерный массив R, содержащий те элементы массива A, которые входят в массив B. Оформить в виде функции.

49. Cоставить функцию, которая переставляет местами два столбца заданной матрицы A[M][N] с заданными номерами P и Q.

 

 


 



Поделиться:


Последнее изменение этой страницы: 2016-12-16; просмотров: 604; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.125.169 (0.172 с.)