Вопрос по С++

Firewall

Мой повелитель
нифига не получаиться....
 
Останнє редагування:

Sober

______________
Мдам, ну что тебе сказать... Конечно не получается. Начать можно с того, что книги не в файл прямо кидать нужно, а все-таки создать динамический список.
Как это делается? Рекомендую не полениться и обратиться к литературе, у меня старые лабы не сохранились
 

Firewall

Мой повелитель
вот я нашол :
сортировка
//ПРОИЗВОДИМ СОРТИРОВКУ СПИСКА
book *buf;
for(i=0; i < count - 1; i++)
{
for(u_int j=i+1; j < count; j++)
{
if(pt_list[j]->year < pt_list->year)
{
buf=pt_list;
pt_list=pt_list[j];
pt_list[j]=buf;
}
}
}

//ВЫВОДИМ ОТСОРТИРОВАННЫЙ СПИСОК
for(i=0;i<count;i++)
{
printf("%u. ",i+1);rus_out("Название: ");
printf("\"%s\", %d ",pt_list->caption,pt_list->year);
rus_out("год издания\n");
}
free(pt_list);//ОСВОБОЖДАЕМ ПАМЯТЬ ИЗ ПОД СПИСКА
return 1;

а как мне сделать что бы оно читало его из файла?
 

MoGar

Member
Ты что пузырьком решил пользоватся? Самоубийца чтоли?? Хотябы сортировкой вставками пользуйся, алгоритм простой до безумия!
 

Firewall

Мой повелитель
сортировка вставками
Код:
#include <stdio.h>
#include <conio.h>
#include <windows.h>

//Описание используемых в программе функций.
void insertSort(int a[], int size);

void main ()
{
   int m=0;
   int trud, trud2;	//Трудоемкость алгоритмов сортировки.
  	int in_mas [100];       //Целочисленный массив

	//Ввод массива
   char t [80];
   CharToOem ("\nВведите число элементов массива: ", t);
	printf("%s", t);
	scanf ("%d", &m);                               //Узнаем размер массива
   CharToOem ("\nВведите через пробел целые числа: ", t);
	printf("%s", t);
	for (int j=0; j<m; j++) scanf ("%d", &in_mas[j]); //Заполнение массива

   //Сортировка введеного массива
	insertSort (in_mas, m); //Сортировка  вставками

	getch();
}

void insertSort(int a[], int size) {
  int x;
  int i, j;

  for ( i=0; i < size; i++) {  // цикл проходов, i - номер прохода
    x = a[i];

	// поиск места элемента в готовой последовательности
    for ( j=i-1; j>=0 && a[j] > x; j--)
      a[j+1] = a[j];  	// сдвигаем элемент направо, пока не дошли

	// место найдено, вставить элемент
    a[j+1] = x;
  }
  for (int h = 0; h <size; h++)
  printf ("%d ", a[h]);
}
Собстевнно у меня возникает вопрос как мне загнать в масив значения автора и год и сортировать по году?
 

Sober

______________
Я так понял, тебе все-таки хочется все сразу в файле хранить, используя в качестве буфера массив, а на условие произвольного количества книг наплевать :) Ну ладно, можно и так. Тогда создавай массив структур, примерно такой:

struct Book
{
char author[N];
int year;
}Books[M];

Тогда сравнение производится по полям, например по году:

if(Books[X].year > Books[Y].year);
 

NaBlA

Сын Амбера
А корректно ли сравнивать таким образом char, если это многоэлементный массив??? Что-то мне подсказывает, что Error будет. Хотя хз, могу и ошибиться, а проверять влом.)

if(Books[X].year[0] > Books[Y].year[0]); - это я еще понимаю.
 

Firewall

Мой повелитель
Вообщем сделал удаление но что-то мне не нравиться while(!file.eof()) оно в файле как бы дублирует последнее значение! обьесняю есть у меня текстовый файл:
Код:
ves 1234
vvv 2345
Но функция cout иво паказуит как:
Код:
ves 1234
vvv 2345
    2345
Но это ладно но дело втом что когда я удаляю строчку например
Код:
ves 1234
то в текст кидает вот такое:
Код:
vvv 2345
 2345
Помагите!
я знаю что у меня такая же проблема была в курсовой когда график строил оно последнюю точку кидала за экран тоесть в конце получалась не красивая прямая совершенно левая....
 
Зверху