conquerorbh Ответов: 2

А как же я?.. Проблема сортировки


я написал этот код, но он не работает.

Что я уже пробовал:

#include <stdio.h>

void sort(int string[], int x) {
	int i, j, memory;
	for (i = 0; i< x; i++) {
		for (j = i; j< x; j++) {
			if (string[j] < string[i]) {
				memory = string[j];
				string[i] = string[j];
				string[j] = memory;
				if (string[j] < string[i]) {
					memory = string[j];
					string[i] = string[j];
					string[j] = memory;
				}
			}
		}
	}
}
int main() {
	int j, string[6];
	printf("***Enter Values***\n");
	for (j = 0; j< 6; j++) {
		printf("Enter %d. number: ", j + 1);
		scanf("%d", &string[j]);
	}
	sort(string, 6);
	printf("Ascending Order: ");
	for (j = 0; j< 6; j++)
		printf("%d", string[j]);
	printf("Descending Order:  ");
	for (j = 6 - 1; j >= 0; j--)
		printf("%d", string[j]);
	return 0;
}

Patrice T

Уточните свой вопрос: "но не работает" - это не информативно

0x01AA

Не работает на некий алгоритм по-моему понятно ;)

2 Ответов

Рейтинг:
2

OriginalGriff

"не работает" - это один из самых бесполезных отчетов об ошибках, которые вы когда-либо получите, как вы обнаружите, когда наберетесь достаточно опыта, чтобы позволить пользователям приближаться к вашим приложениям.
Он ничего не говорит нам о том, что происходит, когда вы запускаете свое приложение, ничего о том, как вы заставили его сделать это, ничего о том, что вы пытались исправить. В результате мы понятия не имеем, что вы нашли, а что нет.

Так что все будет зависеть от вас.
Поставьте точку останова на первой строке в main функция, и запустите свой код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что именно то, что вы ожидали, произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас-вам пора освоить новый (и очень, очень полезный) навык: отладку!

И это довольно простая проблема, которую отладчик немедленно раскроет. Подсказки: некоторые из ваших кодов избыточны, а некоторые используют неправильный индекс. Попробуйте, и посмотрите, сможете ли вы решить эту проблему!

Но сделайте себе одолжение и используйте "правильные" имена для ваших переменных. Наличие массива целых чисел, называемого string он никому не говорит ничего полезного и на самом деле контрпродуктивен, поскольку подразумевает, что содержимое представляет собой строки - или массивы символов - а не целочисленные значения.


0x01AA

""не работает" - это один из самых бесполезных " ибо вопрос о сортировке algo, на мой взгляд, очень clear...it означает, что сортировка не сортируется в соответствии с ожидаемым результатом :-)

OriginalGriff

В этом случае он генерирует полный мусор - даже не плохо отсортированный, он перезаписывает большую часть записей! Это не то же самое, что "сортировка не сортируется в соответствии с ожидаемым результатом", и он должен знать, что " как " вы сообщаете о проблеме, по крайней мере, так же важно, как и код, который терпит неудачу! :смеяться:

0x01AA

Я только что пролетел над ним, мой плохой :(
N. B: Google translate, который я использую, чтобы проверить свой английский, предлагает мне: "я просто _blew_ it over...." :-)

OriginalGriff

Это не проблема! :смеяться:
Мы все это делаем...

0x01AA

Ага, вы также проверяете с помощью Google translate :-))))

OriginalGriff

О да!
К сожалению, у него нет настройки "идиот на английский", которая была бы удобна в QA... :смеяться:

0x01AA

Ты имеешь в виду меня?

OriginalGriff

Вряд ли!
Я имею в виду замечательных людей, которые предполагают, что я могу видеть их экран и знать интимные детали их домашней работы без необходимости говорить...: вздох:

Stefan_Lang

К сожалению, "идиот" - это местный сленг, который варьируется от класса к классу, а иногда даже внутри одного и того же класса. Было бы довольно трудно автоматически перевести все варианты...

Рейтинг:
1

Patrice T

Начните с удаления бесполезного кода:

void sort(int string[], int x) {
	int i, j, memory;
	for (i = 0; i< x; i++) {
		for (j = i; j< x; j++) {
			if (string[j] < string[i]) {
				memory = string[j];
				string[i] = string[j];
				string[j] = memory;
				if (string[j] < string[i]) {
					memory = string[j];
					string[i] = string[j];
					string[j] = memory;
				}
			}
		}
	}
}



Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.