Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Для новичков > Ввод целочисленного массива из файла |
Автор: Faust666 28.3.2008, 14:44 |
Задан вектор A , максимальный размер 100 элементов. Элементами вектора являются целые числа. Файл имеет следующую структуру: • N – число элементов в векторе А; • строка или строки, содержащие значения элементов вектора А; Необходимо ввести этот массив из файла, нигде не могу найти конкретного примера, до С++ изучал только паскаль, там все делалось 1 функцией и простым циклом, в С++ же нашел на эту тему с десяток различных функций, но так и не понял как с ними работать. Прошу привести элементарный пример этой реализации. |
Автор: Mephisto 28.3.2008, 18:07 | ||||
Файл:
|
Автор: Faust666 29.3.2008, 00:16 |
Хм, а где в вашем примере массив целых чисел, в который надо производить ввод? И почему в файле вместо цифр слова? |
Автор: archimed7592 29.3.2008, 02:32 | ||
Faust666, то был пример как читать из файла. Вот тебе пример аж с двумя реализациями(писал здесь, могут быть ошибки)
|
Автор: inside_pointer 29.3.2008, 10:49 | ||||
Придумай чо-нибудь как правильно массив создать(там есть какие-то операции типа выделить память и всё такое), этот код работает.
|
Автор: bsa 30.3.2008, 12:27 |
inside_pointer, вот только это не С++ ![]() |
Автор: inside_pointer 30.3.2008, 14:28 | ||
А он основ не знает, не может массив найти, а основы С++ в С ![]()
|
Автор: Mephisto 31.3.2008, 09:03 |
Вообще-то из условий задан вектор А. Теперь и я не могу массив найти. ![]() |
Автор: Graf_h 31.3.2008, 09:45 | ||||
и не нужно цыкла for(...); |
Автор: inside_pointer 31.3.2008, 12:54 | ||
Одномерный массив - это не вектор чтоли ?
|
Автор: archimed7592 31.3.2008, 13:34 |
Нет, конечно ![]() Кстати, если я не ошибаюсь, твой код violates ISO-C++(да, я знаю, что он соответствует C99, но не считаю, что целесообразно учить человека, желающего изучить С++ тем вещам, которые не будут там работать)... |
Автор: Mephisto 31.3.2008, 15:32 | ||||
Graf_h, первым числом в файле идет количество элементов в файле! Его не нужно пихать в сам вектор. А числа которые идут после определенного числа из задания совершенно непонятно что с ними делать! Зачем их в вектор-то пихать? Т.е. если файл:
В векторе должно быть
В задании не сказано что в вектор должны попасть 124 и 125! А тем более 3 |
Автор: Mephisto 31.3.2008, 16:05 | ||
Graf_h, вот структура файла:
Твой вариант, каким бы пластичным он небыл, но не решает поставленной задачи ![]() |
Автор: Graf_h 31.3.2008, 16:21 | ||||
Mephisto, cмотрите какая красота + проверяет елемент на соответствее типа int. вот вам пластика ![]() P.S програмирование это исскуство |
Автор: inside_pointer 1.4.2008, 11:25 | ||
Я думаю надо учить его определять где массивы, а не с векторов начинать, а что у меня в коде не будет работать ? Я только память не стал выделять. |
Автор: Mephisto 1.4.2008, 11:40 | ||
Хорошо что ты так думаешь, но для начала в задании четко сказано что нужен именно вектор! ![]() А на счет массивов вопрос спорный. Я уже и не припомню когда приходилось использовать массивы в чистой форме. Как по мне редкая задача. Оператор [] частенько юзаю, массивы в чистом виде - нет. Хватает векторов, списков, хеш таблиц... |
Автор: inside_pointer 1.4.2008, 16:10 | ||||
Так я знаю что вектор это и есть массив, как бы archimed7592 меня не переубеждал.
Так ты и не пишешь задачки типа прочитать числа из файла, для такой простой задачи многа букф, тем более человеку после Паскаля понимать векторы эти, они обычно не знают что массивы с нуля начинаются. Какой смысл ему объективно программировать, если он только начинает, или что прямо есть такой смысл, ничего не понимая писать сложные коды ? тогда как он их будет писать, через копи/пейст ? А ты его спроси он понял хоть одну строчку, или это то же самое что он нашёл до ? |
Автор: Mephisto 1.4.2008, 16:45 | ||
Я пишу собственно сам на дельфине, ничего, массивы тоже не использую. ![]() Объективно хорошо сказано... Задача так стоит, реализовать на СиПиПи вектор с числами, конечно можно человеку тетрис предложить что круче естественно. Знаешь, если не вникать в суть, то копипастить и массивы можно неплохо. ![]()
Это есть решение поставленной задачи, если человек не понял, то пусть задает вопрос что именно не понятно. Можно попробовать и обьяснить. Да, кстати, а где топикстартер? |
Автор: archimed7592 1.4.2008, 21:04 | ||||
Ага. Это фича C99, которой в legacy C++ пока нет.
Я не собираюсь никого переубеждать против их воли: хочется жить в своём узком мирке и категорично отказываться от расширения кругозора - на здоровье.
Думаю, что целесообразно дождаться топикстартера и посмотреть что он скажет. Возможно, что его умственные способности не так скромны, как ты пытаешься их выставить, и он отлично понял все строки. В общем разговор ни о чём("а он хотел так", "а ему нужно вместо этого нужно вот это", "а ..."). |
Автор: inside_pointer 2.4.2008, 04:49 | ||||||||
Тогда давай ему ассемблер, он как раз научится и будет векторы понимать в самой их сути, я за то чтобы если человек не знает где массив показать ему где массив. А по твоему получается что если он в твоём коде не разберётся, то у него скромные умственные способности, нормально да?
Я имел ввиду функцию malloc(), а не new и delete
Но при этом понимать их легко, потому что у него уже есть опыт работы с ними.
Я за массивы, они надёжные, всегда знаешь сколько памяти он жрёт и всё такое. |
Автор: archimed7592 2.4.2008, 07:00 |
Кто о чём, а... Короче забей. |
Автор: bsa 2.4.2008, 16:39 | ||||||
Рекомендую почитать книжки по С++. В частности, Мейерса и Александреску 101 совет. std::vector - это и есть массив. Собственно, сам вектор содержит три указателя: начало данных, конец данных, конец резерва данных. Это единственная плата за его использование (не считая, что для ускорения работы память выделяется экспоненциально, но резервом можно управлять). Если ты считаешь, что она чрезмерна, то читай еще один совет из той же книги - про преждевременную оптимизацию. кстати, получить доступ к массиву элементов можно так:
|
Автор: inside_pointer 4.4.2008, 01:52 | ||||
Что и требовалось доказать ![]()
Не, для паскалиста, нужно будет ещё книжку купить, потом потратить время на неё, изучая синтаксис, вместо того чтобы сразу записать всё на массивах, а когда нужны указатели на начало и конец, изучить указатели ещё. |
Автор: Mephisto 4.4.2008, 14:52 | ||
А есть вариант при котором это можно избежать? ![]() |
Автор: inside_pointer 4.4.2008, 15:18 |
А он знает массивы уже, вот тебе и вариант, что зная их там он знает их уже здесь. А чтобы понять запись вектора знаешь сколько времени ему нужно будет на это потратить, а операции с непонятным вектором, а отладка малопонятных операций с непонятным вектором. |
Автор: Mephisto 5.4.2008, 13:07 | ||
Кто знает?
Если ты не понимаешь векторы, это не означает что весь мир их не понимает. Посмотрел один раз реализацию и стало понятно как они реализованы. Что тут сложного-то. |
Автор: bsa 6.4.2008, 16:15 | ||
Опять же, читаем книжки, например С. Мейерс "Эффективное использование STL". Там все написано. Вектор реализуется в виде обычных массивов, доступ к элементам которого очуществляется через указатели. В итоге, скорость работы с ним не ниже, чем с сишными массивами (если, конечно, не включен режим отладки библиотеки STL), а удобство программирования и безопасность итогового кода гораздо выше. |
Автор: J0ker 2.10.2008, 07:06 |
ну inside_pointer в некоторм смысле прав - непонимание многих вещей в C++ коренится в незнании "как это устроено" на низком уровне. Тупой кодинг (да-да, можете начинать еня пинать прямо здесь) еще прокатит в VB, но C++ слишком близок к железу, что-бы его (железо) игнорировать. Зная основы (которые как правильно было замеано лежат в plain C, и еще глубже - в ассемблере) можно тупую зубрежку непонятных правил заменить глубоким пониманием откуда сии правила проистекают - что в разы сокращает сроки обучения - лучше день потерять, а потом за пять минут долететь. ЗЫЖ сорри за некрофильство - не обратил внимания на дату ![]() |
Автор: inside_pointer 3.10.2008, 07:09 |
да задание по ходу про вектор было, но прощаться с базовыми понятиями тоже нельзя cpp не идеальный, сейчас там вектор одно завтра другое послезавтра третье кому что короче |
Автор: bsa 6.10.2008, 00:00 | ||
Если пользоваться открытыми интерфейсами, то проблем быть не должно. Есть определенные гарантии поведения вектора. |