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


Автор: Гость_Евгений 2.1.2006, 19:52
Всех с наступившим новым годом!
помогите пожалуйста выполнить задание, нужно найти в генерируемом массиве минимальный и максимальный элементы и поменять их местами.
Массив генерируется, выводится, а вот макс и мин показывает неверно, менять их еще не пробовал

Код

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define SIZE 10

int matrix [SIZE][SIZE];
void randMatrix (int limit);
void minmax();

int main() {
  int i, j, limit;
  printf ("Limit :  ");
  scanf("%d",&limit);
  if (limit > 999 || limit < 0)
    printf ("Error \n");
  else {
    randMatrix (limit);
    minmax();
  }
  printf ("\n");
  system ("Pause");
  return 0; 
}
  
void minmax(){
int i, j;
int matrmax = 0;
int matrmin = 999;
  for(i = 0; i < SIZE; i++) { 
    for (i = 0 ; i < SIZE; i++) { 
      if (matrix[i][j] > matrmax) {     
        matrmax = matrix[i][j];  
        }
      if (matrix[i][j] < matrmin){
        matrmin = matrix[i][j];     
        }  
      }
    } 
    printf ("\n Matrix max element : %d ", matrmax); 
    printf ("\n Matrix min element : %d ", matrmin); 
}
     
void randMatrix (int limit) {    
  int i, j; 
  for(i = 0; i < SIZE; i++ ) { 
    printf("\n");          
    for (j = 0; j < SIZE; j++) { 
      matrix[i][j] = 1.0 + (int) ( (limit * rand()) / (RAND_MAX + 1.0) );
      printf("%2d ", matrix[i][j]);
      }
   }
}  

Автор: DeadSoul 2.1.2006, 20:15
ОТкуда это
Код

int matrmax = 0;
int matrmin = 999;

присваивание?

Заменить на
Код

int matrmax = matrix[0][0];
int matrmin = matrix[0][0];

Автор: Dov 2.1.2006, 20:30
Цитата
void minmax(){
int i, j;
int matrmax = 0;
int matrmin = 999;
  for(i = 0; i < SIZE; i++) { 
    for (i = 0 ; i < SIZE; i++) {

Для начала во 2 цикле поменяй i на j, а там посмотрим.

Автор: Guest 2.1.2006, 21:03
Хех, спасибо, глупая ошибка, оба варианта работают как надо smile
А как их местами поменять?

Автор: Dov 2.1.2006, 21:39
Цитата(Guest @ 2.1.2006, 21:03)
А как их местами поменять?

Например, можно запомнить индексы мин. и макс. эл-тов и поменять местами эл-ты по этим индексам.

Автор: Dov 2.1.2006, 23:18
Просто для иллюстрации, твоя же прога, чуток изменённая:
Код
#include <stdio.h>       
#include <math.h>        
#include <stdlib.h> 

#define SIZE 10 

int     matrix[SIZE][SIZE];

void    randMatrix(int limit);  
void    minmax(); 
void    printMatrix();

int main()
{
    int         limit; 

    printf("Limit :  ");        
    scanf("%d", &limit);

    if(limit > 999 || limit < 0)
    {
        printf("Error \n");
    }
    else
    {
        randMatrix(limit);
        printMatrix();
        minmax();
        printMatrix();
    }

    printf("\n");       
    system("Pause");

    return 0;
}       

void minmax()
{
    int         i,                      
                j,
                temp,
                min_i   = 0,
                min_j   = 0,
                max_i   = 0,
                max_j   = 0;      
    int         matrmax = matrix[0][0];    
    int         matrmin = matrix[0][0];

    for(i = 0; i < SIZE; i++)
    {
        for(j = 0 ; j < SIZE; j++)
        {
            if(matrix[i][j] > matrmax)
            {
                matrmax = matrix[i][j];
                max_i   = i;
                max_j   = j;
            }
            else if(matrix[i][j] < matrmin)
            {
                matrmin = matrix[i][j];
                min_i   = i;
                min_j   = j;
            }
        }
    }

    printf("\n Matrix max element : %d ", matrmax);     
    printf("\n Matrix min element : %d \n", matrmin);

    temp                 = matrix[max_i][max_j];
    matrix[max_i][max_j] = matrix[min_i][min_j];
    matrix[min_i][min_j] = temp;
}       

void randMatrix(int limit)
{
    int         i,
                j;      
    for(i = 0; i < SIZE; i++)
    {
        for(j = 0; j < SIZE; j++)
        {
            matrix[i][j] = 1 + (int) ((limit * rand()) / (RAND_MAX + 1));
        }
    }
} 

void printMatrix()
{
    int         i,
                j;      
    for(i = 0; i < SIZE; i++)
    {
        printf("\n");           
        for(j = 0; j < SIZE; j++)
        {
            printf("%4d ", matrix[i][j]);
        }
    }
}

Автор: Гость_Евгений 3.1.2006, 15:55
Большое спасибо, очень помогли smile

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