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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двумерный массив, Сортировка методом пузырька 
:(
    Опции темы
ldsdilim
Дата 19.4.2007, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Люди кто сможет переделать сортировку в моей проге как в одномерном массиве, например
Исходный массив :
2 6 4
5 3 1
8 9 2
Конечный массив :
1 2 2
3 4 5
6 8 9
а то у меня никак не выходит.
Код

#include <iostream.h>
#include <conio.h>
#include<stdlib.h>
void main(void)
{
   clrscr();
   //создание
int r, c;
cout << "Введите количество строк массива";
cin >> r;
cout << "Введите количество столбцов массива";
cin >> c;
   int **a = new int *[r];
   for (int i = 0; i < r; i++)
      a[i] = new int[c];
   //заполнение
   for (i = 0; i < r; i++)
      for (int j = 0; j < c; j++)
     a[i][j] = random(3) + 2 ;
   //вывод
   for (i = 0; i < r; i++)
   {
      for (j = 0; j < c; j++)
     cout << a[i][j] << " ";
      cout << "\n";
   }
   //сортировка
   int elem, bufelem;
   for (i = 0; i < r; i++)
      for (j = 0; j < c; j++)
      {
     elem = a[i][j];
     bufelem = a[i][j+1];
     if(elem > bufelem)
     {
           int temp ;
           temp = a[i][j];
           a[i][j]=a[i][j+1];
           a[i][j+1]=temp;
     }
      }
      cout << "\n-----------------------\n";
    //вывод
   for (i = 0; i < r; i++)
   {
      for (j = 0; j < c; j++)
     cout << a[i][j] << " ";
      cout << "\n";
   }
   getch();
}


PM MAIL   Вверх
Maxx
Дата 20.4.2007, 04:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А разве пузырек за один проход сортируется? Максимум, в твоем случа r+c. Минимум - смотри были ли обмены, если не было, прекращай сортировку.
PM MAIL   Вверх
ldsdilim
Дата 20.4.2007, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да конечно за один проход пузырек не прокатит. 
Максимум, в твоем случа r+c. Минимум - смотри были ли обмены, если не было, прекращай сортировку.
Можешь написать это кодом?
PM MAIL   Вверх
ldsdilim
Дата 20.4.2007, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня вот че получилось,  но не выводит результат, а ошибку найти не могу :
Код

#include <iostream.h>
#include <conio.h>
#include<stdlib.h>
void zapolnenie(int **a, int nrow, int ncol)
   {
   for (int i = 1; i <= nrow; i++)
        for (int j = 1; j <= ncol; j++)
        a[i][j] = random(3) - 2 ;
   }
void main(void)
{
   
   int r = 200, c = 100;
   //память
   int **a = new int *[r];
   for (int i = 0; i < r; i++)
   a[i] = new int[c];
   zapolnenie(a, r, c);
   [color=blue]/*-----------------------------------------------------------*/
   int i1, j1, pr1, pr2, ik, jk, min,mn, bf;
   for(i = 0; i < r; i++)
   {
      for(int j = 0; j < c; j++)
      {
     ik = 0;
     jk = 0;
     min = a[i][j];
     j1 = j + 1;
     for(j1 = 1; j1 < 100; j1++)
     {
        if (min>a[i][j1])
        {
           min = a[i][j1];
           pr1 = j1;
        }
     }
     a[i][pr1] = a[i][j];
     a[i][j]=min;
      }

   }
   for(i = 0; i < r; i++)
   {
      mn = *a[i];
      min=a[i][1];
      i1 = i+1;
      for(int i1 = 0; i1 < r; i++)
      {
     if (min>a[i1][1])
     {
        mn = *a[i1];
        min = a[i1][1];
        pr1 = i1;
     }

      }
      a[pr1] = a[i];
      *a[i] = mn;
   }
   /*-----------------------------------------------------------*/[/color]   
for (i = 0; i < 10; i++)
   {
      for (int j = 0; j < 20; j++)
     cout << a[i][j] << " ";
      cout << "\n";
   }  
   while (!kbhit()) ;
}

И если понадобиться полное задание :
С помощью динамических переменных реализуйте вещественную матрицу размером
100 на 200.  Отсортируйте элементы массива по сквозному порядку их
размещения в матрице как в одномерном массиве. Выдайте на экран первую
подматрицу размером 10 на 20. Для сортировки используйте метод пузырька.

PM MAIL   Вверх
betal
Дата 20.4.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Maxx @  20.4.2007,  04:33 Найти цитируемый пост)
А разве пузырек за один проход сортируется? 

то скорее всего он хотел показать примеры на разных массивах )))

Добавлено @ 11:58
Цитата(ldsdilim @  19.4.2007,  23:16 Найти цитируемый пост)
Люди кто сможет переделать сортировку в моей проге как в одномерном массиве, например
Исходный массив :
2 6 4
5 3 1
8 9 2
Конечный массив :
1 2 2
3 4 5
6 8 9
а то у меня никак не выходит.

погодь ты могешь нормально сказать ? Те нужна функция сортирующяя методом пузырька по возростанию 2х мерный массив ???


если я тя прально понял то оть
Код

#include <conio.h>
# include <stdio.h>
#include <time.h>
#include <iostream.h>
#include <windows.h>
int Sozd(int **B,int n,int m)
{

for (int i=0; i<n; i++)
  {for (int j=0; j<m; j++)
{ B[i][j]=rand()%25;

}
}return **B;
}

int zamena(int **A,int n,int *B)
{
int k=0;
for (int i=0; i<n; i++)
  {for (int j=0; j<n; j++)
{  B[k]=A[i][j];
          k++;}
}return *B;
}



int sort(int c[],int n)
{ int hold;
//----------=)
for (int pass = 1; pass <=n - 1; pass++)
            for (int i=0; i<=n - 2; i++)

    if(c[i] > c[i + 1])
        {
            hold = c[i];
            c[i]=c[i + 1];
            c[i + 1]=hold;
        }

return *c;
}

void vuvod(int **B,int n,int m)
{


for (int i=0; i<n; i++)
{
    printf("\n");
for (int j=0; j<m; j++)
{printf("%5.1d",B[i][j]);
    
}}
cout<< "\n";
}
void main() 
{
 int i;
  int n=0;



int **A = new int *[5];
if (A!=NULL)
for ( i=0; i<5; i++)
    {
        A[i] = new int[5];
    if(A[i]==NULL)
        {    
            cout<<"exit "<<i;exit(1);
        }
    }

srand((unsigned)time(NULL));

    **A=Sozd(A,5,5);

    vuvod(A,5,5);

cout<<"\n";

int k=0;
int *B = new int [5*5];
    for ( i=0; i<5; i++)
        {
            for (int j=0; j<5; j++)
            {B[k]=A[i][j];k++;}
                                
                        
                    
        }

 cout<<"\n";
     printf("\t\n\n Vector B\n");
 
    printf("\t\n\n Vector B otsortirovan\n");
*B=sort(B,5*5);
int h=0;
for ( i=0; i<5; i++)
        
            for (int j=0; j<5; j++)
            {A[i][j] =B[h];
            h++;
            }
                vuvod(A,5,5);

cout<<"\n";

 delete []A;
delete []B;
}


 smile 

Это сообщение отредактировал(а) betal - 20.4.2007, 12:21
--------------------
101100010100001101100001110100101111011легкие деньги
PM WWW ICQ   Вверх
Валерия
Дата 20.4.2007, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код
#include <stdio.h>
#include <conio.h>

void main(){
    int m[][3]={{2,6,4},{5,3,1},{8,9,2}};
    int i, j, temp;

    clrscr();

    for (i=0;i<3;i++){
        for (j=0;j<3;j++){
            printf("%d ", m[i][j]);
        }
        printf("\n");
    }

    for (i=0;i<9;i++){
        for (j=0;j<9;j++){
            if (m[0][i]<m[0][j]){
                temp=m[0][i];
                m[0][i]=m[0][j];
                m[0][j]=temp;
            }
        }
    }

    printf("\n");

    for (i=0;i<3;i++){
        for (j=0;j<3;j++){
            printf("%d ", m[i][j]);
        }
        printf("\n");
    }

    getch();
}


Под досовским компилером 3.0 точно работает smile
PM MAIL   Вверх
ldsdilim
Дата 22.4.2007, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я вчера сделал эту задачу, но написать не мог инет-карта закончилась, всем кто помог спасибо. Вот код:

Код

# include <iostream.h>
# include <conio.h>
# include <stdio.h>
# include <stdlib.h>
# include <dos.h>
int** sort(int** ms)

int prv=1; int buf=0;
int ik=0; int jk=0;
while (prv)

prv=0;
for (int i=0; i<200; i++)

for (int j=0; j<100; j++)

if ((i==199)&&(j==99)) break;
if (j!=99) ik=i; jk=j+1;
else ik=i+1; jk=0;
if (ms[i][j]>ms[ik][jk])

    buf=ms[i][j];
    ms[i][j]=ms[ik][jk];
    ms[ik][jk]=buf;
    prv=1;




return ms;

void main (void)

clrscr();
randomize();
int** mas = new int*[200];
for (int i=0;i<200;i++)

mas[i]=new int[100];
for (int j=0;j<100;j++) mas[i][j]=random(999);

cout<<"\nИсходная подматрица\n"; for (i=0; i<20; i++)

    for (int j=0; j<10; j++)    printf("%4d|",mas[i][j]);    cout<<"\n";

    cout<<"\n";
    mas=sort(mas);
    getch();
    cout<<"\nПодматрица после сортировки\n";    for (i=0; i<20; i++)
    
    for (int j=0; j<10; j++)    printf("%4d|",mas[i][j]);
    cout<<"\n";
    
    delete[]mas; 
getch();

 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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