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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2017, 11:14   #1
laketych
Пользователь
 
Регистрация: 22.12.2015
Сообщений: 37
По умолчанию Функция не правильно сортирует массив (Си)

Функция не правильно сортирует массив (Си)

Сортировка пузырьком - routSorting;

Код:
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define SIZE 5

struct ROUT
{
	char beginRout[10];
	char endRout[10];
	int numberRout;
};

void routInit(struct ROUT *, int );
void showMass(struct ROUT * , int );
void routSorting(struct ROUT *, int );


int main()
{
	int i;
	int choise = 1;
	srand(time(NULL));


	struct ROUT mas1[SIZE];
	struct ROUT mas2[SIZE];


	routInit(mas1, SIZE);
	printf("Initial array\n");
	showMass(mas1, SIZE);


	FILE *f = NULL;
	if ((f = fopen("temp.txt", "w")) == NULL) {
		fprintf(stderr, "Error, fille canot be created\n");
		return 1;
	}
	for (i = 0; i<SIZE; i++)
		fprintf(f, "%-15s %-15s %5d\n", (mas1 + i)->beginRout, (mas1 + i)->endRout, (mas1 + i)->numberRout);
	fclose(f);
	f = NULL;


	if ((f = fopen("temp.txt", "r")) == NULL) {
		fprintf(stderr, "Error, fille canot be opened\n");
		return 2;
	}
	for (i = 0; i<SIZE; i++)
		fscanf(f, "%15s %15s %d\n", (mas2 + i)->beginRout, (mas2 + i)->endRout, &((mas2 + i)->numberRout));
	fclose(f);
	f = NULL;


	printf("Second array\n");
	showMass(mas2, SIZE);

	routSorting(mas2, SIZE);
	printf("Second array after sortingiing:\n");
	showMass(mas2, SIZE);



	while (choise != 0)
	{
		printf("\n\nEnter number of rout to show info, of 0 to exit: ");
		if (!scanf("%d", &choise)) {
			fprintf(stderr, "Error, try again\n");
			while (getchar() != '\n');
			continue;
		}
		if (choise > 0) {
			for (i = 0; i < SIZE && (mas2 + i)->numberRout != choise; i++);
			if (i == SIZE)
				printf("There is no such train\n");
			else
				printf("%-15s - %-15s %d\n",
					(mas2 + i)->beginRout, (mas2 + i)->endRout, (mas2 + i)->numberRout);
		}
		while (getchar() != '\n');
	}
	return 0;
}


void routInit(struct ROUT *pointerRout, int size)
{
	char *city[5] = { "Kiev","Lviv","Chernigiv","Poltava","Herson" };

	int r = 0, i;
	for (i = 0; i < size; i++)
	{
		(pointerRout + i)->numberRout = rand() % 1000 + 1000;
		r = rand() % 5;
		strcpy((pointerRout + i)->beginRout, city[r]);
		r = rand() % 5;
		strcpy((pointerRout + i)->endRout, city[r]);
		if (strcmp((pointerRout + i)->endRout, (pointerRout + i)->beginRout) == 0);
	}
}

void showMass(struct ROUT *pointerMass, int size)
{
	int i;
	for (i = 0; i < size; i++)
	{
		printf(" %-15s - %-15s  %-5d\n", (pointerMass + i)->beginRout, (pointerMass + i)->endRout, (pointerMass + i)->numberRout);
	}
	printf("\n");
}


void routSorting(struct ROUT *routPtr, int size) {
	int i, j, temp;

	for (i = 0; i < size; i++) {
		for (j = 0; j < size; j++) {
			if ((routPtr + i)->numberRout > (routPtr + i + 1)->numberRout) {
				temp = (routPtr + i)->numberRout;
				(routPtr + i)->numberRout = (routPtr + i + 1)->numberRout;
				(routPtr + i + 1)->numberRout = temp;
			}
		}
	}
}
laketych вне форума Ответить с цитированием
Старый 26.06.2017, 11:24   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Так у вас не сортировка написана, а так... Сходите хотя бы в вики за алгоритмом.

Вас, как программиста, не смущает, что цикла два, а счетчик используется внутри только один?
Советую подумать, что будет на последнем шаге цикла... куда укажет i+1
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
написать программу, которая генерирует массив из 100 элементов в диапазоне от -50 до 30 и сортирует его... язык КУМИР Сегин Новичков Помощь студентам 0 16.05.2014 17:14
не сортирует массив VBA Sv. Microsoft Office Excel 8 29.12.2012 15:53
Не правильно работает функция =Просмотр()?! carpenter Microsoft Office Excel 4 11.07.2012 11:41
Не правильно работает функция scanf() ichigo9911 Общие вопросы C/C++ 2 26.02.2012 21:57
не правильно работает функция mansp Общие вопросы C/C++ 15 07.11.2010 16:35