ОБСУЖДЕНИЕ

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

10 ответов 8,7 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Статус
Закрыто для дальнейших ответов.
Автор темы
Дана матрица размером NxM. Упорядочить ее строки по возрастанию их
наибольших элементов.

Помогите, кто-нить !!!!! Напишите как она будет выглядеть в Buildere, а то одни ошибки и ничего .... B)
 
Для: nickatin
в чем именно проблема? а ты сам уже начал что-нибудь делать? есть какие-то наработки? покажи свой код... тогда посмотрим.
 
Вот собственно, что смог....
Для наглядности использовал в виде промеж. массивов 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];
}
}
//---------------------------------------------------------------------------
 
#include <algorithm>

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

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

for (int i=0; i<N; i++)
 
#include <algorithm>

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

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

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

Вроде так.
Сортировка массива по возрастанию элементов в строках
 
#include <algorithm>

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

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

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

Вроде так.
Сортировка массива по возрастанию элементов в строках
 
<!--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);
 
Не, не так. Надо хотя бы
std::sort(mas, mas+M);


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

sort(double, double)?

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

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

sort(mas+i*N, mas+i*N+M);
 
<!--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).
 
Спасибо конечно, но я уже сам разобрался :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);
}
}
}
}
}

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