Консультация № 189341
11.05.2016, 14:35
0.00 руб.
0 1 1
Здравствуйте! Уважаемые эксперты, помогите, пожалуйста!
Нужно написать функцию SortIndex(A, N), формирующую для вещественного массива A размера N массив указателей на элементы массива A в том порядке, который соответствует возрастанию элементов массива A (сам массив A при этом не изменяется). Массив указателей является выходным параметром. С помощью этой функции создать массивы указателей для массивов A, B, C размера NA, NB, NC соответственно.
Проблема возникла в следующем: функция, которая была мною написана, ничего не меняет и не выполняет поставленной задачи. Вот мой код:


Приложение:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
///SortIndex(float A,int N);

void SortIndex(double *A,int N)
{
double* cpy[N];
int i;
for (i=0;i<N;i++)
cpy[i]=(A+i);
for (i=0;i<N;i++) {
printf ("%lg",*cpy[i]);}
/// return *cpy;
}

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int i,N;
printf ("\n Введите N: ");
scanf ("%d",&N);
double A[N], B[N], C[N];
printf("Для массива A:\n");
for (i=0;i<N;i++)
{
printf ("\n[%d]=",i);
scanf ("%lg",&A[i]);
}
for (i=0;i<N;i++)
{
printf ("\n[%d]=%f",i,A[i]);

}
printf("\nДля массива B:\n");
for (i=0;i<N;i++)
{
printf ("\n[%d]=",i);
scanf ("%lg",&B[i]);
}

for (i=0;i<N;i++)
{
printf ("\n[%d]=%f",i,B[i]);

}
printf("\nДля массива C:\n");
for (i=0;i<N;i++)
{
printf ("\n[%d]=",i);
scanf ("%lg",&C[i]);
}
for (i=0;i<N;i++)
{
printf ("\n[%d]=%f",i,C[i]);

}
SortIndex(A,N);
SortIndex(B,N);
SortIndex(C,N);
system("pause");
return 0;
}

Обсуждение

давно
Посетитель
7438
7205
14.05.2016, 13:02
общий
это ответ
Здравствуйте, user8351!
Посмотрите, как я сделал.
Комментарии не писал. Мне кажется, что Вы и сами разберетесь...
Впрочем, если будут вопросы - милости просим в мини-форум...
[code h=200]
/*
Нужно написать функцию SortIndex(A, N),
формирующую для вещественного массива A размера N
массив указателей на элементы массива A в том порядке,
который соответствует возрастанию элементов массива A
(сам массив A при этом не изменяется).
Массив указателей является выходным параметром.
С помощью этой функции создать массивы указателей
для массивов A, B, C размера NA, NB, NC соответственно.
*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
///SortIndex(float A,int N);

int* SortIndex(double *A,int N)
{
int* cpy = new int[N];
int i, j;
double temp;

for (i=0;i<N;i++)
cpy[i] = i;
for (i=0;i<N-1;i++)
for (j=i;j<N;j++)
{
if (A[cpy[i]] > A[cpy[j]])
{
temp = cpy[i];
cpy[i]] = cpy[j];
cpy[j] = temp;
}
}
return cpy;
}

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

int i,NA, NB, NC;

printf ("Введите NA: ");
scanf ("%d",&NA);

double* A = new double[NA];

printf("Массив A:\n");
for (i=0;i<NA;i++)
{
printf ("A[%d]=",i);
scanf ("%lg",&A[i]);
}
for (i=0;i<NA;i++)
{
printf ("A[%d]=%.2f ",i,A[i]);
}

printf ("\nВведите NB: ");
scanf ("%d",&NB);

double* B = new double[NB];

printf("Массив B:\n");
for (i=0;i<NB;i++)
{
printf ("B[%d]=",i);
scanf ("%lg",&B[i]);
}
for (i=0;i<NB;i++)
{
printf ("B[%d]=%.2f ",i,B[i]);
}

printf ("\nВведите NC: ");
scanf ("%d",&NC);

double* C = new double[NC];

printf("Массив C:\n");
for (i=0;i<NC;i++)
{
printf ("C[%d]=",i);
scanf ("%lg",&C[i]);
}
for (i=0;i<NC;i++)
{
printf ("C[%d]=%.2f ",i,C[i]);
}

int *iA = SortIndex(A,NA);
int *iB = SortIndex(B,NB);
int *iC = SortIndex(C,NC);

printf("\n\nОтсортированные массивы:\nA:");
for (i=0;i<NA;i++)
printf ("%.2f ",A[iA[i]]);
printf("\nB:");
for (i=0;i<NB;i++)
printf ("%.2f ",B[iB[i]]);
printf("\nC:");
for (i=0;i<NC;i++)
printf ("%.2f ",C[iC[i]]);
printf("\n");

delete [] A;
delete [] B;
delete [] C;
delete [] iA;
delete [] iB;
delete [] iC;

system("pause");
return 0;
}
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа