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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2018, 00:10   #1
Samuil445
Новичок
Джуниор
 
Регистрация: 10.06.2018
Сообщений: 3
По умолчанию [C++] Структура,сортировка

Всем привет,хотел узнать бы как сделать сортировку,чтоб выводило год рождения и имя,я делаю сортировку методом пузырьком,но когда вывожу то выводятся отсортированные года по возрастанию,а имя как были на местах так и стоят.
как сделать,чтоб одновременно выводились год рождения и имя?Буду очень благодарен
вот код:
Код:
// ConsoleApplication43.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <fstream>
#include <iomanip>
#include <string>

using namespace std;

struct date
{
	char name[30];
	int day;
	char month[12];
	int year;

};

int i;

void inputfile(date x[], int &n)
{
	i = 0;
	char iniz[10];
	char filename[30];
	ifstream fin;
	cout << "Name: ";
	cin >> filename;
	fin.open(filename);
	if (fin.fail()) { cout << "Error"; exit(0); }
	while (!fin.eof())
	{
		fin >> x[i].name >> iniz >> x[i].day >> x[i].month >> x[i].year;
		strcat_s(x[i].name, " ");
		strcat_s(x[i].name, iniz);

		i++;
	}
	fin.close();
	n = i;
}

void output(date x[], int n)
{
	for (i = 0; i<n - 1; i++)
		cout << setw(35) << x[i].name << setw(10) << x[i].day << " " << setw(8) << x[i].month << setw(7) << x[i].year << endl;
}




void poisk(date x[], int n)
{
	string s = "июня";
	string k = "июля";
	string l = "августа";
	for (i = 0; i<n; i++)
		if (x[i].month == s || x[i].month == k || x[i].month == l) cout << x[i].name << endl;
}

void sort(date x[], int n)
{
	int temp;
	for (int i = 0; i < n - 1; i++) {
		for (int j = 0; j < n - i - 1; j++) {
			if (x[j].year > x[j + 1].year) {

				temp = x[j].year;
				x[j].year = x[j + 1].year;
				x[j + 1].year = temp;
			}
		}
	}
	for (i = 0; i<n; i++)
		cout << setw(35) << x[i].name << setw(15) << x[i].year << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL, "Russian");
	date a[25];
	int kol;
	inputfile(a, kol);
	output(a, kol);
	cout << endl;
	cout << "Студенты,которые родились летом:" << endl;
	poisk(a, kol);
	cout << endl;
	cout << "Сортировка по возрастанию:" << endl;
	cout << endl;
	sort(a, kol);
	_getch();
	return 0;
}
Пожалуйста, оформляйте Ваш код согласно правилам.

Последний раз редактировалось Вадим Мошев; 10.06.2018 в 00:24.
Samuil445 вне форума Ответить с цитированием
Старый 10.06.2018, 00:33   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

В процессе сортировки у тебя переставляются только поля, отвечающие за год:
Код:
temp = x[j].year;
x[j].year = x[j + 1].year;
x[j + 1].year = temp;
а надо переставлять записи целиком
Код:
temp = x[j];
x[j] = x[j + 1];
x[j + 1] = temp;
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 10.06.2018, 00:43   #3
Samuil445
Новичок
Джуниор
 
Регистрация: 10.06.2018
Сообщений: 3
По умолчанию

он ошибку выдает,можешь подробно написать,пожалуйста
буду очень благодарен
Samuil445 вне форума Ответить с цитированием
Старый 10.06.2018, 00:52   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

И какую?
Описали структуру.
Описали массив, каждый элемент которого - описанная ранее структура.
При сортировке ищите мин. или макс. элемент того поля структуры, по которому выполняете сортировку.
Затем выполняете перестановку найденного элемента вперёд.
Перестановку выполняете через временный элемент, который так же должен иметь тип структуры.
Т.е. должно быть не
Код:
 int temp;
а
Код:
date temp;
если я правильно понял синтаксис языка.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 10.06.2018, 13:49   #5
Samuil445
Новичок
Джуниор
 
Регистрация: 10.06.2018
Сообщений: 3
По умолчанию

Cпасибо тебе большое,все получилось
Samuil445 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структура DateTime, битовая структура prepare2die Помощь студентам 1 10.03.2015 13:32
Структура и сортировка Mr.Skip Помощь студентам 1 13.04.2014 18:01
структура C#...почему не работает сортировка по "НАЗВАНИЮ АВТО"?? Serg94 C# (си шарп) 13 17.03.2012 02:59
Структура, сортировка вставкой Slimikus Общие вопросы C/C++ 1 30.04.2010 15:40
структура+сортировка alexov Общие вопросы C/C++ 1 27.01.2009 12:27