Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2013, 23:27   #11
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

Алгоритм я тоже понимаю,но записать то как.Не знаю.
spectrum988 вне форума Ответить с цитированием
Старый 25.11.2013, 08:57   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

попробуйте такой код:
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
const int n = 20;
const int m = 10;

int F[n] [m],minJ,maxJ,i,j, tmp;
for (int i=0; i<n;i++)
{
  for (int j=0;j<m;j++)
  {
    F[i][j]= rand()% 10;
    cout << F[i][j] << " ";
  }
  cout << "\n";
}

for (i=0; i<n; i++)
{
  minJ=0;
  maxJ=0;
  for (j=0; j<m; j++)
  {
    if (F[i][j]<F[i,minJ])
    {
      minJ= j;
    }
    else
      if (F[i][j]>F[i,maxJ])
      {
        maxJ=j;
      }
  }

  // выдадим сообщения - для наглядности/отладки 
  cout<<" max = " << F[i,maxJ]<<" at column "<<maxJ;
  cout<<" min = " << F[i,minJ]<<" at column "<<minJ;

  // поменяем местами максимальный и первый элемент строки
  tmp = F[i][0];
  F[i][0] = F[i,maxJ]
  F[i,maxJ] = tmp

  // поменяем местами минимальный и последний элемент строки
  tmp = F[i][m-1];
  F[i][m-1] = F[i,minJ]
  F[i,minJ] = tmp
}

// выведем полученную матрицу
cout<<" Result matrix: "
for (int i=0; i<n;i++)
{
  for (int j=0;j<m;j++)
  {
    cout << F[i][j] << " ";
  }
  cout << "\n";
}

system("pause");
return 0;
}
p.s. даже если он не будет компилироваться (что не удивительно, я его писал в текстовом редакторе, да и язык C я совсем не знаю), главное, уловите суть алгоритма. А суть в том, что мы ищем не значение максимального и минимального элементов, и их индексы (номер столбца). и дальше уже манипулируем с элементом, имея его индекс.

Успехов!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.11.2013, 13:37   #13
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

Cпасибо,верно оно работает вот код,который прокомпилирован:
Код:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
int main()
{
const int n = 20;
const int m = 10;
int F[n][m],minJ,maxJ,i,j, tmp;
for (int i=0; i<n;i++)
{
  for (int j=0;j<m;j++)
  {
    F[i][j]= rand()% 10;
    cout << F[i][j] << " ";
  }
  cout << "\n";
}      

for (i=0; i<n; i++)
{
minJ=0;
maxJ=0;
  for (j=0; j<m; j++)
  {
    if (F[i][j]<F[i][minJ])
    {
      minJ= j;
    }
    else
      if (F[i][j]>F[i][maxJ])
      {
        maxJ=j;
      }   
  }
  tmp = F[i][0];
  F[i][0] = F[i][maxJ];
  F[i][maxJ] = tmp;   

  tmp = F[i][m-1];
  F[i][m-1] = F[i][minJ];
  F[i][minJ] = tmp; 
}

cout<<" Result: "<<endl; 
for (i=0; i<n;i++)
{
  for (int j=0;j<m;j++)
  {
    cout << F[i][j] << " ";
  }
  cout << "\n";
}

system("pause");
return 0;
}
Но не во всех строках почему-то правильно размещает максимальный и минимальный элемент строки вот :
0 2 0 6 7 5 5 8 6 4
8 1 9 2 0 2 1 3 7 9
1 0 5 4 9 2 1 9 6 1
1 5 3 4 0 9 5 1 2 9
8 6 4 2 3 6 4 9 1 7
0 5 2 8 6 7 2 4 9 9
3 6 1 0 8 5 9 0 3 3
9 5 2 3 7 6 8 0 8 6
0 2 2 7 5 6 8 6 9 8
9 1 7 5 1 5 0 0 1 7
5 3 7 2 1 3 3 4 3 6
8 6 0 4 4 1 9 6 0 4
1 2 5 3 6 4 0 8 4 9
8 5 6 5 0 3 0 8 6 7
4 8 0 3 5 9 3 0 2 5
1 9 2 4 1 0 0 1 6 3
5 2 2 3 8 2 1 1 1 2
2 2 4 8 5 9 3 2 6 5
5 9 3 2 6 9 3 9 7 0
6 3 2 8 7 3 6 5 7 4
Result:
4 2 0 6 7 5 5 0 6 8
9 1 8 2 9 2 1 3 7 0
9 1 5 4 1 2 1 9 6 0
9 5 3 4 9 1 5 1 2 0
9 6 4 2 3 6 4 8 7 1
9 5 2 8 6 7 2 4 0 9
9 6 1 3 8 5 3 0 3 0
9 5 2 3 7 6 8 6 8 0
8 2 2 7 5 6 8 6 0 9
9 1 7 5 1 5 7 0 1 0
7 3 5 2 6 3 3 4 3 1
9 6 4 4 4 1 8 6 0 0
9 2 5 3 6 4 1 8 4 0
8 5 6 5 7 3 0 8 6 0
9 8 5 3 5 4 3 0 2 0
9 1 2 4 1 3 0 1 6 0
8 2 2 3 5 2 2 1 1 1
5 2 4 8 5 2 3 2 6 9
9 5 3 2 6 9 3 9 7 0
8 3 4 6 7 3 6 5 7 2
spectrum988 вне форума Ответить с цитированием
Старый 25.11.2013, 14:09   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да. Это мой косяк в алгоритме, если минимальное число находилось ПЕРВЫМ в строке!

исправить можно, например, так:
Код:
...
int F[n][m],minJ,maxJ,i,j, tmp1, tmp2;
...

  tmp1 = F[i][0];
  tmp2 = F[i][m-1];
  F[i][0] = F[i][maxJ];
  F[i][m-1] = F[i][minJ];
  F[i][maxJ] = tmp1;   
  F[i][minJ] = tmp2;
p.s. не проверял, чисто умозрительно писал...

Последний раз редактировалось Serge_Bliznykov; 25.11.2013 в 14:12.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.11.2013, 14:21   #15
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Код:
#include "stdio.h"
#include "stdlib.h"
#include "time.h"


int main()
{
   const int n = 20;
   const int m = 10;
   int arr[n][m] = {0,};
   unsigned long seed = time(NULL);
   srand(seed);
   for(int i = 0; i < n; i++)   
   {
       for(int j = 0; j < m; j++)
       {
         arr[i][j] = rand() % 10;
         printf("%3d",arr[i][j]);
       }
       printf("\n");
   }
   for(int i = 0; i < n; i++)
   {
       int min_v = arr[i][0];
       int min_i = 0;
       int max_i = 0;
       int max_v = arr[i][0];
       for(int j = 0; j < m; j++)
       {           
           if(arr[i][j] > max_v)
           {
               max_v = arr[i][j];
               max_i = j;
           }
           if(arr[i][j] < min_v)
           {
               min_v = arr[i][j];
               min_i = j;
           }
       }       
       arr[i][max_i] = arr[i][m - 1];
       arr[i][m - 1] = max_v;       
       arr[i][min_i] = arr[i][0];
       arr[i][0] = min_v;
   }
   for(int i = 0; i < n; i++)
   {
       for(int j = 0; j < m; j++)
           printf("%3d",arr[i][j]);
       printf("\n");
   }
   return 0;
}
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 25.11.2013, 14:22   #16
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

Странно,конечно,но ничего не изменилось!Так и выводит!
spectrum988 вне форума Ответить с цитированием
Старый 25.11.2013, 14:25   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

spectrum988, Вы мой вариант исправленного кода в пост #14 видели?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.11.2013, 14:27   #18
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

Serge_Bliznykov,именно его я и использовал!
spectrum988 вне форума Ответить с цитированием
Старый 25.11.2013, 14:39   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вижу. стыжусь.


а так?
Код:
...
int F[n][m],minJ,maxJ,i,j, tmp1, tmp2, minv, maxv;
...

  tmp1 = F[i][0];
  tmp2 = F[i][m-1];
  maxv =  F[i][maxJ]
  minv  = F[i][minJ], 
  F[i][0] = maxv;
  F[i][m-1] = minv;
  F[i][maxJ] = tmp1;   
  F[i][minJ] = tmp2;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.11.2013, 14:50   #20
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

Вот теперь все верно,большое спасибо,не могли бы в кратце обьяснить что и как,именно с присваиванием максимального на 1-ый элемент,а минимальный на последний.
spectrum988 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу придумать доработку. Rik55rus Помощь студентам 1 06.10.2012 21:13
Не могу придумать формулу на нахождение среднего балла konistra Microsoft Office Excel 3 08.04.2011 08:57
Не могу придумать формулу для поставленной задачи. masaylov Microsoft Office Excel 6 07.04.2011 11:11
не могу придумать форрмулу!!! ta4ilka Microsoft Office Excel 3 11.04.2010 18:02
Не могу придумать или подобрать формулу! Помогите! Gnom70 Microsoft Office Excel 4 30.01.2008 11:01