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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2009, 15:18   #1
sder33333
 
Регистрация: 29.03.2009
Сообщений: 3
По умолчанию Помогите пожалуйста с задачей на с++!!!!! Очень буду благодарен!!!

Нужно отсортировать по неубыванию квадратную матрицу по спирали, начиная от левого верхнего угла и по часовой стрелке... методом сортировки подсчетом!!! Пожалуйста, помогите, кто сможет!!!! Буду очень благодарен!!!!
sder33333 вне форума Ответить с цитированием
Старый 29.03.2009, 15:25   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Сначала проводите сортировку подсчетом (без вывода).
Потом выводите матрицу по спирали. Пользуйтесь поиском и найдете код вывода.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 29.03.2009, 15:36   #3
sder33333
 
Регистрация: 29.03.2009
Сообщений: 3
По умолчанию

напишите код сортировки подсчетом матрицы, пожалуйста???
sder33333 вне форума Ответить с цитированием
Старый 29.03.2009, 15:52   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот вам пример. Матрица заполняется случайными числами.
Сортируется и выводится в строку.
Код:
uses crt;
const n=5;
var
a : array[1..n,1..n] of integer;
mas : array[1..1000] of integer;
i, j,max : integer;

begin
clrscr;
randomize;
{ заполняем матрицу }
for i:=1 to n do
 begin
 for j:=1 to n do
  begin
  a[i,j] := random(100);
  write(a[i,j]:4);
  end;
 writeln;
 end;
writeln;
{-}
max := a[1,1];
 { находим максимум в матрице }
for i:=1 to n do
 for j:=1 to n do
  if a[i,j]>max then max := a[i,j];
 { зануляем элементы массива }
for i:=1 to max do
 mas[i] := 0;
 { заполняем массив }
for i:=1 to n do
 for j:=1 to n do
  inc(mas[a[i,j]]);
{ выводим }
for i:= 1 to max do
 begin
 for j:=1 to mas[i] do
  write(i:4);
 end;

readln;
end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 29.03.2009, 17:58   #5
sder33333
 
Регистрация: 29.03.2009
Сообщений: 3
По умолчанию

у меня есть код программы, где спираль идет против часовой стрелки, но она не работает... вернее работает, но выдает всякую чушь... помогите найти ошибки, пожалуйста!!!
здесь сразу по местоположению на спирали определяются индексы элемента и потом идет сортировка подсчетом. матрица заполняется их файлов.
формулы преобразования в индексы, процедура transform - правильные, все проверено. помогите пожалуйста с их помощью отсортировать матрицу!!!

Код:
#include<iostream.h>
#include<fstream.h>
#include<conio.h>
#include<string.h>
#include<process.h>
#include<iomanip.h>
#include<stdio.h>
#include<math.h>

const Nmax=100; 

void transform(int n,float k,int &i,int &j)
{ 
  int k2;
  int l;
  int i1,j1;
  int max,min;
  int num;

  k2=(n)*(n)-k;

  if ((n)%2==0)
  { 
    l=ceil(sqrt(k2)/2);          
    min=4*l*l-8*l+5;             
    max=4*l*l;                   
    num=ceil((max-k2)/(2*l-1))+1;
    i1=floor((n-1)/2)+1-l;       
    j1=floor((n-1)/2)+1-l;

    switch (num)
    {
      case 1:
	i=i1+max-k2;
	j=j1;
	break;
      case 2:
	i=i1+2*l-1;
	j=j1+(max-k2)%(2*l-1);
	break;
      case 4:
	i=i1;
	j=j1+k2-min+1;
	break;
      case 3:
	j=j1+2*l-1;
	if (((max-k2)/(2*l-1)==2) && ((max-k2)%(2*l-1)==0))
	  j=i;
	else
	  i=i1+(k2-min+1)%(2*l-1);
	break;
    };
  }
  else
  {
    if (k2==1)
    { 
      i=(n-1)/2;
      j=(n-1)/2;
      return;
    }

    l=ceil((sqrt(k2)-1)/2)+1;
    max=4*l*l-4*l+1;
    num=ceil(float((max-k2))/(2*l-2));
    min=4*l*l-12*l+10;
    i1=floor((n-1)/2)+1-l;
    j1=floor((n-1)/2)+1-l;
    if (max==k2)
    { 
      i=i1;
      j=j1;
      return;
    }
    switch (num)
    {
      case 1:
	i=i1+max-k2;
	j=j1;
	break;
      case 2:
	i=i1+2*l-2;
	j=j1+max-k2-2*l+2;
	break;
      case 3:
	j=j1+2*l-2;
	i=i1+k2-min-2*l+3;
	break;
      case 4:
	j=j1+k2-min+1;
	i=i1;
	break;
    }
  }
  return ;
}

void Sort(float a[Nmax][Nmax],int n)
{ 
  float b[Nmax*Nmax];
  float c[Nmax*Nmax+1];
  int i,j;
  for (i=0;i<=Nmax;i++)*
    c[i]=0;

  i=0;
  j=0;
  float count=0;
  while (count<=n*n-1)
  {  transform(n,count,i,j);
     c[a[i][j]]=c[a[i][j]]+1;
     count++;
  }

  for (i=1;i<=Nmax;i++)
    c[i]=c[i-1]+c[i];

  i=0;
  j=0;
  count=n+n-1;
  while (count>=0)
  {
    transform(n,count,i,j);
    b[c[a[i][j]]-1]=a[i][j];
    c[a[i][j]]=c[a[i][j]]-1;
    count--;
  }

  i=0;
  j=0;
  count=0;
  while (count<=n*n-1)
  { transform(n,count,i,j);
    a[i][j]=b[count];
    count++;
  }
} 

void ReadingFile(float mas[Nmax][Nmax],int &count)
{ //file
  char name[10];
  printf("\n Введите имя файла: \n");
  scanf("%s",&name);
  ifstream file(name);
  file>>count;*
  int i,j;
  for(i=0; i<count; i++)
    for(j=0; j<count; j++)
      file>>mas[i][j];
  file.close();
} 

void Outmas(float mas[Nmax][Nmax],int n)
{ 
  int i,j;
  for (i=0;i<=n-1;i++)
  { for (j=0;j<=n-1;j++)
      printf("%6.0f",mas[i][j]);
    printf("\n");
  }
} 

void main()
{ 
  float
    a[Nmax][Nmax];

  int n;
  
  clrscr();

  printf("\n1.File1.txt");
  printf("\n2.File2.txt");
  printf("\n3.File3.txt");
  printf("\n4.File4.txt");
  printf("\n5.File5.txt");

  ReadingFile(a,n);

  printf("\n Исходный массив: \n");
  Outmas(a,n);

  Sort(a,n);

  printf("\n Полученная матрица: \n");
  Outmas(a,n);
}

Последний раз редактировалось sder33333; 29.03.2009 в 18:08.
sder33333 вне форума Ответить с цитированием
Старый 29.03.2009, 18:50   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

В предоставленном вами коде не разбирался.
Код:
#include <iostream>
#include <conio.h>
#include <time.h>
using namespace std;

//--------

int main()
{
const int N=5;
int M[N][N];
int mas[1000];
int mas2[N*N];
int i,j,max;
int L,R,T,B;
int Gk;

srand(time(NULL));

for(i=0;i<N;i++)
 {
  for(j=0;j<N;j++)
   {
    M[i][j] = rand()%100;
    cout.width(4);
    cout<<M[i][j];
   }
  cout<<endl;
 }
cout<<endl;
//-----------------
max = M[0][0];
for(i=0;i<N;i++)
 for(j=0;j<N;j++)
  if(M[i][j]>max) max = M[i][j];
//--
for(i=0;i<=max;i++)
 mas[i] = 0;

for(i=0;i<N;i++)
 for(j=0;j<N;j++)
  mas[M[i][j]]++;

Gk = 0;
for(i=0;i<=max;i++)
 for(j=0;j<mas[i];j++)
 {
  mas2[Gk++] = i;
 }

//--------------------
L = 0;
R = N-1;
T = 0;
B = N-1;

Gk =0;
while(Gk<N*N-1)
 {
  for(j=L;j<R;j++)
   M[T][j] = mas2[Gk++];
  for(i=T;i<B;i++)
   M[i][R] = mas2[Gk++];
  for(j=R;j>L;j--)
   M[B][j] = mas2[Gk++];
  for(i=B;i>T;i--)
   M[i][L] = mas2[Gk++];

   L++;
   R--;
   T++;
   B--;
 }
M[T][L]=mas2[Gk];

for(i=0;i<N;i++)
 {
  for(j=0;j<N;j++)
  {
   cout.width(4);
   cout<<M[i][j];
  }
 cout<<endl;
}
getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль Задачи. примерно 10 буду рад если решите... желательно с блок схемами. Буду сильно благодарен. Азарт Помощь студентам 8 26.03.2009 23:51
2 задачи по файлам. Буду очень благодарен! RomT24 Помощь студентам 2 11.03.2009 11:40
ПОМОГИТЕ С ЗАДАЧЕЙ.Буду благодарен n1ce > Kuzia Паскаль, Turbo Pascal, PascalABC.NET 1 12.01.2009 12:48
ПОМОГИТЕ С ЗАДАЧЕЙ.Буду благодарен n1ce > Kuzia Паскаль, Turbo Pascal, PascalABC.NET 1 09.01.2009 21:18
помогите решить задачи в делфи буду очень благодарен пыхонин филипп Помощь студентам 4 05.01.2009 23:24