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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2012, 14:27   #1
Sylar9
Форумчанин
 
Регистрация: 22.10.2011
Сообщений: 252
Вопрос Это тяжело сделать

я поспорил с перодом если это сделаю то он мне автоматом поставить 100 баллом по основам программирования, вот задача:
-----------------------------------------------------------------------------
Дано(в текстовом файле) n>1000000 натуральных чисел (каждое число <10000) записанных через пробел. Получить массив в котором все числа исходного файла расположены по убыванию значений без повторений.
Обязательное условие: количество элементов в выходном массиве должно определяться во время выполнения программы.
Дополнительно: записать полученный массив в текстовый файл.
Имена файлов: Входной - "infile.txt", результат вывести в "outfile.txt"
-----------------------------------------------------------------------------

скажите это тяжело сделать ? я тут только одно могу сделать открыть файл и все
Sylar9 вне форума Ответить с цитированием
Старый 26.05.2012, 14:34   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Задача уровня 7 класса общей образовательной школы.
Такие обычно решали на бейсике, или паскале.

Всю задачу можно разделить на четыре элементарных этапа:
1. Скачать весь файл в память ( в массив)
2. Удалить из этого массива все дубликаты
3. Отсортировать массив по убыванию.
4. Записать полученный массив в файл.

Если поюзать STL Algorithms, всю задачу можно свести к нескольким строчкам кода.
_Bers вне форума Ответить с цитированием
Старый 26.05.2012, 15:58   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

а если выбрать правильный контейнер (set), то вообще алгоритмы не нужны. разве что, copy
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 26.05.2012, 18:13   #4
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Код:
#include <iostream>
#include <iterator>
#include <set>
#include <algorithm>
#include <fstream>
#include <vector>

int main()
{
	std::ifstream input("E:\\Temp\\1.txt");
	std::set<int> set((std::istream_iterator<int>(input)), (std::istream_iterator<int>()));
	input.close();
	size_t size;
	std::cout << "Count to copy: ";
	std::cin >> size;
	std::vector<int> vector(set.begin(), set.end());
	vector.resize(size);
	std::ofstream output("E:\\Temp\\2.txt");
	std::copy(vector.begin(), vector.end(), std::ostream_iterator<int>(output, " "));
	output.close();
	return EXIT_SUCCESS;
}
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 26.05.2012, 18:14   #5
Sylar9
Форумчанин
 
Регистрация: 22.10.2011
Сообщений: 252
Вопрос

Цитата:
Сообщение от _Bers Посмотреть сообщение
Задача уровня 7 класса общей образовательной школы.
Такие обычно решали на бейсике, или паскале.

Всю задачу можно разделить на четыре элементарных этапа:
1. Скачать весь файл в память ( в массив)
2. Удалить из этого массива все дубликаты
3. Отсортировать массив по убыванию.
4. Записать полученный массив в файл.

Если поюзать STL Algorithms, всю задачу можно свести к нескольким строчкам кода.
как организовать цикл вор ?
Sylar9 вне форума Ответить с цитированием
Старый 26.05.2012, 18:17   #6
Sylar9
Форумчанин
 
Регистрация: 22.10.2011
Сообщений: 252
По умолчанию

вот я чуть кода набросал:
Код:
#include <iostream>
#include <fstream>
#include <locale.h>
using namespace std;
int main()
{
	setlocale(LC_ALL, "Rus");
	int m[1000000];
	ifstream f("infile.txt");
	if(!f)
		 cout << "Файл не найден" << endl;
	while(!f.eof())
	  for (int i=0; i<1000000; i++)
	  {
		f >> m[i];
		if(m[i] == m[i])

	  }


	system("pause");
	return 0;
}
как удалить повторявшие элементы
Sylar9 вне форума Ответить с цитированием
Старый 26.05.2012, 20:17   #7
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Sylar9

Это тяжело сделать

На C++ - три строчки... так что смотри сам...

Код:
std::ifstream ifs("numbers.txt");

typedef std::istream_iterator<int> I;	
std::set<int, std::greater<int> > v(I(ifs), (I()));
Rififi вне форума Ответить с цитированием
Старый 27.05.2012, 00:43   #8
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

поясните вот эти строки..
Код:
typedef std::istream_iterator<int> I;	
std::set<int, std::greater<int> > v(I(ifs), (I()));
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 27.05.2012, 02:02   #9
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Если хочешь можем обсудить цену за программу. Исходный код имеется 100% рабочий (проверял) с комментариями даже. Решил попробовать написать эту программу - получилось
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 27.05.2012, 08:06   #10
Sylar9
Форумчанин
 
Регистрация: 22.10.2011
Сообщений: 252
Вопрос

Цитата:
Сообщение от Петррр Посмотреть сообщение
Код:
#include <iostream>
#include <iterator>
#include <set>
#include <algorithm>
#include <fstream>
#include <vector>

int main()
{
	std::ifstream input("E:\\Temp\\1.txt");
	std::set<int> set((std::istream_iterator<int>(input)), (std::istream_iterator<int>()));
	input.close();
	size_t size;
	std::cout << "Count to copy: ";
	std::cin >> size;
	std::vector<int> vector(set.begin(), set.end());
	vector.resize(size);
	std::ofstream output("E:\\Temp\\2.txt");
	std::copy(vector.begin(), vector.end(), std::ostream_iterator<int>(output, " "));
	output.close();
	return EXIT_SUCCESS;
}
а без STL можешь решить, просто у меня задание без STL решить
Sylar9 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Я создал игру типо марио и хочу сделать её по сети как это сделать? rbkmz Работа с сетью в Delphi 7 14.05.2012 15:58
Как же это сделать? Братишка^_^ Работа с сетью в Delphi 17 11.04.2012 10:26
Тяжело ли работать программистом? fs444 Свободное общение 25 28.06.2010 16:33
Тяжело ли выучить испанский? Пепел Феникса Свободное общение 5 24.05.2010 18:57
очень тяжело =(! mmmarsel Паскаль, Turbo Pascal, PascalABC.NET 2 28.04.2010 21:31