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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 27.02.2009, 19:58   #1
nec117
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 266
По умолчанию Не получается отсортировать

И снова всем доброго времени суток)) Обращаюсь снова к вам с проблемой.. Проблема заключается в сортировке .Cena по возрастанию. (case 53) При компиляции никаких ошибок не выдаёт, но как только я ввожу данные и нажимаю отсортировать выдаёт окно с ошибкой: "Прекращена работа имя_файла.exe . Закрыть программу."В чём причина этого?

Код:
#include <iostream>
#include <string.h>
#include <cstring>
#include <stdio.h>
#include <fstream>
#include <sstream>
#include <conio.h>

class tovar 
{
public:
	char Firm[100];
	char Name[100];
	int Cena;
	int dollar;
	void enter_tovar(void);
	void show_tovar(void);
	void dollar_tovar(void);
	void enter_file(void);
	void show_file(void);
};

void tovar::enter_tovar(void)
{
   std::cout << "Фирма: ";
   std::cin >> Firm;
   std::cout << "Модель: ";
   std::cin >> Name;
   std::cout << "Цена: ";
   std::cin >> Cena;
};


void tovar::show_tovar(void)
{
  std::cout << std::endl << Firm << " " << Name << " " << Cena << std::endl;
};

void tovar::dollar_tovar(void)
{  
 Cena=Cena / dollar;
};

void tovar::enter_file()
{    
	std::ofstream file("bd.txt",std::ios::app); 
      file << Firm << "\n";
      file << Name << "\n";
      file << Cena << "\n";
	file.close();

};

void tovar::show_file()
{   
      std::fstream file( "bd.txt", std::ios::app);
	  file.open( "bd.txt", std::ios_base::in);
	    file >> Firm;
        file >> Name;
		file >> Cena;
	  file.close();
};

void clear_file()
{
    std::fstream file("bd.txt", std::ios_base::out);
    file.open( "bd.txt", std::ios_base::out);
    file.close();
    system("cls");
    std::cout << "Фай очищен. Нажмите любую клавишу...";
    getch();
    system("cls");
     };
     


int main() { 
	setlocale(LC_ALL,"Russian");
   tovar st[3];
      int n = 3;
      int a, d;

   do{std::cout << "1-Ввод данных | " << "2-Вывод на экран | " << "3-Перевести рубли в доллары | "<< "\n"
    << "4-Сохранить файл | " << "5-Сортировка по возрастанию | "<<"6-Очистить файл | " << "ESC - Выход \n"; 
	  a=getch(); switch(a) 
	  {
	    case 49:
         for(int i=0; i<n; i++) {
           st[i].enter_tovar();
	       system("cls");
		 }  
	    break;

	    case 50:
         for(int i=0; i<n; i++) {
		   st[i].show_tovar();
		 }
	       getch();
	       system("cls");
	   break;

	   case 51:	
	       system("cls");
	       std::cout << "Введите курс доллара:";
	       std::cin >> st[1].dollar;
	       st[0].dollar=st[2].dollar=st[1].dollar;
	     for (int i=0; i<n; i++){
		   st[i].dollar_tovar();
		 }
		  break;

	    case 52:    
         for ( int i = 0; i < n; i++ )
         {
		   st[i].enter_file();
	     }
	 
         for ( int i = 0; i < n; i++ )
         {
           st[i].show_file();
         }
         system("cls");
         std::cout << "Содержимое файла:" << "\n";
	     for ( int i = 0; i < n; i++ )
           std::cout << std::endl << st[i].Firm << " " << st[i].Name << " " << st[i].Cena << std::endl;
         std:: cout << "\n" << "Для продолжения нажмите любую клавишу..." << std::endl;
         getch(); system("cls");
	    break;

	     case 53:
       	
         for ( int i=0; i < n; i++) {
            for (int j=0; j<n-1; j++) {
			  if ( st[i].Cena > st[i+1].Cena)
		   {   
               int b=0;
			   b = st[i].Cena;   
		      st[i].Cena = st[i+1].Cena;
		      st[i+1].Cena = b; };
		   }
         };
		  break;
		  
		  case 54:
             clear_file();  
          break;

	  
	  }
	  } while(a!=27);
	   return(0);

}

Последний раз редактировалось nec117; 27.02.2009 в 20:06.
nec117 вне форума
Старый 27.02.2009, 20:32   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Проблема в выходе индекса за границы:
Код:
 for ( int i=0; i < n; i++) {
   for (int j=0; j<n-1; j++) {
     if ( st[i].Cena > st[i+1].Cena)
И, кстати, вы сортируете только цену, а не сам товар.
Исправил.
Код:
 case 53:

     for ( int i=0; i < n; i++)
     {
      for (int j=n-1; j>i; j--)
      {
         if ( st[j-1].Cena > st[j].Cena)
	{
            tovar b;
	 b = st[j-1];
	 st[j-1] = st[j];
	st[j] = b;
            }
       }
    }
  break;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 27.02.2009 в 20:37. Причина: не то написал
Sazary вне форума
Старый 27.02.2009, 20:39   #3
nec117
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 266
По умолчанию

Да) Я тут сортировал именно цену)) Спасибо большое) До чего же глупая ошибка-то.. теперь буду думать как отсортировать так же и имя с фирмой
nec117 вне форума
Старый 27.02.2009, 20:42   #4
nec117
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 266
По умолчанию

Ого! Так вы уже мне помогли и эту проблему решить) Вот спасибо огромнейшее!! А то я уже всю голову изломал!
nec117 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите отсортировать! freedos Microsoft Office Excel 3 20.11.2008 04:18
Отсортировать по алфавиту Rio309 Помощь студентам 2 09.03.2008 22:52
Помогите отсортировать список ret83 Microsoft Office Excel 8 29.12.2007 13:41
Отсортировать по алфавиту asale Microsoft Office Excel 5 19.11.2007 22:01
Как отсортировать Uhryap Microsoft Office Word 2 24.02.2007 16:58