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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2015, 14:53   #1
multimix
 
Регистрация: 22.05.2015
Сообщений: 4
По умолчанию Сортировка строк массива. Помогите.

Задача:
Дан массив целых чисел, где n- количество строк, m - столбцов.
Строки - это детали , столбцы - это этапы обработки.
Нужно чтобы сортировался исходный массив чисел по признаку (сортировались строки) : чем ближе по модулю среднее время детали (строки) к среднему времени второго этапа (среднее значение 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;
			while(k<n)
			{

			for(k=1;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;
							}
					
				
				}
			}
			
		 	}
		
		}	


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);
}


и вот вывод на экран ( конечно же не правильный). Помогите, а то я уже не успеваю.
Изображения
Тип файла: jpg Безымянный.jpg (11.1 Кб, 147 просмотров)

Последний раз редактировалось Stilet; 22.05.2015 в 14:56.
multimix вне форума Ответить с цитированием
Старый 23.05.2015, 01:05   #2
multimix
 
Регистрация: 22.05.2015
Сообщений: 4
По умолчанию

int compare(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}

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



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


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива строк МихаилБ Помощь студентам 2 25.06.2011 21:41
сортировка массива строк. daruwanov Общие вопросы C/C++ 6 21.09.2010 19:57
сортировка массива строк в Си SpLIne Общие вопросы C/C++ 2 15.04.2010 16:17
Сортировка строк двухмерного массива EfiopianDIMON Общие вопросы C/C++ 9 26.05.2009 22:52
Сортировка массива строк StanPBH Помощь студентам 9 24.04.2007 00:34