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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2011, 18:09   #1
Shev
 
Регистрация: 06.06.2011
Сообщений: 3
По умолчанию Двумерный массив (сортировка)

Всем привет!
У меня проблема с написанием программы. Для кого то она наверняка покажется банальной и простой, но для меня пока и она не под силу. Нужно написать программу сортировки двумерного массива. Нечётные строки по возрастанию, чётные по убыванию. Проблема в том, что программа неправильно сортирует введённые данные. Прошу помощи и заранее благодарен за помощь.
Код:
#include <stdio.h>
#include <conio.h>
#define r 4
#define c 5
int i, j;
float a[r][c], buf;
void main()
{
clrscr();
for (i = 1; i <= r; i++)
for (j = 1; j <= c; j++)
 {
  if (j==1) printf ("\n");
  printf ("a[%i][%i]= ", i, j);
  scanf ("%f", &a[i][j]);
 }
  if (i%10==5);
  {
   for (i = r - 1; i >= 1; i--)
   for (j = 0; j < i; j++)
   {
    if (a[i][j] >= a[i][j+1])
    {
     buf = a[i][j];
     a[i][j] = 0;
     a[i][j] = a[i][j+1];
     a[i][j+1] = 0;
     a[i][j+1] = buf;
    }
   }
     {
      for (i = 1; i <= r; i++)
      for (j = 1; j <= c; j++)
      {
       if (j==1) printf ("\n");
       {
	printf ("%2.0f", a[i][j]);
       }
      }
     }
  }
getch();
}

Последний раз редактировалось Shev; 06.06.2011 в 18:24.
Shev вне форума Ответить с цитированием
Старый 06.06.2011, 18:14   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Используйте тег [CODE] (значок #), а не цитату для сохранения форматирования и подсветки кода в сообщении. Пожалуйста.

Код:
for (i = 1; i <= r; i++)
{
   printf('\n');
   for (j = 1; j <= c; j++)
   {
      printf ("a[%i][%i]= ", i, j);
      scanf ("%f", &a[i][j]);
   }
}
Ввод лучше как-то так. Дальше не смотрел пока.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 06.06.2011 в 18:18.
Alex11223 вне форума Ответить с цитированием
Старый 11.06.2011, 13:26   #3
Shev
 
Регистрация: 06.06.2011
Сообщений: 3
По умолчанию

В программке были обнаружены грубые ошибки, вот рабочий вариант (может пригодится кому).
Код:
#include <stdio.h>
#include <conio.h>
#define r 4
#define c 5
int i, j, k;
float a[r][c], buf;
void main ()
{
 clrscr();
 printf ("\t\t\t\~Vvedite matricu:\~\n");
 // Zapolnyaem massiv
 for (i = 1; i <= r; i++)
 for (j = 1; j <= c; j++)
   {
    printf ("a[%i][%i]=", i, j);
    scanf ("%f", &a[i-1][j-1]);
   }
    printf("\nZapolnennaya matrica:\n");
    for (i = 0; i < r; i++)
      {
       for (j = 0; j < c; j++)
       printf ("%.2f ", a[i][j]);
       printf("\n");
      }
       //Sortirovka
       for (i = 0; i < r; i++)
	 {
	  if ((i+1)%2==0)
	    {
	     for (j = 0; j < c-1; j++)
	     for (k = j+1; k < c; k++)
	       {
		if (a[i][j] < a[i][k])
		  {
		   buf = a[i][j];
		   a[i][j] = a[i][k];
		   a[i][k] = buf;
		  }
	       }
	    }else
	    {
	     for (j = 0; j < c-1; j++)
	     for (k = j+1; k < c; k++)
	       {
		if (a[i][j] > a[i][k])
		  {
		   buf = a[i][j];
		   a[i][j] = a[i][k];
		   a[i][k] = buf;

		  }
	       }
	    }
      }
       printf ("\nOtsortirovannaya matrica\n");
       for (i = 0; i < r; i++)
	 {
	  for (j = 0; j < c; j++)
	  printf ("%.2f ", a[i][j]);
	  printf("\n");
	 }
getch ();
}

Последний раз редактировалось Shev; 11.06.2011 в 13:33.
Shev вне форума Ответить с цитированием
Старый 11.06.2011, 13:34   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

В С/С++ массивы же с 0, а не 1 начинаются.
Не очень понял, как вы сортировали, но я бы как-то так делал (писал в блокноте, мб где-то ошибся)
Код:
for (i=0; i<=r; i++)
{
     if (i%2 == 0)  
         for (j=0; j<c; j++)
             for (k=0; k<c; j++)
                 if(a[i][k] < a[i][k+1]
                 {
                    buf=a[i][k];
                    a[i][k]=a[i][k+1];
                    a[i][k+1]=buf;
                  }
      else
          for (j=0; j<c; j++)
             for (k=0; k<c; j++)
                 if(a[i][k] > a[i][k+1]
                 {
                    buf=a[i][k];
                    a[i][k]=a[i][k+1];
                    a[i][k+1]=buf;
                  }
upd: о, уже сами решили
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 11.06.2011, 13:41   #5
Shev
 
Регистрация: 06.06.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
В С/С++ массивы же с 0, а не 1 начинаются.
.....
upd: о, уже сами решили
Писал, наверное, я на не очень трезвую голову, так как ошибки были даже в синтаксисе. Уже не говорю о сортировке. Конечно, сортировку додумал не я, мне указали на недочёты, которые, как оказалось, сыграли свою роль...
Shev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерный массив и Двумерный массив eugene1437 Общие вопросы C/C++ 15 25.05.2011 19:17
Двумерный массив Delphi(Пузырьковая сортировка) Пьеро Помощь студентам 2 13.12.2010 22:54
Двумерный массив, сортировка по условию. Переделать решение. zetwer Помощь студентам 0 28.05.2010 00:22
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57