Parilo
14 / 2 / 0
Регистрация: 18.11.2011
Сообщений: 90
|
||||||
#1 | ||||||
Разница между двумя идентичными программами - C++08.11.2012, 20:18. Просмотров 627. Ответов 15
Метки нет Все метки)
(
Объясните разницу между двумя абсолютно идентичными программами.
Программа 1, в текстовом файле где записаны 10 слов, нужно поменять 1 , 6, K-тый и последнее слово. Программа 2, в текстовом файле где записаны 10 чисел, нужно поменять 1, 5, K-тый и последнее число. Обе программа работают, но в 21 строке 1 программы я пишу while (j<i), а в 19 строке 2 программы while (j<i-1). Почему???
0
|
|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
|
08.11.2012, 20:18 |
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Разница между двумя идентичными программами (C++):
15
Разница между программами - C++ Взаимодействие между двумя программами - C++ Взаимодействие между двумя скомпилироваными программами - C++ Как организовать обмен данными между двумя разными программами? - C++ Какая разница между двумя алгоритмами? - C++ Разница между двумя библиотеками потоков - C++ |
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
|
|
08.11.2012, 21:56 | #2 |
то что здесь написано разве работает?
0
|
Parilo
14 / 2 / 0
Регистрация: 18.11.2011
Сообщений: 90
|
|
09.11.2012, 08:19 [ТС] | #3 |
Да работает. Скопируйте и проверьте, если не верите. Причём совершенно одинаково работают.
Добавлено через 9 часов 6 минут Так кто-нибудь сможет дать ответ или нет? Я написал идентичные программы методом тыка, но не понимаю почему j<i в первом случае, а во втором случае j<i-1. Если есть возможность узнать у профессиональных программистов, спросите пожалуйста. Мне не у кого спросить, кроме как на этом форуме. Спасибо заранее.
0
|
alsav22
5434 / 4829 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
09.11.2012, 09:53 | #4 | |||||
Вы у себя спросите: почему вы в первом примере написали while (j<i)? i, в двух примерах (при 10 считываниях), равен 11. Последнее знчение (десятое) вы правильно записываете по индексу i - 2 = 9, т.е. в a[9]. Потом, в цикле, запись в файл. Выход из цикла будет при j = 11, значит последнее, что запишется в файл: a[10]. А что там, если десятое значение находится в a[9]? Сделайте в цикле:
Во втором примере всё правильно сделано.
1
|
SatanaXIII
Супер-модератор
![]() |
|||||||||||||||||||||
09.11.2012, 10:10 | #5 | ||||||||||||||||||||
В первом случае последняя итерация избыточна. То есть в первом случае правильнее писать, как и во-втором
Тогда в массив a записывается только 10 строк. Начиная с a[0] по a[9]. Но так как массив был объявлен на 100 элементов, то все оставшиеся элементы у нас уже заранее объявлены пустыми. И нам не заметно, что в выходной файл на самом деле в конец дописывается пустая строка. Вот и все различие. А вообще, по хорошему, надо переделать момент
Что-то типа
Не по теме: Совершенно к делу не относится, но Ближнее небо - Золотой лес
1
|
alsav22
5434 / 4829 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
09.11.2012, 10:28 | #6 | |||||
И считывание с файла лучше так не делать. Последнее считывание - это чтение конца файла, при этом i увеличится. Лучше, например, так делать:
1
|
Parilo
14 / 2 / 0
Регистрация: 18.11.2011
Сообщений: 90
|
|
09.11.2012, 12:47 [ТС] | #8 |
Спасибо большое за разъяснения.
Но меня мучает единственный вопрос. Почему в первом примере работа со строками хотя я пишу "неправильно" while (j<i), программа работает правильно. Если я даже её исправлю while (j<i-1) он тоже работает правильно. А во втором примере работа с числами он работает правильно только в одном случае while (j<i-1). Почем в 1 варианте при неправильном коде, программа работает правильно? Вот последний вопрос. Спасибо заранее.
0
|
Parilo
14 / 2 / 0
Регистрация: 18.11.2011
Сообщений: 90
|
|
09.11.2012, 12:59 [ТС] | #10 |
0
|
alsav22
5434 / 4829 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
09.11.2012, 13:00 | #11 |
0
|
Croessmah
Ушел
|
|||||||||||
09.11.2012, 13:08 | #12 | ||||||||||
Вам уже объясняли, что у Вас выход за границы происходит, при считывании все нормально, но при записи за границы массива произойдет ошибка.
попробуйте поменять строчку
0
|
alsav22
5434 / 4829 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
09.11.2012, 13:15 | #13 |
У меня и в первом случае ошибки при работе нет и во втором. Просто, во втором случае, в файл мусор из массива в конец файла запишется, и это будет видно. А в первом случае, в конец файла запишется пустая строка, и это незаметно. Но если открыть файл после записи и переместить курсор в конец до упора, то будет видно, что между курсором и последним словом две пустые строки. Одну endl сделал, а одну - та самая лишняя пустая строка из массива строк.
Добавлено через 3 минуты Croessmah, у ТС выхода за границы массива нет. У него массивы на 100 элементов, а пишет 10. У него, при записи в файл, выход за границу записанных в массив значений.
0
|
alsav22
5434 / 4829 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
09.11.2012, 13:24 | #15 |
Согласен, но у него вопрос по конкретному коду.
0
|
09.11.2012, 13:24 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
09.11.2012, 13:24 |
Привет! Вот еще темы с ответами:
15
Связь между программами - C++ Передача данных между программами - C++ Обмен данными между программами - C++ Переключение между программами в source files - C++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |