Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [СИ] Массив, поменять местами строку 
V
    Опции темы
Steven
  Дата 19.12.2007, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 12.12.2007

Репутация: нет
Всего: нет



В двумерном N*K массиве целых чисел поменять местами строку, содержащую минимальный элемент массива, со строкой, содержащей максимальный элемент массива.

Код

#include <iostream>

const int MAX_SIZE = 5;

int B[MAX_SIZE][MAX_SIZE] = {0};

int max_x, max_y = 0;
int min_x, min_y = 0;

int main ()
{
    // ввод массива
    for ( int i = 0; i < MAX_SIZE; ++i)
    {
        for ( int j = 0; j < MAX_SIZE; ++j)
        {
            std::cin >> B[i][j];
        }
    }

    //поиск макс
    for ( int i = 0; i < MAX_SIZE; ++i)
    {
        for ( int j = 0; j < MAX_SIZE; ++j)
        {
            if ( B[i][j] > B[max_y][max_x] && B[i][j] % 2 != 0 )
            {
                max_y = i;
                max_x = j;
            }
        }
    }

    //поиск мин 
    for ( int i = 0; i < MAX_SIZE; ++i)
    {
        for ( int j = 0; j < MAX_SIZE; ++j)
        {
            if ( B[i][j] < B[min_y][min_x] && B[i][j] != 0 )
            {
                min_y = i;
                min_x = j;
            }
        }
    }

    // swap
    int tmp = B[max_y][max_x];
    B[max_y][max_x] = B[min_y][min_x];
    B[min_y][min_x] = tmp;



}


Правильный это код??? если да, то подпишите пожалуйста подробнее по операторам!
PM MAIL   Вверх
GoshaNahui
Дата 19.12.2007, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 19.12.2007

Репутация: нет
Всего: нет



неправильный. странные проверки на максимум и минимум
if ( B[i][j] > B[max_y][max_x] && B[i][j] % 2 != 0 )
а должно быть просто
if ( B[i][j] > B[max_y][max_x])

да и обмен через жопу
сам писал?
поправь, не сможешь - напиши и я поправлю

Это сообщение отредактировал(а) GoshaNahui - 19.12.2007, 22:42
PM MAIL   Вверх
Steven
Дата 19.12.2007, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 12.12.2007

Репутация: нет
Всего: нет



GoshaNahui
Помоги пожалуйста, у меня всякая фигня получается!!! smile 

Код

#include <iostream>

const int MAX_SIZE = 5;

int B[MAX_SIZE][MAX_SIZE] = {0};

int max_x, max_y = 0;
int min_x, min_y = 0;

int main ()
{
    // ввод массива
    for ( int i = 0; i < MAX_SIZE; ++i)
    {
        for ( int j = 0; j < MAX_SIZE; ++j)
        {
            std::cin >> B[i][j];
        }
    }

    //поиск макс
    for ( int i = 0; i < MAX_SIZE; ++i)
    {
        for ( int j = 0; j < MAX_SIZE; ++j)
        {
            if ( B[i][j] > B[max_y][max_x])
            {
                max_y = i;
                max_x = j;
            }
        }
    }

    //поиск мин 
    for ( int i = 0; i < MAX_SIZE; ++i)
    {
        for ( int j = 0; j < MAX_SIZE; ++j)
        {
            if ( B[i][j] > B[max_y][max_x])
            {
                min_y = i;
                min_x = j;
            }
        }
    }

    // swap
    int tmp = B[max_y][max_x];
    B[max_y][max_x] = B[min_y][min_x];
    B[min_y][min_x] = tmp;


}


Что это за ошибки: 
(22) : error C2374: 'i' : redefinition; multiple initialization
(13) : see declaration of 'i'
(35) : error C2374: 'i' : redefinition; multiple initialization
(53) : warning C4508: 'main' : function should return a value; 'void' return type assumed

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

Это сообщение отредактировал(а) Steven - 19.12.2007, 22:55
PM MAIL   Вверх
GoshaNahui
Дата 19.12.2007, 23:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 19.12.2007

Репутация: нет
Всего: нет



Для начала брось писать чушь. Если ты не умеешь кодить то для начала прочти хорошую книжку по Си
Но это потом, а пока:
Код
#include <iostream.h>
const int MAX_SIZE = 4;
int B[MAX_SIZE][MAX_SIZE];

int mx = 0, max_s = 0;
int mn = 0, min_s = 0;
int i, j;

int main (){
// ââîä ìàññèâà
  for (i = 0; i < MAX_SIZE; i++){
    for (j = 0; j < MAX_SIZE; j++)
      cin>>B[i][j];
      cout<<endl;
      }
//ïîèñê ìàêñ
  for (i = 0; i < MAX_SIZE; i++)
    for (j = 0; j < MAX_SIZE; j++)
      if (B[i][j] > mx){
        mx = B[i][j];
        max_s = i; /////////////////
        }
//ïîèñê ìèí
  for (i = 0; i < MAX_SIZE; i++)
    for (j = 0; j < MAX_SIZE; j++)
      if ( B[i][j] < mn){
        mn = B[i][j];
        min_s = i;
        }
  int temp[MAX_SIZE];
  for(i = 0; i < MAX_SIZE; i++) temp[i] = B[max_s][i];
  for(i = 0; i < MAX_SIZE; i++) B[max_s][i] = B[min_s][i];
  for(i = 0; i < MAX_SIZE; i++) B[min_s][i] = temp[i];

  for (i = 0; i < MAX_SIZE; i++){
    for (j = 0; j < MAX_SIZE; j++)
      cout<<B[i][j]<<" ";
      cout<<endl;
      }
  cin>>i;
}



код понятен или нужна растолковка операторов?

Это сообщение отредактировал(а) GoshaNahui - 19.12.2007, 23:06
PM MAIL   Вверх
Steven
  Дата 19.12.2007, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 12.12.2007

Репутация: нет
Всего: нет



GoshaNahui,
Если тебе не лень, то огромная посьба растолковать операторы! я просто только начинаю изучать, так что в голове у меня всякая чушь!!smile 
 
PM MAIL   Вверх
GoshaNahui
Дата 19.12.2007, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 19.12.2007

Репутация: нет
Всего: нет



Цитата
только начинаю изучать, так что в голове у меня всякая чушь!!

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

теперь в жопу прога:

Код

int main (){
  for (i = 0; i < MAX_SIZE; i++){  
    for (j = 0; j < MAX_SIZE; j++)
      cin>>B[i][j];
      cout<<endl;
      }

тута мы нах вводим массив. При каждом выполнении внешнего цикла сначала выполняется внутренний цикл, затем  в операторе 
cout<<endl; происходит перевод строки на новую, чтобы мы видели что вводим следующую строку
Код

  for (i = 0; i < MAX_SIZE; i++)
    for (j = 0; j < MAX_SIZE; j++)
      if (B[i][j] > mx){
        mx = B[i][j];
        max_s = i;
        }

тута просматриваем массив по строкам и столбцам, и если очередной элемент больше максимума то мы записываем в переменную mx значение элемента а в max_s пишем номер текущей строки, чтоб знать в какой строке максимум

потом то же самое для минимума

Код
  int temp[MAX_SIZE];
  for(i = 0; i < MAX_SIZE; i++) temp[i] = B[max_s][i];
  for(i = 0; i < MAX_SIZE; i++) B[max_s][i] = B[min_s][i];
  for(i = 0; i < MAX_SIZE; i++) B[min_s][i] = temp[i];

тут мы создаём одномерный массив - строчку. затем
for(i = 0; i < MAX_SIZE; i++) temp[i] = B[max_s][i]; - копируем в этот массив содержимое строчки с максимумом
for(i = 0; i < MAX_SIZE; i++) B[max_s][i] = B[min_s][i]; - заменяем строчку с максимумом на строчку с минимумом
for(i = 0; i < MAX_SIZE; i++) B[min_s][i] = temp[i]; - заменяем строчку с минимумом на содержимое массива, то есть на запомненную строчку с максимумом

Код
  for (i = 0; i < MAX_SIZE; i++){
    for (j = 0; j < MAX_SIZE; j++)
      cout<<B[i][j]<<" ";
      cout<<endl;
      }

а тут выводим массив. cout<<B[i][j]<<" "; выводит элемент и пробел после него
после вывода каждой строчки выполняется cout<<endl чтобы перевести строку

вот и всё... давай мля вперёд!
PM MAIL   Вверх
Steven
  Дата 20.12.2007, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 12.12.2007

Репутация: нет
Всего: нет



Код

#include <iostream.h>
const int MAX_SIZE = 4;
int B[MAX_SIZE][MAX_SIZE];



а можно сделать так, чтобы массив не ограничивался каким-то значением ???  smile (в данном случаи 4), а пользователь проги сам решал какой у него массив.
PM MAIL   Вверх
NiDaY
Дата 20.12.2007, 07:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 10.10.2007

Репутация: нет
Всего: нет



Цитата

N*K массиве

Steven у тебя для начала массив N*K, а не N*N!   N и K могут быть разными!

Добавлено @ 07:15
Код

#include <iostream>
#include <conio.h>
#define N 40
#define K 40
using namespace std;
int main ()
{
    int mass[N][K];
    int max_el=0, min_el=1000000;
    int num_str_max=0, num_str_min=0;
    int i, j, n ,k;
    cout<<"vvedite kolichestvo strok: ";
    cin>>n;
    while(1)
    {
        if((n>N)||(n<1))
        {
            cout<<"vvedite kolichestvo strok: ";
            cin>>n;
        }
        else
            break;
    }
    cout<<"vvedite kolichestvo stolbcov: ";
    cin>>k;
    while(1)
    {
        if((k>K)||(k<1))
        {
            cout<<"vvedite kolichestvo stolbcov: ";
            cin>>k;
        }
        else
            break;
    }
    cout<<endl; 
    for (i=0;i<n;i++)
    {
        for(j=0;j<k;j++)
        {
            cin>>mass[i][j];
        }
    }
    cout<<endl;
    for (i=0;i<n;i++)
    {
        for(j=0;j<k;j++)
        {
            printf("%6d",mass[i][j]);
        }
        cout<<endl;
    }
    for (i=0;i<n;i++)
    {
        for(j=0;j<k;j++)
        {
            if(mass[i][j]>max_el)
            {
                max_el=mass[i][j];
                num_str_max=i;
            }
        }
    }
    for (i=0;i<n;i++)
    {
        for(j=0;j<k;j++)
        {
            if(mass[i][j]<min_el)
            {
                min_el=mass[i][j];
                num_str_min=i;
            }
        }
    }
    int arr[K];
    for(j=0;j<k;j++)
    {
        arr[j]=mass[num_str_max][j];
    }
    for(j=0;j<k;j++)
    {
        mass[num_str_max][j]=mass[num_str_min][j];
        mass[num_str_min][j]=arr[j];
    }
    cout<<endl;
    for (i=0;i<n;i++)
    {
        for(j=0;j<k;j++)
        {
            printf("%6d",mass[i][j]);
        }
        cout<<endl;
    }
    getch();
    return 0;
}

Вот попробуй!

Это сообщение отредактировал(а) NiDaY - 20.12.2007, 07:31
PM MAIL   Вверх
Steven
  Дата 20.12.2007, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 12.12.2007

Репутация: нет
Всего: нет



Всем спасибо! smile  smile  smile 
Тема закрыта! topic is off
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1240 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.