Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > как работает цикл?


Автор: Andrei3423421 23.12.2017, 10:52
как работает цикл почему min начинается 999999?

Код

for (i=0; i<m; i++)
{
min=999999;
max=0;
for (j=0; j<n; j++)
{
if (a[i][j]<min) {min=a[i][j]; l=j;}
if (a[i][j]>max) {max=a[i][j]; r=j;}
}
a[i][l] = max;
a[i][r] = min;
}



Код

#include <stdlib.h>
#include <time.h>
#include <stdio.h>

void main()
{
const long m=3, n=3;
long a[m][n], i, j, min, max, x, l, r;
srand(time(0));
//формируем и выводим матрицу
for (i=0; i<m; i++)
{
printf("\n\n");
for (j=0; j<n; j++)
{
a[i][j]=25+rand()%56;
printf("%d\t",a[i][j]);
}
}
//ищем min и max, меняем местами
for (i = 0; i < n; i++)

min = 0;
max = 0;
for (i=0; i<m; i++)
{
min=999999;
max=0;
for (j=0; j<n; j++)
{
if (a[i][j]<min) {min=a[i][j]; l=j;}
if (a[i][j]>max) {max=a[i][j]; r=j;}
}
a[i][l] = max;
a[i][r] = min;
}
printf("\n\n");
//выводим то что получилось
for (i=0; i<m; i++)
{
printf("\n\n");
for (j=0; j<n; j++)
{
printf("%d\t",a[i][j]);
}
}
printf("\n\n");
}

Автор: feodorv 25.12.2017, 14:13
Цитата(Andrei3423421 @  23.12.2017,  10:52 Найти цитируемый пост)
a[i][j]=25+rand()%56;

У Вас числа генерируются в диапазоне 25...80. Далее в каждом ряду матрицы Вы ищете минимальный и максимальный элементы, запоминаете их индексы, чтобы в дальнейшем эти элементы обменять местами.

Цитата(Andrei3423421 @  23.12.2017,  10:52 Найти цитируемый пост)
почему min начинается 999999?

min не начинается с 999999. Переменной min присваивается значение, заведомо большее любого другого, возможного в матрице. Это значение можно было выбрать как 100, 200, 1000000000, 0x7fffffff, MAX_INT, 81 и т.д. Любое из них больше 80, поэтому подойдёт для применяемого алгоритма. А в алгоритме затем a[i][j] сравнивается с min, и значение min будет только уменьшаться. И оно гарантировано будет уменьшено до реального значения со своего первоначального значения, поскольку число сравнений больше нуля (у Вас в коде - 3 штуки). Аналогично и с переменной max. Сначала она инициализируется заведомо меньшим значением, чем любое a[i][j]. Далее её значение может только расти до максимально в строке. Никакой магии.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)