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

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Задачи: Массивы, условие отбора элементов, операции над элементами

  • Автор темы Romashkinu
  • Дата начала
R

Romashkinu

Здравствуйте!
Буду благодарен за помощь и объяснение задач на тему массивы, желательно в компиляторе Bolard C++.

Задачи звучат следующим образом:
1. В одномерном массиве, состоящим из n целых элементов, вычислить:
а) количество элементов массива, равных 0;
б) сумму элементов массива, расположенных после минимального элемента.
2. Задан массив {Аij} размерности MxM, требуется найти m= min (max)

Заранее спасибо. :lovecodeby:
 
R

Romashkinu

C++:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
int main()
{
srand((unsigned)time(NULL));
clrscr();
int *arr;
int size,i,min,sum=0,count_nul=0,imin;
printf("Enter size of array -> ");
scanf("%d",&size);
arr = (int*)malloc(size*sizeof(int));
printf("\nArray: ");
for(i=0; i<size; i++)
{
arr[i]=rand()%5;
printf("%d ",arr[i]);
if(arr[i]==0)
{
count_nul++;
}
}
printf("\nNumber 0-elements -> %d",count_nul);
min=arr[0];
for(i=0; i<size; i++)
{
if(arr[i]<min)
{
min=arr[i];
imin=i;
}
}
for(i=imin+1; i<size; i++)
{
sum+=arr[i];
}
printf("\nMin -> %d",min);
printf("\nSum after min -> %d",sum);
getch();
free(arr);
return 0;
}

Это код к первой задаче, только я не могу его понять.
Объясните пожалуйста, например какую роль играет в этом коде <malloc.h>, getch();
free(arr); - Что это?
 
H

hosm

А сами смотреть не пробовали?
вот примерно так:
<malloc.h> - подключение заголовочного файла для ф-ций работы с динамической памятью (выделение - malloc и освобождение)
getch(); - ожидание ввода символа (организация задержки до нажатия клавиши -для просмотра результатов работы программы)
free(arr); - освобождение памяти
Если неправильно, народ поправит =)
 
R

Romashkinu

Этот рабочий, но я думаю у меня его не примут, так как мы ещё не проходили библиотеку <malloc.h>.
Если можно то другой рабочий код, желательно самым простейшим способом и с библиотекой Iostream на языке Bolard. :)
 
D

DarkKnight

1. В одномерном массиве, состоящим из n целых элементов, вычислить:
а) количество элементов массива, равных 0;
б) сумму элементов массива, расположенных после минимального элемента.
C++:
/*
codeby.net
Autor: DarkKnight125 (Denis Goncharov)
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <locale.h>

/*
1. В одномерном массиве, состоящим из n целых элементов, вычислить:
а) количество элементов массива, равных 0;
б) сумму элементов массива, расположенных после минимального элемента.
*/
void main(void)
{
setlocale(LC_ALL,".1251");
int Arr[500]; //Массив (макс. число элементов 500)
int ZeroCount = 0; //Счетчик нулевых эл-ов
int Sum = 0; //Сумма эл-ов после минимального
int i; //Не люблю так делать, но я хз на какойм именно борладновском компиляторе ты будешь компилить, так что вынесу
int Size; //Размерность именно нашего массива
int MinEl = 9999999; //Минимальный элемент по умолчанию его сделаем очень большим
int MinIndex; //Индекс минимального элемента массива
srand(time(NULL)); //Инициализируем счетчик случ. величины
printf("Введите размерность массива : ");
scanf("%d", &Size);
for (i = 0; i < Size; i++)
{
Arr[i] = rand()%100;
printf("Arr[%d] = %d\n",i,Arr[i]);
//Тут сразу и найдем и мин. элемент и сумму нулевых элементов
if (Arr[i] == 0) ZeroCount++;
if (Arr[i] < MinEl)
{
MinEl = Arr[i];
MinIndex = i;
}
}
//И того на этом этапе мы знаем кол-во нулевых элементов (ZeroCount)
//Минимальный элемент MinEl и его индекс MinIndex, осталось только посчитать сумму
for (i = MinIndex; i < Size; i++)
Sum+= Arr[i];

//Результат
printf("Кол-во нулевых элементов в массиве = %d\n",ZeroCount);
printf("Минимальный элемент массива = %d, его позиция в массиве = %d, а сумма эл.ов с этой позиции = %d",MinEl, MinIndex, Sum);
}

Добавлено:
2. Задан массив {Аij} размерности MxM, требуется найти m= min (max)
А вот тут не понимаю задания... Найти m = min(max), если с min - мне все ясно, то что означает max - не совсем (может вы имели ввиду макс. элемент в строке или макс. элемент в столбце)? Объясните пожалуйста
 
D

DarkKnight

Ну вот шаблончик... Только нужно выяснить что такое именно max и записать его в массив AMax
C++:
/*
codeby.net
Autor: DarkKnight125 (Denis Goncharov)
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <locale.h>

/*
2. Задан массив {Аij} размерности MxM, требуется найти m= min (max)
*/
void main(void)
{
setlocale(LC_ALL,".1251");
int A[500][500]; //Двумерный массивМассив (макс. число элементов 500х500)
int AMax[500]; //Одномерный массив для каких то макс. начений 
int Minimal = 99999999; //Наше что то минимальное
int i,j; //Не люблю так делать, но я хз на какойм именно борладновском компиляторе ты будешь компилить, так что вынесу
int Size; //Размерность именно нашего массива (как я понимаю он квадратный)

srand(time(NULL)); //Инициализируем счетчик случ. величины
printf("Введите размерность массива кв. двумерного массива : ");
scanf("%d", &Size);
for (i = 0; i < Size; i++)
{
for (j = 0; j< Size; j++)
{
A[i][j] = rand()%100 * (rand()%2?1:-1);
printf("Arr[%d][%d] = %d\n",i,j,A[i][j]);
}
}

//продолжение следует ....

for (i = 0; i< Size; i++)
if (AMax[i] < Minimal)
Minimal = AMax[i];
printf("m= min (max), где max- ХЗ что = %d",Minimal);
}

Добавлено: В первой задачи кстати сумму тоже можно было бы в первом же цикле найти... Но посчитал что будет чуть менее понятно...
 
R

Romashkinu

DarkKnight125
Спасибо за решение и объяснение первой задачи, вторую задачу видимо я неправильно переписал :(
Потом посмотрю и ещё правильно напишу :)
 
A

alik86

А что за предмет?
min(max), насколько я помню, обозначался минимакс (минимаксный критерий принятия решения в условиях неопределённости).
 
D

DarkKnight

2. Задан массив {Аij} размерности MxM, требуется найти m= min (max{столбоцы})
C++:
/*
2. Задан массив {Аij} размерности MxM, требуется найти m= min(i) (maxj{a(i,j)})
*/
/*
codeby.net
Autor: DarkKnight125 (Denis Goncharov)
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <locale.h>

/*
2. Задан массив {Аij} размерности MxM, требуется найти m= min (max)
*/
void main(void)
{
setlocale(LC_ALL,".1251");
int A[500][500]; //Двумерный массивМассив (макс. число элементов 500х500)
int AMax[500]; //Одномерный массив для каких то макс. начений 
int Minimal = 99999999; //Наше что то минимальное
int i,j; //Не люблю так делать, но я хз на какойм именно борладновском компиляторе ты будешь компилить, так что вынесу
int Size; //Размерность именно нашего массива (как я понимаю он квадратный)

srand(time(NULL)); //Инициализируем счетчик случ. величины
printf("Введите размерность массива кв. двумерного массива : ");
scanf("%d", &Size);
for (i = 0; i < Size; i++)
{
for (j = 0; j< Size; j++)
{
A[i][j] = rand()%100 * (rand()%2?1:-1);
printf("Arr[%d][%d] = %d\n",i,j,A[i][j]);
}
}

//Найдем максимальные значение в каждом столбце
printf ("Максимальные значение столбцов : \n");
for (i = 0; i< Size; i++)
{
int Maximal = -9999999; //Макс. значение в столбце (для начало присвоим ему очень маленькое)
for (j = 0; j<Size; j++)
if (Maximal < A[j][i])
Maximal = A[j][i];
AMax[i] = Maximal;
printf("%i ",AMax[i]);
}

//Теперь найдем из них минимальное
for (i = 0; i< Size; i++)
if (AMax[i] < Minimal)
Minimal = AMax[i];
printf("\nМинимальное значение из макс. зн. столбцов = %d\n",Minimal);
}
 

Вложения

  • minmax.jpg
    minmax.jpg
    44,2 КБ · Просмотры: 224
G

Guest

С++ Буду благодарен за помощь.
Дан массив А (18).
Сформулировать новый массив с позитивных чисел выходящего массива.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!