Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Файловый ввод-вывод / 14 сообщений из 14, страница 1 из 1
11.10.2005, 20:29
    #33318453
GrEEN@q
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый ввод-вывод
Привет всем кто осваивает или освоил C++. Я начал заниматься Си совсем недавно. Вот пишу прогу и в ней необходимо сделать так чтобы из файла состоящего из последовательности чисел, на дисплей выводилось бы мах и мин число. Я парюсь немогу никак поймать логику. Нужно чтобы прога была универсальной неважно 100 или 200 чисел в файле(кроме пробелов между ними нет нифига). Пришлите ПЛЗ листинг с куском реализующим это.
Я очень благодарен.
...
Рейтинг: 0 / 0
11.10.2005, 23:44
    #33318592
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый ввод-вывод
Это тебе надо написать программу. На С. Или С++. В ней надо читать числа из файла и в двух переменных считать в одной максимальное, в другой-минимальное. Ну и все.
...
Рейтинг: 0 / 0
12.10.2005, 06:47
    #33318692
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый ввод-вывод
Подозреваю, что файл с числами - это БД. Тогда надо к ней подключиться и выполнить запрос.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
12.10.2005, 10:07
    #33319024
redskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый ввод-вывод
GrEEN@qЯ парюсь немогу никак поймать логику.

???

Какая тут логика? читаешь числа и сравниваешь с текущиим мин. и макс. значениями...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char* argv[])
{
	if(argc >  1 )
	{
		int n, nmin, nmax;
		ifstream ifs(argv[ 1 ]);
		if(ifs >> n)
		{
			nmin = n;
			nmax = n;
			while(ifs >> n) 
			{
				if(n < nmin)
					nmin = n;
				if(n > nmax)
					nmax = n;
			}
			cout << "min = " << nmin << endl << "max = " << nmax;
		}
		else 
			cout << "ops";
	}
	return  0 ;
}
...
Рейтинг: 0 / 0
13.10.2005, 02:08
    #33321380
GrEEN@q
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый ввод-вывод
Да я понял. Я даже массивы не освоил еще. Так сказать я только на вводе-выводе, стандартных средствах пока. Очень помог приведенный листинг,огромное спасибо. Принципы программирования конечно надо освоить в первую очечередь, на мануалах(еле разобрался в азах-передачи по ссылке и по значению), очень сложно понять. Я вот купил Волтера Савича, очень неплохо постороено изложения.
Я буду иногда обращаться к вам , а вы если будет желание помогайте плз. АФФТАРЖОТ)
Так вот насчет БД, нет нет и еще раз нет, я выполняю так скзать самоупражнения и вот в одной части и понадобилось вот это. Еще раз огромное спасибо. просто освоив принципы, будет легче в том же Java и Flash ну и тд и тп разумеется, все построено так близко.

ifstream ifs(argv[1]) вот это подразумевает открытия потока ? просто я на С++
ifstream.open(file)
while (! if_stream.eof())
{
if_stream.get(symbol)
if(n < nmin)
nmin = n;
if(n > nmax)
nmax = n;

так ведь можно? ладно забейте, я коментарии напишу и бутед понятно где я туплю, мне ведь надо понять принципы а не протсо тупо откомпилировать. ЕЩЕ РАЗ СПАСИБО
...
Рейтинг: 0 / 0
13.10.2005, 02:10
    #33321381
GrEEN@q
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый ввод-вывод
имел ввииду
while (! if_stream.eof())
{
if_stream.get(n)
if(n < nmin)
nmin = n;
if(n > nmax)
nmax = n;
}
...
Рейтинг: 0 / 0
13.10.2005, 03:19
    #33321399
redskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый ввод-вывод
GrEEN@q
ifstream
ifs(argv[1]) вот это подразумевает открытия потока ? просто я на С++
ifstream.open(file)


Код: plaintext
1.
  ifstream  ifs(argv[ 1 ]);

Создает объект типа ifstream, т.е. файловый поток ввода. Имя файла берется из первого параметра командной строки - argv[1].

По поводу

Код: plaintext
1.
2.
3.
4.
5.
ifstream.open(file)
...
while (! if_stream.eof())
...
if_stream.get(symbol)

и пр.

Можно так писать, но зачем?

В нашем случае конструктор и так откроет файл, можно обойтись без явного open().

Раз уж мы читаем целые числа, давайте пользоваться оператором ввода, т.е. >>. Который во-первых нормально обработает все пропуски (пробелы, табуляции, перевод каретки, левые символы и пр), а во-вторых вернет ссылку на поток, благодаря чему можно проверить результат операции.

По основам С++, т.е. совсем начальный уровень (но не ужас "для чайников" или "за 21 день") рекомендую хорошие книги:

"Основы программирования на С++."

Автор: Стенли Б. Липпман Издательство: Вильямс, 2002

Эффективное программирование на С++. Серия C++ In-Depth

Авторы: Эндрю Кёниг Барбара Му. Издательство: "Вильямс", 2002
...
Рейтинг: 0 / 0
13.10.2005, 23:12
    #33323891
GrEEN@q
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый ввод-вывод
Почему нельзя внести
nmin = n;
nmax = n;
в цикл while? Да компилится с ошибкой(возврощает тогда одинаковые значения , но мне кажется что if(ifs >> n) и
и while(ifs >> n) ведь имеет один смысл----пока происходит чтение файла!
Тоесть
while(ifs >> n)
{
nmin = n;
nmax = n;
if(n < nmin)
nmin = n;
if(n > nmax)
nmax = n;
}
так не фурычит.
И еще, вы используете что-нибудь для задержки вывода на дисплей?
...
Рейтинг: 0 / 0
13.10.2005, 23:16
    #33323893
GrEEN@q
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый ввод-вывод
Или просто необходим else? поскольку во внешнем IF он был и тогда для внутренних if-ов он небыл нужен чтоли.

Если еще не такой напряг поднимать из-за такой чепуховой програмки дискуссию, то был бы очень благодарен.
...
Рейтинг: 0 / 0
14.10.2005, 06:59
    #33324015
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый ввод-вывод
Хорошо. Раз ты не понимаешь что тут написано, объясню популярно (см. комментарии)...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
#include <iostream> //Описываем прототипы функций, используемых
#include <fstream> //в программе

using namespace std;
//Программа принимает входные параметры, т.е. ее запуск осуществляется 
//как: <progname> <filename>
int main(int argc, char* argv[]) 
{
	if(argc >  1 ) //Если параметр передан, то работаем
	{
		int n, nmin, nmax;//Объявляем необходимые переменные
		ifstream ifs(argv[ 1 ]); //Открываем файл <filename>
		if(ifs >> n) //Если в файле есть данные
		{
			nmin = n; //Предполагаем, что это число одновременно
			nmax = n;// минимальное и максимальное из всего набора
			while(ifs >> n) //Пока в файле есть данные
			{
                            //Если очередное число меньше, чем сохраненное
                            //в переменной, то оно становится минимальным
				if(n < nmin)
  				nmin = n;
                            //Если очередное число больше, чем сохраненное
                            //в переменной, то оно становится максимальным
				if(n > nmax)
					nmax = n;
			}
                        //Выводим результат работы программы
			cout << "min = " << nmin << endl << "max = " << nmax;
		}
		else 
			cout << "ops"; //В исходном файле данных нет
	}
	return  0 ;//Конец работы программы
}

Теперь разберем твой алгоритм:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
...
while(ifs >> n) //Пока есть данные в файле
{
  nmin = n; // Предполагаем, что число одновременно минимальное
  nmax = n;// и максимальное из всего набора

  //А эти инструкции в данном контексте бесполезны...
  //(вопрос студенту: Объясни почему?)
  if(n < nmin)
     nmin = n;
  if(n > nmax)
    nmax = n;
}
И еще:
автор
... компилится с ошибкой

Это означает, что компилятор выдал сообщение об ошибке. В данной программе такого быть просто не может!
...
Рейтинг: 0 / 0
15.10.2005, 00:23
    #33326246
GrEEN@q
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый ввод-вывод
Д у м а ю.....
...
Рейтинг: 0 / 0
15.10.2005, 00:25
    #33326247
GrEEN@q
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый ввод-вывод
Насчет компилится с ошибкой я имел ввиду что выдается результат с неправильной логикой.
...
Рейтинг: 0 / 0
15.10.2005, 00:32
    #33326250
GrEEN@q
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый ввод-вывод
while(ifs >> n) //Пока есть данные в файле
{
nmin = n; // Предполагаем, что число одновременно минимальное
nmax = n; // и максимальное из всего набора
тоесть получается я уже предопределил их все остальные итерации не имеют смысла. Значит все в одном цикле делать нельзя, мда.....

if(n < nmin)
nmin = n;
if(n > nmax)
nmax = n;
}
...
Рейтинг: 0 / 0
15.10.2005, 00:36
    #33326253
GrEEN@q
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Файловый ввод-вывод
Пасибо за коментарии.... все давно уже работает хорошо, теперь буду разбираться во всех тонкостях( почему так а не этак или так а не на оборот:))
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Файловый ввод-вывод / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]