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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2013, 11:06   #1
Kir555
Новичок
Джуниор
 
Регистрация: 27.10.2013
Сообщений: 1
По умолчанию Задачка на С++

Всем привет!
Задачка в двух словах такова. Надо сделать телефонный справочник, чтоб можно было добавлять ФИО №телефона, затем отсортировать все это по алфавиту (быстрой сортировочкой) и вывести на экран.
А теперь куча вопросов. QuickSort неправильно сделал, что очевидно. Так как, собственно, организовать сортировку? Возможно ли это сделать с помощью <algorithm> ?
Стоит ли считывать структуры с помощью указателя? Не лучше ли использовать vector? А если и лучше, то как использовать его конкретно в данной ситуации?..
Преподают нам пока что Си, но случайно открыл на себя эти интересненькие потоки, так что писал на них. А раз уж начал использовать синтаксис Си++, то надо довести эту прогу до конца. Но сам уже запутался. Хотя бы подскажите направление для мыслей. На большее не рассчитываю).. Собственно, сам код:

Код:
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstdlib>

using namespace std;

struct reg{
	char number[20];
	char name[20];
	char naame[20];
	char naaame[20];
	struct reg *next;
};

template<class T>
void quickSort(T* a,long N) {
	long i=0, j=N;					//установка указателей на исходные места
	T temp, p;
	p = a[N>>1].name;					//центральный элемент
	//разделение
	do {
		while (a[i].name < p) i++;
		while (a[j].name > p) j--;
		
		if (i <= j) {
			temp = a[i];
			a[i] = a[j];
			a[j] = temp;
			i++;
			j--;
		}
	} while (i<=j);
	
	//если еще осталось, что сортировать
	if (j>0) quickSort(a,j);
	if (N>i) quickSort(a+i,N-i);
}

int main(){
	int i=1;
	struct reg *r= new reg;
	setlocale(LC_ALL,"Russian");
	ifstream fin("/home/kirill/Рабочий стол/phone.txt");
	if (!fin.is_open()){
		cout<<"Не могу открыть файл!";
		return 0;
	}
	fin>>r->name>>r->naame>>r->naaame>>r->number;
	cout<<r->name<<' '<<r->naame<<' '<<r->naaame<<' '<<r->number<<endl;
	reg *tmp=r;
	while (true){
		tmp->next=new reg;
		tmp=tmp->next;
		fin>>tmp->name>>tmp->naame>>tmp->naaame>>tmp->number;
		if (fin.eof()) break;
		cout<<tmp->name<<' '<<tmp->naame<<' '<<tmp->naaame<<' '<<tmp->number<<endl;
		i++;
	}
	

	return 0;
}
Ну и еще... Список односвязный как сортировать тут?

Последний раз редактировалось Kir555; 27.10.2013 в 11:11. Причина: Уточнение
Kir555 вне форума Ответить с цитированием
Старый 27.10.2013, 11:37   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я бы обратил внимание на STL: http://www.cplusplus.com/forum/beginner/72953/
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задачка на Си kubik Фриланс 2 16.12.2009 20:30
задачка Froost Общие вопросы Delphi 0 10.11.2009 21:13
ЗАДАЧКА В СИ sfinks_murka Общие вопросы C/C++ 1 27.09.2009 18:54
Задачка spirit0k Общие вопросы C/C++ 7 11.11.2008 17:36