Помогите с лабой на массивы, Plz !

  • Автор темы nickatin
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

nickatin

#1
Дана матрица размером NxM. Упорядочить ее строки по возрастанию их
наибольших элементов.

Помогите, кто-нить !!!!! Напишите как она будет выглядеть в Buildere, а то одни ошибки и ничего .... B)
 
B

BreakPointMAN

#2
Для: nickatin
в чем именно проблема? а ты сам уже начал что-нибудь делать? есть какие-то наработки? покажи свой код... тогда посмотрим.
 
N

nickatin

#3
Вот собственно, что смог....
Для наглядности использовал в виде промеж. массивов StringGrid 2 и 3
В итоге выдаёт ошибку B)

Код:
//---------------------------------------------------------------------------
const Nmax=100;
typedef double mas2[Nmax][Nmax];
int N=5,M=8;

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Edit1->Text=FloatToStr(N);
Edit2->Text=FloatToStr(M);
StringGrid1->ColCount=N+1;
StringGrid1->RowCount=M+1;
StringGrid2->ColCount=N+1;
StringGrid2->RowCount=M+1;
StringGrid3->ColCount=N+1;
StringGrid3->RowCount=M+1;

StringGrid1->Cells[0][0]="Массив A";
for(int i=1; i<=N;i++)
StringGrid1->Cells[i][0]="i="+IntToStr(i);
for(int j=1; j<=M;j++)
StringGrid1->Cells[0][j]="j="+IntToStr(j);
for(int i=0; i<N;i++)
for(int j=0; j<M;j++)
StringGrid1->Cells[i+1][j+1]=rand()%100;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
N=StrToInt(Edit1->Text);
M=StrToInt(Edit2->Text);
StringGrid1->ColCount=N+1;
StringGrid1->RowCount=M+1;
StringGrid2->ColCount=N+1;
StringGrid2->RowCount=M+1;
StringGrid3->ColCount=N+1;
StringGrid3->RowCount=M+1;
StringGrid1->Cells[0][0]="Массив A";
for(int i=1; i<=N;i++)
StringGrid1->Cells[i][0]="i="+IntToStr(i);
for(int j=1; j<=M;j++)
StringGrid1->Cells[0][j]="j="+IntToStr(j);
for(int i=0; i<N;i++)
for(int j=0; j<M;j++)
{
StringGrid1->Cells[i+1][j+1]=rand()%100;
StringGrid2->Cells[i+1][j+1]=StringGrid1->Cells[i+1][j+1];
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
int max1,max2,max3,k=1,min1,nstr;

max1=StrToInt(StringGrid1->Cells[1][1]);
for(int j=1; j<=M; j++)
{
for(int i=0; i<N; i++)
{
if (max1 < StrToInt(StringGrid1->Cells[i+1][j]))

 max1=StrToInt(StringGrid1->Cells[i+1][j]);
}
StringGrid3->Cells[1][k]=IntToStr(max1);
StringGrid3->Cells[2][k]=IntToStr(j);
k+=1;
max1=0;
}

min1=StrToInt(StringGrid3->Cells[1][1]);
for(int i=1; i<=N; i++)
{
for(int j=0; j<=M; j++)
{
if (min1 > StrToInt(StringGrid3->Cells[1][j+1]))
{
min1=StrToInt(StringGrid3->Cells[1][j+1]);
nstr=StrToInt(StringGrid3->Cells[2][j+1]);
}
}
 for (int l=1; l<=N; l++)
 StringGrid1->Cells[l][1]=StringGrid1->Cells[l][nstr];
}
}
//---------------------------------------------------------------------------
 
G

Guest

#4
#include <algorithm>

........................................................

double mas[Nmax][Nmax];
int N=5,M=8;

for (int i=0; i<N; i++)
 
G

Guest

#5
#include <algorithm>

........................................................

double mas[Nmax][Nmax];
int N=5,M=8;

for (int i=0; i<N; i++)
sort(mas+i, mas+i+M);

Вроде так.
Сортировка массива по возрастанию элементов в строках
 
K

KmeT

#6
#include <algorithm>

........................................................

double mas[Nmax][Nmax];
int N=5,M=8;

for (int i=0; i<N; i++)
sort(mas+i, mas+i+M);

Вроде так.
Сортировка массива по возрастанию элементов в строках
 
D

DAle

#7
<!--QuoteBegin-KmeT+21:12:2005, 04:54 -->
<span class="vbquote">(KmeT @ 21:12:2005, 04:54 )</span><!--QuoteEBegin-->#include <algorithm>

........................................................

double mas[Nmax][Nmax];
int N=5,M=8;

for (int i=0; i<N; i++)
sort(mas+i, mas+i+M);

Вроде так.
Сортировка массива по возрастанию элементов в строках
[snapback]28615" rel="nofollow" target="_blank[/snapback]​
[/quote]

Не, не так. Надо хотя бы
std::sort(mas, mas+M);
 
K

KmeT

#8
Не, не так. Надо хотя бы
std::sort(mas, mas+M);


mas > double
mas+M > double тоже.

sort(double, double)?

имхо, в sort либо иттератор либо укзатель передются

хотя я все равно ошибся

sort(mas+i*N, mas+i*N+M);
 
D

DAle

#9
<!--QuoteBegin-KmeT+24:12:2005, 04:37 -->
<span class="vbquote">(KmeT @ 24:12:2005, 04:37 )</span><!--QuoteEBegin-->mas > double
mas+M > double тоже.

sort(double, double)?

имхо, в sort либо иттератор либо укзатель передются

хотя я все равно ошибся

sort(mas+i*N, mas+i*N+M);
[snapback]28717" rel="nofollow" target="_blank[/snapback]​
[/quote]

Ты теперь ошибся вообще во всем, что написал.
mas при использовании в выражениях неявно преобразуется в указатель на double[Nmax] (в общем случае, если x - имя n-мерного массива, то оно неявно преобразуется к указателю на n-1-мерный массив). mas - эквивалентно *(mas+i).
sort(mas+i*N, mas+i*N+M) было бы верно, если бы mas имел тип double*. А в данном случае mas+1 отличается от mas как минимум на Nmax*sizeof(double).
 
N

nickatin

#10
Спасибо конечно, но я уже сам разобрался :D
PS пробовал я с sort() , так Builder воще ругается и ничего не делает

Вот, что получилось........

//---------------------------------------------------------------------------
const Nmax=100;
typedef double mas2[Nmax][Nmax];
int N=5,M=8 ;

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Edit1->Text=FloatToStr(N);
Edit2->Text=FloatToStr(M);
StringGrid1->ColCount=N+1;
StringGrid1->RowCount=M+1;


StringGrid1->Cells[0][0]="Массив A";
for(int i=1; i<=N;i++)
StringGrid1->Cells[0]="i="+IntToStr(i);
for(int j=1; j<=M;j++)
StringGrid1->Cells[0][j]="j="+IntToStr(j);
for(int i=0; i<N;i++)
for(int j=0; j<M;j++)
StringGrid1->Cells[i+1][j+1]=rand()%100;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
N=StrToInt(Edit1->Text);
M=StrToInt(Edit2->Text);
StringGrid1->ColCount=N+1;
StringGrid1->RowCount=M+1;
StringGrid1->Cells[0][0]="Массив A";
for(int i=1; i<=N;i++)
StringGrid1->Cells[0]="i="+IntToStr(i);
for(int j=1; j<=M;j++)
StringGrid1->Cells[0][j]="j="+IntToStr(j);
for(int i=0; i<N;i++)
for(int j=0; j<M;j++)
{
StringGrid1->Cells[i+1][j+1]=rand()%100;

}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
int i,j,k,l,max1,max2,buf1,b;
for(b=1;b<=M;b++)
{
for(j=1;j<M;j++)
{
max1=StrToInt(StringGrid1->Cells[1][j]);
max2=StrToInt(StringGrid1->Cells[1][j+1]);
for(i=1;i<=N;i++)
if (StrToInt(StringGrid1->Cells[j])>max1)
max1=StrToInt(StringGrid1->Cells[j]);
for(k=1;k<=N;k++)
if (StrToInt(StringGrid1->Cells[k][j+1])>max2)
max2=StrToInt(StringGrid1->Cells[k][j+1]);
if (max1>max2)
{
for(l=1;l<=N;l++)
{
buf1=StrToInt(StringGrid1->Cells[l][j]);
StringGrid1->Cells[l][j]=StringGrid1->Cells[l][j+1];
StringGrid1->Cells[l][j+1]=IntToStr(buf1);
}
}
}
}
}

//---------------------------------------------------------------------------
 
S

sup.by

#11
........ такое очучение что эфорум на этом сайте посещают только студенты ... которым самим впадлу лабы делать .... помогите с лабой(Системное программирование ......)
 
Статус
Закрыто для дальнейших ответов.