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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2017, 17:41   #1
vladrrom
Пользователь
 
Регистрация: 14.12.2016
Сообщений: 54
По умолчанию Отсортировать в алфавитном порядке данные методом вставки - C++

Здравствуйте, подскажите каким образом происходит сортировка в алфавитном порядке?

Например дан input.txt
Код:
111 
Сидоров Олег Геннадьевич 1998 4 3 4 5 3
Петрова Мария Алексеевна 1999 5 5 5 3 5
Кузнецов Игорь Иванович 1998 4 4 4 5 4
Суздаль Степан Владимирович 1997 5 4 4 5 3
Он должен быть отсортирован в алфавитном порядке по фамилии методом вставки.

Код:
111
Кузнецов Игорь Иванович 1998 4 4 4 5 4
Петрова Мария Алексеевна 1999 5 5 5 3 5
Сидоров Олег Геннадьевич 1998 4 3 4 5 3
Суздаль Степан Владимирович 1997 5 4 4 5 3
p.s. Пример записи кода при помощи сортировки вставками
Код:
void sort(nameStruct *a, int n){
    nameStruct temp;
    for (int i=2; i<=n; i++){
        int j = i;
        while (a[j].key<a[j-1].key){
                temp=a[j];
            a[j]=a[j-1];
            a[j-1]=temp;
            j--;}
    }
}
p.s.s. Нашёл такую информацию, что если сортировать по фамилиям, то можно взять пустое поле после fam... a[0].fam=" "; Как это можно представить в программе?
vladrrom вне форума Ответить с цитированием
Старый 09.03.2017, 17:45   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Ну так вы уже все куски кода нашли. Теперь чуть мозг включите и соберите воедино...
p51x вне форума Ответить с цитированием
Старый 09.03.2017, 17:58   #3
vladrrom
Пользователь
 
Регистрация: 14.12.2016
Сообщений: 54
По умолчанию

Не понимаю как можно отсортировать в алфавитном порядке..
vladrrom вне форума Ответить с цитированием
Старый 09.03.2017, 18:29   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Как обычно, если первая буква в первой строке "больше", чем во второй, то ... если меньше, то ... если равны, то смотрим вторую и т.д.
Хотя, для ленивых можно взять что-то из семейства strcmp
p51x вне форума Ответить с цитированием
Старый 09.03.2017, 18:33   #5
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Я не уверен что сработает, но можешь попробовать сначала приведение типов (из "char" в "int"), а потом сравнивать уже целые... Что-то вроде такого:

0.jpg

Твоя задача: сделай с сторонке небольшую программку, которая выведет числовое представление ВСЕГО русского алфавита (по аналогии делай)... И мы посмотрим есть ли там какие-нибудь закономерности (т.е. можно ли их сравнивать).
ura_111 вне форума Ответить с цитированием
Старый 09.03.2017, 18:52   #6
vladrrom
Пользователь
 
Регистрация: 14.12.2016
Сообщений: 54
По умолчанию

В общем..
В файле input.txt содержатся сведения о группе студентов в формате:
номер группы;
запись о каждом студенте группы содержит следующие сведения: фамилия, имя,
отчество, год рождения, оценки по пяти предметам.
Переписать данные файла input.txt в файл output.txt, отсортировав их в алфавитном порядке по фамилии методом вставки.

Код:
#include "fstream"
#include "string"
#include "iostream"
#include "iomanip"

using namespace std;

ifstream in("input.txt");
ofstream out("output.txt");

struct student{
	string F, I, O;
	int year, ot1, ot2, ot3, ot4, ot5;
	void print();
};

void student::print(){
	out << F << '\t' << I << '\t' << O << '\t' << year << '\t' << ot1 << '\t' << ot2 << '\t' << ot3 << '\t' << ot4 << '\t' << ot5 << endl;
}

void sort(student *a, int n){
	student temp;
	for (int i = 2; i <= n; i++){
		int j = i;
		while (a[j].F < a[j - 1].F)
		{
			temp = a[j];
			a[j] = a[j - 1];
			a[j - 1] = temp;
			j--;
		}
	}
}
int main(){
	int n = 0;
	student a[20];
	while (in.peek() != EOF){
		in >> a[n].F >> a[n].I >> a[n].O >> a[n].year >> a[n].ot1 >> a[n].ot2 >> a[n].ot3 >> a[n].ot4 >> a[n].ot5;
		n++;
	}
	sort(a, n);
	for (int i = 0; i < n; i++){
		a[i].print();
	}
	in.close();
	out.close();
	return 0;
}
Не работает.. Выводит вот это:
Код:
111	Сидоров	Олег	-858993460	-858993460	-858993460	-858993460	-858993460	-858993460
vladrrom вне форума Ответить с цитированием
Старый 09.03.2017, 19:00   #7
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Скажи, что хранится в "string F"? (просто пример покажи)
И что ты сравниваешь в "a[j].F < a[j - 1].F"?
ura_111 вне форума Ответить с цитированием
Старый 09.03.2017, 19:04   #8
vladrrom
Пользователь
 
Регистрация: 14.12.2016
Сообщений: 54
По умолчанию

в input.txt хранится
Код:
Сидоров 
Олег 
Генадьевич 
1998 4 3 4 5 3
Петрова 
Мария 
Алексеевна 
1999 5 5 5 3 5
Кузнецов 
Игорь 
Иванович 
1998 4 4 4 5 4
Суздаль 
Степан 
Владимирович 
1997 5 4 4 5 3
vladrrom вне форума Ответить с цитированием
Старый 09.03.2017, 19:07   #9
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Да нет, я имел ввиду "string F"...
Ну ладно... Выведи на экран ТОЛЬКО эти значения (после считывания с файла; а сортировать пока не надо - пока это будет мешать).

p.s.: скриншот покажи. Ты умеешь делать скриншот экрана?
ura_111 вне форума Ответить с цитированием
Старый 09.03.2017, 19:10   #10
vladrrom
Пользователь
 
Регистрация: 14.12.2016
Сообщений: 54
По умолчанию

Точнее вот
Код:
Сидоров Олег Генадьевич 1998 4 3 4 5 3
Петрова Мария Алексеевна 1999 5 5 5 3 5
Кузнецов Игорь Иванович 1998 4 4 4 5 4
Суздаль Степан Владимирович 1997 5 4 4 5 3
vladrrom вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассемблер ( отсортировать массив методом вставки, количество элементов 15 элементы массива должны вводиться с клавиатуры...) Crosb Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 03.06.2016 12:05
Отсортировать массив методом вставки vasa415 Общие вопросы C/C++ 2 04.09.2013 19:11
Отсортировать столбцы матрицы методом вставки Pein95 Общие вопросы C/C++ 1 27.03.2013 14:12
Требуется занести данные с клавиатуры в массив записей, упорядочить его по фамилиям в алфавитном порядке Ukkas Паскаль, Turbo Pascal, PascalABC.NET 3 17.01.2009 19:22
отсортировать таблицу сначала в алфавитном порядке фамилий продавцов, затем в порядке возростания получен Lora Microsoft Office Excel 1 31.05.2008 17:22