powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Сортировка строк массива.
9 сообщений из 9, страница 1 из 1
Сортировка строк массива.
    #38966700
vincent111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дан массив целых чисел, где n- количество строк, m - столбцов.
Строки - это детали , столбцы - это этапы обработки.
Нужно чтобы сортировался исходный массив чисел по признаку (сортировались строки) : чем ближе по модулю среднее время детали tcp[i] (строки) к среднему времени второго этапа TcpII (среднее значение 2-го столбца).

Программа считает среднее время строк, среднее значение 2-го столбца. Проблема в том, что я не могу придумать как написать сортировку. То есть я придумал, но она не работает((.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define n 10 //строки
#define m 3 //столбцы
int main()
{
int i,j, temp, k;
int a[n][m];
int t[n];
float tcp[n], TcpII, q[n], p;



//FILE *in=fopen("C:\\Users\\Sergey\\Desktop\\filedata1.txt", "rt");
FILE *in=fopen("C:\\Users\\Sergey\\Desktop\\prog1\\data1.txt", "rt");

//FILE *in=fopen("C:\\Users\\Sergey\\Desktop\\prog1\\data1.txt", "rt");
//FILE *in = stdin;
//FILE *out=fopen("C:\Users\Sergey\Desktop\filedata2.txt", "wt");
//FILE *in;
//in = fopen("C:\Users\Sergey\Desktop\filedata1.txt","rt");

//memset(q,0,sizeof(q));

for (i=0;i < n;i++)
{
for (j=0;j < m;j++){
fscanf (in,"%d ",&a[i][j]);


printf ("%d", a[i][j]);
printf (" ");

}
printf("\n");
}


for(i=0;i < n;i++) //считает среднее время второго этапа
{
// fscanf(in,"%d",&a[i][1]);
// printf("a[i][1]= %d", a[i][1]);
// printf(" ;");

if (i>0){
t[i]=a[i][1]+t[i-1];;
}
else
{
t[i]=a[i][1];
}

// printf(" \n");
// printf("t[i]= %d\n", t[i]);
p=t[i];

}

TcpII=p/i;
printf("TcpII: %f\n", TcpII); //выводит среднее время второго этапа


for(i=0;i<n;i++) //считает среднее время каждой детали
{
for(j=0;j<m;j++)
{
fscanf(in,"%d",&a[i][j]);
if (j>0)
{
t[j]=a[i][j]+t[j-1];
}
else
{
t[j]=a[i][j];
}

p=t[j];
}
// printf("p= %d\n", p);
tcp[i]=p/j;
printf("tcp: %f\n", tcp[i]); //выводит значение среднего времени детали

}

for (i=0; i<n; i++)
{

q[i]=abs(TcpII - tcp[i]); //проверка на близость к значению среднего времени второго этапа
printf("%f\n", q[i]);
}







for(i=0;i<n;i++) //СОРТИРОВКА
{
k=0;


for(k=i;k<n;k++)
{

if(q[i]>q[k])
{

for(j=0;j<m;j++)
{
temp = a[i][j];
a[i][j] = a[k][j];
a[k][j] = temp;
//printf("a[i][j]= %d", a[i][j]);
}


}



}

}


for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("a[i][j]= %d", a[i][j]);
//printf("q= %f \n ", q[i]);
}
printf("\n");
}


//тут будет проверка на непересечение
//тут будет подсчет всего времени на каждом этапе и во











return(0);
}




на скрине видно что она неправильно сортирует
...
Рейтинг: 0 / 0
Сортировка строк массива.
    #38966706
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vincent111,

Не пиши сортировку сам, использую готовую.

qsort()
или
std::sort()
...
Рейтинг: 0 / 0
Сортировка строк массива.
    #38966712
vincent111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а как эту готовую использовать? я не очень силен в C, поэтому пользуюсь простыми циклами. Если не трудно - напиши как должна выглядеть сортировка с qsort
...
Рейтинг: 0 / 0
Сортировка строк массива.
    #38966729
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возьми любую сортировку с callback-функцией сравнения. А эту функцию (ранжирующую по отклонению) напиши сам.
...
Рейтинг: 0 / 0
Сортировка строк массива.
    #38966779
vincent111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. нужно записать цикл ( от 1 до n для строк) с qsort. А в самой qsort в конце указать функцию сортировки?

qsort(vector, 6, sizeof(int), compare);
compare - это та функция сортировки, которую нужно придумать?
...
Рейтинг: 0 / 0
Сортировка строк массива.
    #38966896
vincent111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
int compare(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}

qsort(a, n, sizeof(int), compare);



не могу понять как изменить функцию compare для моего примера
...
Рейтинг: 0 / 0
Сортировка строк массива.
    #38966967
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vincent111,

в твоем случае функция сравнения должна сравнивать между собой не элементы массива,
а их отклонения от предварительно вычисленной константы.
...
Рейтинг: 0 / 0
Сортировка строк массива.
    #38967171
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vincent111int compare(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}

qsort(a, n, sizeof(int), compare);



не могу понять как изменить функцию compare для моего примера


ну, тогда в школу, учиться...
Найди любой учебник, почитай...
...
Рейтинг: 0 / 0
Сортировка строк массива.
    #38968102
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перец успел закинуть удочки сюда

http://www.cyberforum.ru/c-beginners/thread1453977.html
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Сортировка строк массива.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]