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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2012, 08:49   #1
Parilo
Новичок
Джуниор
 
Регистрация: 09.11.2012
Сообщений: 2
По умолчанию Разница между двумя идентичными программами

Объясните разницу между двумя абсолютно идентичными программами.
Программа 1, в текстовом файле где записаны 10 слов, нужно поменять 1 , 6, K-тый и последнее слово.
Программа 2, в текстовом файле где записаны 10 чисел, нужно поменять 1, 5, K-тый и последнее число.

Обе программа работают, но в 21 строке 1 программы я пишу while (j<i), а в 19 строке 2 программы while (j<i-1). Почему???
P.S. Я написал эти программы методом тыка, не понимая почему приходится в одном случае писать while (j<i), а в другом while (j<i-1). Объясните причину пожалуйста?
////////////////////////////////////////////////////////////////////////////////////////////////////////////
Код:
1. #include <iostream>
2. #include <fstream>
3. #include <string>
4. using namespace std;
5. int main ()
6. { ifstream f("hw6file.txt");
7. string a[100];
8. string s;
9. getline (cin,s);
10. int i=0, k;
11. cin >>k;
12.
13. while (f>> a[i++]);
14.
15. a[0]=s;
16. a[5]=s;
17. a[k]=s;
18. a[i-2]=s;
19. ofstream g("hw6file.txt");
20. int j=0;
21. while (j<i)
22. {g<<a[j]<< endl;j++;}
23.
24. return 0;}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
Код:
1. #include <iostream>
2. #include <fstream>
3. using namespace std;
4. int main ()
5. { ifstream f("hw5file.txt");
6. int a[100];
7. int k,x;
8. cin >> k >>x;
9. int i=0;
10.
11.while (f >> a[i++]);
12. a[0]=x;
13. a[4]=x;
14. a[k]=x;
15. a[i-2]=x;
16.
17. ofstream g("hw5file.txt");
18. int j=0;
19. while (j<i-1)
20. { g<<a[j]<< endl; j++;}
21. return 0;}

Последний раз редактировалось Stilet; 09.11.2012 в 12:11.
Parilo вне форума Ответить с цитированием
Старый 09.11.2012, 09:13   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

А не пробовали во второй программе написать так же как в первой: while j<i?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 09.11.2012, 09:32   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Потому, что цикл while (f >> a[i++]); это цикл с предусловием. Тоесть, если даже файл пустой, то цикл выполнится хотя-бы один раз и значение i будет иметь значение на единицу больше, чем количество элементов находящихся в этом файле.
Если Вы хотите иметь точное значение элементов, используйте цикл с постусловием - do{}while(...);
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 09.11.2012, 10:37   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Тоесть, если даже файл пустой, то цикл выполнится хотя-бы один раз
То выражение условия будет вычислено (со всеми полагающимися побочными эффектами) хотя бы один раз, наверное?
Abstraction вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск маршрутов между двумя городами между n городов DorianMark Паскаль, Turbo Pascal, PascalABC.NET 11 09.11.2011 00:46
Разница между двумя время xxbesoxx БД в Delphi 2 15.08.2011 23:11
Разница между двумя датами (целые дни) Droid Общие вопросы Delphi 15 03.11.2009 23:36
Разница между двумя datetimepicker Droid Общие вопросы Delphi 3 24.09.2009 23:20
Разница между двумя Bitmap Seqular Общие вопросы .NET 2 25.04.2009 17:31