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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2012, 04:17   #1
Adm!n
Пользователь
 
Регистрация: 18.11.2012
Сообщений: 13
Восклицание Сортировка (С++)

Здравствуйте, товарищи программисты. Знаю, что вам уже всем надоело натыкаться на подобные темы со структурой ZNAK, но все же! Написал прогу по считыванию данных с файла и вывод на экран человека, месяц которого мы вводим с клавиатуры. Вообщем прошу помочь с сортировкой. Задание заключается в следующем: записи должны быть упорядочены по знакам зодиака. Файл с текстом прикрепил(откуда идет считывание). Спасибо заранее.

Код:
#include <iostream>
#include <iomanip>
#include <cstring>
 
using namespace std; 
 
struct ZNAK // объявление структуры ZNAK
{
    char l_name[100]; // имя и фамилия
    char l_zodiak[15]; // знак зодиака
    int l_bday[3]; // дата рождения
};
 
int main()
{
 
setlocale ( LC_ALL, "Russian" );
 
const int size_array = 8; // количество записей ( должно быть 8 )
ZNAK book[size_array];
int counter_rec = 0; // счётчик записей
 
    char buf[100];
 
    FILE*file=fopen("C:\\7.5\\7.5\\123.txt","r");
 
    for (int counter_rec = 0; counter_rec < size_array; counter_rec++)
    {
        fgets(book[counter_rec].l_name,100,file);
        fgets(book[counter_rec].l_zodiak,15,file);
        fgets(buf,100,file);
        book[counter_rec].l_bday[0]=atoi(buf);
        fgets(buf,100,file);
        book[counter_rec].l_bday[1]=atoi(buf);
        fgets(buf,100,file);
        book[counter_rec].l_bday[2]=atoi(buf);
    }
 
    cout << endl;
    for (int counter_rec = 0; counter_rec < size_array; counter_rec++)
    {
        cout << book[counter_rec].l_name; // имя и фамилия
        cout << book[counter_rec].l_zodiak; // знак зодиака
        cout << book[counter_rec].l_bday[0] << "." << book[counter_rec].l_bday[1] << "." << book[counter_rec].l_bday[2] << endl << endl; // дата рождения
    }
 
 
    cout << endl;
    int month = 0;
    cout << "Введите порядковый номер месяца: ";
    cin >> month;
    if (month < 1 || month > 12)
        {
            cout << "Месяц указан не корректно!" << endl;
                    //return 0;
        }
    else
    {
        // печать записей, месяц которых совпадает с введённым
        cout << endl;
        bool no_records = false; // переменная-флаг, отвечающая за существование записей, месяц которых равен введённому
        for (int counter_rec = 0; counter_rec < size_array; counter_rec++)
        {
            if (book[counter_rec].l_bday[1] == month) // если совпадает номер месяца в записи с введённым с клавиатуры
            {
                no_records = true;
                cout << book[counter_rec].l_name; // имя и фамилия
                cout << book[counter_rec].l_zodiak; // знак зодиака
                cout << book[counter_rec].l_bday[0] << "." << book[counter_rec].l_bday[1] << "." << book[counter_rec].l_bday[2] << endl << endl; // дата рождения
            }
        }
            if (!no_records) cout << "Нет людей родившихся " << month << " месяца." << endl;
    }
 
       
 
system("pause");
return 0;
}
Вложения
Тип файла: txt 123.txt (301 байт, 130 просмотров)
Adm!n вне форума Ответить с цитированием
Старый 18.11.2012, 16:55   #2
Adm!n
Пользователь
 
Регистрация: 18.11.2012
Сообщений: 13
По умолчанию

up up
есть такая же прога,с сортировкой,но там ввод с клавиатуры, а не с файла

Последний раз редактировалось Adm!n; 18.11.2012 в 17:50.
Adm!n вне форума Ответить с цитированием
Старый 18.11.2012, 18:39   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что мешает вырезать оттуда сортировку и вставить ее сюда?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.11.2012, 18:48   #4
Adm!n
Пользователь
 
Регистрация: 18.11.2012
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А что мешает вырезать оттуда сортировку и вставить ее сюда?
Пробовал, не сортирует
Adm!n вне форума Ответить с цитированием
Старый 18.11.2012, 18:50   #5
Adm!n
Пользователь
 
Регистрация: 18.11.2012
Сообщений: 13
По умолчанию

Вот. Прикрепил ту прогу, которая осуществляет ввод с клавиатуры и сортирует.Посмотри,может сможешь исправить
Вложения
Тип файла: txt 7.5 (без функций).txt (6.3 Кб, 167 просмотров)
Adm!n вне форума Ответить с цитированием
Старый 18.11.2012, 19:22   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Предположу что функция сортировки может выглядеть так:
Код:
void Sorta(){
const char *sign_zodiak[12] = {"Oven", "Telec", "Bliznec", "Rak" , "Lev", "Deva",
                         "Vesy", "Scorpion", "Strelec", "Kozerog", "Vodoley", "Ryby" }; // порядок следования знаков зодиака

// сортировка записей в массиве структур
    for (int ctr1 = 0; ctr1 < size_array; ctr1++)
    {
        for (int ctr2 = ctr1 + 1; ctr2 < size_array; ctr2++)
        {
			int i=0,j=0;
			for(;i<12;i++)  if (!strcmp(book[ctr1].l_zodiak ,sign_zodiak[i])) break;
			for(;j<12;j++)  if (!strcmp(book[ctr2].l_zodiak ,sign_zodiak[j])) break;
			if(i<12 && j<12){ if(i<j){
				ZNAK t;
				memcpy(&t,&book[ctr1],sizeof(book[ctr1]));
				memcpy(&book[ctr1],&book[ctr2],sizeof(book[ctr1]));
				memcpy(&book[ctr2],&t,sizeof(book[ctr1]));
			}	}
        }

    }	

}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.11.2012, 19:41   #7
Adm!n
Пользователь
 
Регистрация: 18.11.2012
Сообщений: 13
По умолчанию

Код:
#include <iostream>
#include <iomanip>
#include <cstring>

using namespace std;


struct ZNAK // объявление структуры ZNAK
{
	char l_name[100]; // имя и фамилия
	char l_zodiak[15]; // знак зодиака
	int  l_bday[3]; // дата рождения

};

int main()
{

setlocale ( LC_ALL, "Russian" );

const int size_array = 8; // количество записей ( должно быть 8 )
ZNAK book[size_array];
int counter_rec = 0; // счётчик записей

cout << "Сортировать будем в следующей последовательности: " << endl;
cout << " 1. Oven (Овен)" << ' ' << "        2. Telec (Телец) " << ' ' << "       3. Bliznec (Близнецы) " << endl
     << " 4. Rak (Рак)  "<< ' ' << "        5. Lev (Лев) " << ' ' << "           6. Deva (Дева) " << endl
	<< " 7. Vesy (Весы)"<< ' ' << "        8. Scorpion (Скорпион) " << ' ' << " 9. Strelec (Стрелец) " << endl
	<< " 10. Kozerog (Козерог)"<< ' ' << " 11. Vodoley (Водолей) " << ' ' << "  12. Ryby (Рыбы) " << endl;

    char buf[100];
 
    FILE*file=fopen("C:\\7.5\\7.5\\123.txt","r");
 
    for (int counter_rec = 0; counter_rec < size_array; counter_rec++)
    {
        fgets(book[counter_rec].l_name,100,file);
        fgets(book[counter_rec].l_zodiak,15,file);
        fgets(buf,100,file);
        book[counter_rec].l_bday[0]=atoi(buf);
        fgets(buf,100,file);
        book[counter_rec].l_bday[1]=atoi(buf);
        fgets(buf,100,file);
        book[counter_rec].l_bday[2]=atoi(buf);
    }



const char *sign_zodiak[12] = {"Oven", "Telec", "Bliznec", "Rak" , "Lev", "Deva",
                         "Vesy", "Scorpion", "Strelec", "Kozerog", "Vodoley", "Ryby" }; // порядок следования знаков зодиака

// сортировка записей в массиве структур
    for (int ctr1 = 0; ctr1 < size_array; ctr1++)
    {
        for (int ctr2 = ctr1 + 1; ctr2 < size_array; ctr2++)
        {
			int i=0,j=0;
			for(;i<12;i++)  if (!strcmp(book[ctr1].l_zodiak ,sign_zodiak[i])) break;
			for(;j<12;j++)  if (!strcmp(book[ctr2].l_zodiak ,sign_zodiak[j])) break;
			if(i<12 && j<12){ if(i<j){
				ZNAK t;
				memcpy(&t,&book[ctr1],sizeof(book[ctr1]));
				memcpy(&book[ctr1],&book[ctr2],sizeof(book[ctr1]));
				memcpy(&book[ctr2],&t,sizeof(book[ctr1]));
			}	}
        }

    }	


	cout << endl;
	for (int counter_rec = 0; counter_rec < size_array; counter_rec++)
	{
	cout << book[counter_rec].l_name; // имя и фамилия
    cout << book[counter_rec].l_zodiak; // знак зодиака
    cout << book[counter_rec].l_bday[0] << "." << book[counter_rec].l_bday[1] << "." << book[counter_rec].l_bday[2] << endl << endl; // дата рождени
	}


	cout << endl;
    int month = 0;
    cout << "Введите порядковый номер месяца: ";
    cin >> month;
    if (month < 1 || month > 12)
		{
			cout << "Месяц указан не корректно!" << endl;
					//return 0;
		}
    else
    {
        // печать записей, месяц которых совпадает с введённым
        cout << endl;
        bool no_records = false; // переменная-флаг, отвечающая за существование записей, месяц которых равен введённому
        for (int counter_rec = 0; counter_rec < size_array; counter_rec++)
        {
            if (book[counter_rec].l_bday[1] == month) // если совпадает номер месяца в записи с введённым с клавиатуры
            {
                no_records = true;
                cout << book[counter_rec].l_name; // имя и фамилия
                cout << book[counter_rec].l_zodiak; // знак зодиака
                cout << book[counter_rec].l_bday[0] << "." << book[counter_rec].l_bday[1] << "." << book[counter_rec].l_bday[2] << endl << endl; // дата рождения
            }
        }
			if (!no_records) cout << "Нет людей родившихся " << month << " месяца." << endl;
    }

	   

system("pause");
return 0;
}
Adm!n вне форума Ответить с цитированием
Старый 18.11.2012, 19:41   #8
Adm!n
Пользователь
 
Регистрация: 18.11.2012
Сообщений: 13
По умолчанию

мои кривые руки или не сортирует?)
Adm!n вне форума Ответить с цитированием
Старый 18.11.2012, 20:55   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Отладчик что говорит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.11.2012, 21:05   #10
Adm!n
Пользователь
 
Регистрация: 18.11.2012
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Отладчик что говорит?
Говорит "успешно",компилит,но сортировка не происходит
Adm!n вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
Сортировка Шелла и Шейкер-сортировка AleksandrMakarov Паскаль, Turbo Pascal, PascalABC.NET 11 11.03.2012 12:18
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57
Сортировка файлов в Explorer vs сортировка в Delphi mutabor Общие вопросы Delphi 11 04.09.2009 14:32