Member 13095321 Ответов: 3

Программа для реализации сортировки вставки.


Your program should take as input a text file which contains numbers to be sorted and it 	should output a text file containing the sorted sequence and also output at each round of 	insertion sort. Both input and output files should be passed as command line arguments to your program as given in Sample Run.
	
	eg.
		Input file (input.txt)



		Output file (output.txt)
			
23 15 45 19 20 27 31 
23 15 45 19 20 27 31 
15 23 45 19 20 27 31
15 23 45 19 20 27 31
15 19 23 45 20 27 31
15 19 20 23 45 27 31
15 19 20 23 27 45 31
15 19 20 23 27 31 45 

----
ОШИБКА В МОЕМ КОДЕ:
Status Messages:-

Program compiled successfully ...

Your program is not producing any output file, not allowed ...

This is mostly because your program is giving a "Segmentation Fault" for some input test case, test your program with multiple test cases, identify a test case when program gives segmentation fault, debug your program and try uploading again !


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

#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
	int array[argc], c, d, t,i,j;
int n=argc-1;
for (i = 1; i < argc; i++)
	{
		array[i - 1] = atoi(argv[i]);
	}
   for (c = 0; c < n; c++) {
    printf("%d ", array[c]);
  }
 
  for (c = 1 ; c <= n - 1; c++) {
    d = c;
 printf("\n");
    while ( d > 0 && array[d] < array[d-1]) {
      t          = array[d];
      array[d]   = array[d-1];
      array[d-1] = t;
 
      d--;
    }
     for (j = 0; j < n; j++) {
    printf("%d ", array[j]);
  }
  }
 
  return 0;
}

CHill60

Вы следовали инструкциям, приведенным в сообщениях о состоянии?
Для какого тестового случая ваш код вызывает ошибку сегментации?

[no name]

отладьте свою программу и попробуйте загрузить ее снова

3 Ответов

Рейтинг:
1

OriginalGriff

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

Я бы сказал, что первая проблема заключается в том, что вы игнорируете инструкции:

Цитата:
Как входные, так и выходные файлы должны передаваться вашей программе в качестве аргументов командной строки
Это означает, что значения в argv не являются числами: это имена файлов для входного и выходного файлов. Вы должны читать входной файл, используя первый аргумент, чтобы открыть файл, и записывать выходные данные в другой файл, используя второй аргумент.

Как только вы разберетесь с этим, начните учиться использовать отладчик для поиска таких проблем: они делают вашу жизнь намного проще, и если вы не справитесь с ними на простых заданиях, подобных этому, вы не будете знать, что делать, когда перейдете к более сложным проектам. Я не могу сказать вам, как его использовать - я не знаю, какую систему вы используете, - но Google может: просто найдите имя вашей IDE / компилятора и слово "отладчик", и вы должны получить много инструкций, чтобы сказать, что вы хотите сделать.


Рейтинг:
0

Jochen Arndt

Похоже, что приведенное выше сообщение о состоянии генерируется тестовым инструментом, запущенным сайтом, на который вы загружаете его для проверки.

Инструмент, похоже, проверяет, генерирует ли ваша программа выходной файл, и предполагает какую-то ошибку, если выходной файл не генерируется.

Так что еще раз взгляните на задание и на то, что делает ваш код:

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


Рейтинг:
0

Patrice T

int array[argc]

Это не то, как вы должны выделять память для динамической переменной.
Читайте о "динамическом выделении памяти" в C.

Если вы можете запустить программу o, ваш компьютер, используйте отладчик, чтобы увидеть, что произойдет.

Совет: научитесь правильно делать отступы в своем коде, это поможет его прочитать.
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
	int array[argc], c, d, t,i,j;
	int n=argc-1;
	for (i = 1; i < argc; i++)
	{
		array[i - 1] = atoi(argv[i]);
	}
	for (c = 0; c < n; c++) {
		printf("%d ", array[c]);
	}

	for (c = 1 ; c <= n - 1; c++) {
		d = c;
		printf("\n");
		while ( d > 0 && array[d] < array[d-1]) {
			t          = array[d];
			array[d]   = array[d-1];
			array[d-1] = t;

			d--;
		}
		for (j = 0; j < n; j++) {
			printf("%d ", array[j]);
		}
	}

	return 0;
}


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

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

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