![]() |
|
Модераторы: bsa |
![]()
|
|
| KasMP |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Я хочу прочитать строку из файла.
Если делать это так, как ниже, то все ок:
Но если сделать то же самое (прочитать строку из файла) в процедуре:
то возникает какая-то чудовищная ошибка, в которой я ничего не понимаю:
Имхо по сути написано 100% одно и то же, только второй случай более общий и расширяемый. Какая ему разница, если одно и то же Помогите, пожалуйтста!!! Я из-за этой ошибки уже полтора часа не могу заняться непосредственно той программой, которой нужно |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
передавать поток надо по ссылке :
а также смущают как минимум две вещи : 1. почему размерность не указана ?: 2.тут ИМХО лучше использовать get, тогда можно контролировать размер считываемого буфера или считывать, например, в string. да и вобще си-строки в с++ программе настораживают.. Это сообщение отредактировал(а) mes - 21.12.2008, 13:01 |
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Спасибо большое Мне это тоже не нравится (по идее, new должна знать, сколько памяти надо выделить). Но если мы можем узнать кол-во памяти только тогда, когда прочитаем строку из файла, то что делать
Да, возможно Вообще у нас С (с редкими элементами С++) А как максимум |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
считывать часть файла размером не больше буффера, вариантов много . вот описание потока http://www.cplusplus.com/reference/iostream/ifstream/ http://www.cplusplus.com/reference/iostrea...ator%3E%3E.html
Добавлено через 3 минуты и 49 секунд лучше промолчу Это сообщение отредактировал(а) mes - 21.12.2008, 13:38 |
||||
|
|||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Потому как не знаю твоей задачи, а по контексту не очень понятно. К примеру я не вижу смысла в нужности реализации этой функции в том исполнении в каком она представлена. Функциональность какую пытаешься вынести в функцию уже реализована у потока. Это сообщение отредактировал(а) mes - 21.12.2008, 13:58 |
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Если я правильно поняла, то здесь написано, как ограничить размер того, что считается, чтобы буфер не переполнился. Но мне-то это чем поможет с начальным вопросом? Начальный вопрос был такой: как я могу в
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
то есть читать блоками, а размерность указывать для блока. |
|||
|
||||
| KasMP |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Собственно, полностью задачка звучит так:
Добавлено @ 14:04 Как читать - понятно. А как объявить (какую размерность указать "в new char[]") - непонятно Добавлено @ 14:08
А в самой программе я хочу написать так:
Добавлено через 10 минут и 5 секунд Вообще говоря, чтение из файла - не главный моментэтой задачки. Не надо так на нем зацикливаться. Это сообщение отредактировал(а) KasMP - 21.12.2008, 14:09 |
||||||
|
|||||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
А саму задачку я (пока) хочу делать так.
Считали две строки в s1 и s2. Потом размещаем каждую из этих строк в списке (при этом делаем это задом на перед: первые разряды в начале списка, каждый указатель ведет к бОльшему разряду - так складывать удобнее), список завершаем указателем на NULL. Пусть в первом списке больше элементов, чем во втором (перед передачей в функцию их несложно выстроить в правильном порядке). Потом встаем на начала списков (т.е. на самые первые разряды) и делаем два цикла:
Вот, это мой скромный алгоритм Это сообщение отредактировал(а) KasMP - 21.12.2008, 14:24 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
неужто Вам задания в таком виде дают ?
Мне например абсолютно не понятно кого надо складывать.. Предполагаю что в каждом файле одинаковое кол-во чисел и надо сложить числа с одним индексом с разных файлов. Не понятно также, что считается раздeлителем между числами - предполагаю перевод_строки. ну да это мелочи. В простейшем случае выделяете массив заведомо больше любого числа, и считывать с помощью getline - istream& getline (char* s, streamsize n, char delim ); Иначе считываете мелкими порциями с помощью get, и добавляете его (или его часть, если в блоке присутствует раздилитель) в основной буфер для числа. Но в этом случае нужен динамически расширяемый буффер и потому намного удобнее будет использовать std::string (или vector смотря что использовано для дляинной арифметики) тем более, что стек будете же использовать стловский ? Добавлено через 8 минут и 30 секунд Заводите класс для числа длинной арифметики. Перегружаете потоковые операторы для считывания/записи этого числа из файла Организуете стековый список и считываете числа туда. Это сообщение отредактировал(а) mes - 21.12.2008, 14:29 |
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Да С другой стороны, такие формулировки сразу позволяют выявить тех, кто вдумывается, а кто - нет.
Это плохо. Много памяти уйдет непонятно куда. Я так не хочу. И за каждой мелкой порцией обращаемся к винчестеру. Пусть даже данные с винчестера и считываются не посимвольно, а заносятся частями в буфер, все равно так не надо делать - это нерационально. Нет, конечно. Свой. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
А как Вы думаете чем считывание с потоков отличается от простого считывания с файла ? |
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
||||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Вот кусочек программки, вроде бы правильно:
Только странно называть самый обычный список стеком... |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
стек отличается от других видов контейнера тем, что у него есть доступ только к верхним/нижним элементам. фактически стек является адаптером над контейнером, ограничивая его для придания нужно интерфейса. ну тогда класс - это структура данных с набором функций для нее. так получилось .. сам не заметил.. привычка Нет. Тем что за потоком не стоит определенного устройства, точнее сказатьи мы не знаем что там на самом деле. То есть поток сам решает как оптимально использовать то устройство, которое он скрывает. |
|||
|
||||
| KasMP |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Ну а теперь моя любимая программка при самом обычном присвоении целочисленной переменной значения выдает ошибку:
![]()
Я совсем не знаю, что думать (строчка с номером 10):
|
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
прежде всего откуда удаление ?
это этически некоректно удалять в процедуре то, что в ней не создано (за исключением случаев, когда функция явно для этого предназначена) и судя по всему явно не это ожидалось. во вторых почему в функцию сложения передается стек ?? Это сообщение отредактировал(а) mes - 21.12.2008, 17:01 |
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Я удаляю числа предыдущего разряда, который уже сложен и, соответственно, больше никогда не потребуется.
Победила такая мысль: если не удалять здесь, то тогда придется создавать еще одну процедуру для удаления и снова проходить по тем же самым ссылкам по второму кругу. Эмм... В смысле?? Я передаю указатели на начало списков (где самые первые разряды) и указатель на строку-результат. Потом иду по списку, складываю (и удаляю уже сложенное)... |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
это называется использованием магических чисел и такой подход очень плох. лучше так: int(present1->c-'0')+int(present2->c-'0')+mental; |
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Ошибка на 10-ой строке, до удаления даже не доходит...
Добавлено через 1 минуту и 5 секунд
Спасибо большое. Так правда намного лучше и понятнее |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Сложение (сам механизм) не должно быть реализовано в функции работающей со стеком. Разделите функционал на смысловые части.. Именно поэтому я предлагал начать с класса (читать: описания) "длинной" переменной. Добавлено через 1 минуту и 12 секунд Пока не знаю до чего доходит.. но глаз режет.. поэтому и высказал |
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Да, кстати, без этого эту функцию смотреть бесполезно:
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
1. Передаются два стека, а результат весь умещается в одну строку ? 2. а на какой длины буффер указывает res ? это не стек, это список Это сообщение отредактировал(а) mes - 21.12.2008, 17:19 |
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
По идее, да. Надо бы, конечно... Но там получится такая мааааааленькая функция, в которую придется много всего передавать. Как-то странно такой маленькой функции отводить так много памяти и "передаваний". |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
неправда, для сложения требуется два аргумента, и сумма как результат. Это сообщение отредактировал(а) mes - 21.12.2008, 17:22 |
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Я знаю и говорю про это с самого начала!!!!!! Ну а почему бы и нет? Взяли число из первого "стека", взяли число из второго, сложили, получили число в res. На один символ больший, чем длиннейшее число (чтобы вошла единичка, если, например, 999+2=1001). Добавлено через 2 минуты и 11 секунд Что именно? То, что это странно или то, что ей можно передать меньше, чем я предполагаю? (а я предполагаю mental, один из указателей на "стек", и указатель на нужную позицию в res) Добавлено через 3 минуты и 7 секунд Ну а если я поделю, то суть прораммы все равно не изменится и ошибка будет так же вылетать... Добавлено через 6 минут и 22 секунды А вот главная функция. Пусть будет (она пока не закончена: вывода в файл нет, файлы не закрыты и т.п.; но это не так важно...)
|
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ну а исправлять когда будем ?!
дело не в том что делает функция, а в том как выглядит ее объявление.. Лично я воспринимаю что такая функция должна сложить два стека,а не определенные его элементы.
покажи как все это происходит. и ни о каких стеках речи нет. Это сообщение отредактировал(а) mes - 21.12.2008, 17:31 |
||||
|
|||||
| KasMP |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Неправда Во-первых, у меня аргументов не всегда 2 (можно сделать и всегда 2, конечно... но наврядли производительность от этого выиграет). Во-вторых еще есть mental... Его тоже надо помнить и перезапоминать при сложении каждого разряда. Добавлено через 2 минуты и 38 секунд Соответствующий кусочек main():
Ну, ты называешь аргументом символ, я называю указатель на символ |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Вот тебе (не программе) сказали что надо сложить два числа. Tебе кто-то должен передавать ментал ? Вот подумай как бы ты решила такое задание и объясни компу. В смысле бывает и меньше ?? Ну ка сложи мне 1 и .. не.. не так... сложи 1. Логично, а ? |
|||
|
||||
| KasMP |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
esc и res - указатели на символ Добавлено @ 17:41
Да что-то такое Ты складываешь поразрядно (столбиком, проще говоря; перед сложением второго разряда тебе передают mental=1): 4569 111 4680 Если тебе не передавать mental, то ты сложишь так: 4569 111 4670
(женская логика?) Ну ты складываешь, скажем, 11111111111 и 1: Конечно, можно складывать и так: 11111111111 00000000001 11111111112 Но имхо лучше сложить 1+1, потом увидеть, что во втором числе остальных разрядов нет и приложить остальные разряды первого!! Это сообщение отредактировал(а) KasMP - 21.12.2008, 17:47 |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| KasMP |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Ну число, какая разница Добавлено через 1 минуту и 24 секунды
Ну, сначала нет... Но потом mental мне потребуется и я буду его сама себе передавать при сложении каждого разряда. |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Ты должна сделать функцию не сложения разрядов, а сложения чисел - а как она будет считаж столбиком или по другому - это нас не касается. Добавлено @ 17:49
Представь я вызов (клиент), ты функция (сервер) : я тебе даю два числа.. У тебя есть листик, карандаш (а может калькулятор я ведь не вижу) ты считаешь и отдаешь мне результат.. ничего больше никому передоваться не должно ! Это сообщение отредактировал(а) mes - 21.12.2008, 17:50 |
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Так это и делает функция Addition: ей дали два числа (указатели на начала списков), она дала указатель на res (на результат). |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
давать надо не указатель на список! и не его элемент! а "значение" элемента списка! то есть вызов должен быть Add (stack->value, stack->value, res ); |
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
А элемент списка и его значение - не одно и то же?? Ты, возможно, рассердишься, но ... куда девать то, что получится в уме |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
вот декларация функции : void lvAdd (const char * a1, const char * a2, char * res); реализовывай Добавлено через 4 минуты и 36 секунд для операций над числами забудь вобще что у тебя где то список , стек и вобще все остальное. У нас есть число, оно представлено как си-строка , больше ничего нам не нужно. |
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Я так же буду размещать цифры это супер-длинного числа в списке, потом складывать столбиком. Вообще говоря, довольно интересен ответ на вопрос о том,почему не работает уже написанная программа? Что такого необычного в
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
я в принципе хотел, чтоб Вы сами ее нашли, к чему бы Вы пришли, если послушались совета. но раз уж так сильно хотите оставаться при своем коде - пожалуйста.. Вылетаeт из за (3), но (2) тоже могла бы явиться причиной, ну а из за (1) у вас результат сложения неправильный.. P.S. в этом посте обращение на "Вы" намерянное Это сообщение отредактировал(а) mes - 21.12.2008, 20:41 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| KasMP |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
При следующем проходе цикла while Мы перешли не к след.числу, а к след.разряду Элемент списка - не число, а разряд Разумеется Ну, по-моему, логично как можно раньше избавиться от ненужного
Ой!!! Я забыла вызвать CreationStack
К сожалению, хочу, потому что время поджимает. Но в зимние каникулы с радостью сделаю все идеально Становится все интереснее Я согласна с этим, но ... не сейчас Добавлено через 2 минуты и 47 секунд Вот, я добавила в соответствующее место в main два CreationStack. Вылетает та же ошибка Попробовала сначала все-таки инициализировать h1 и h2, потом вызывать создание "стека". То же самое "Стеки" заполняются правильно, а потом после входа в Addition на этой магической строчке все вылетает... Странно. |
||||
|
|||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Так сделать понормальному уйдет час, а Вы день потратили на переборку кода )
догадайся ) То есть число представлено стеком, так еше на основе списка ?? a кто то говорил, что она экономная а массив чисел загружаемых с файла чем является ? боюсь что не только.
Не вижу не верю |
||||||
|
|||||||
| KasMP |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Было уже поздно что-то менять. Теряюсь в догадках Ну да... ?? Прочитали в строку число. Каждый символ строки - элемент списка. Зачем каждый мизерный кусочек кода сюда вставлять? Я дополнила CreationStack строчкой вывода:
В итоге у меня цифры 1) выводились; 2) в правильном порядке.
Добавлено через 11 минут и 25 секунд не знаю, она работает так: получает инициализированный указатель на структуру и символ, внутри себя создает текущий указатель, для начала приравнивает его к указателю на голову списка, потом первому "c" присваивает последний символ строки, инициализирует следующий за текущим указатель, сдвигает текущий указатель и т.д. по кругу, последний текущий указаетль приравнивает у нулю |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
и все таки стек надо реализовывать для чисел, а не для цифр. вот длинная арифметика :
осталось загрузить числа в стек, сложить их и отправить результат в файл. Это сообщение отредактировал(а) mes - 22.12.2008, 17:40 |
|||
|
||||
| KasMP |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Красиво получилось !
Да, у меня все загрузилось P.S.. Видимо, ты в некоторых местах специально чуть-чуть ошибся, чтобы я поискала Добавлено @ 10:33 И я даже все поняла с первого раза
Это сообщение отредактировал(а) KasMP - 24.12.2008, 10:52 |
||||
|
|||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Не прочь бы взглянуть на заключительный код .. интересно насколько разобралась с моей частью.
вполне возможно.. конкретного теста не делал.. но тоже интересно узнать где. Это радует не знаю ( .. не задумывался.. поставил инстинктивно, так как он по смыслу больше подходит.. это надо спросить кто лучше разбирается )
Наше струиктура есть хранилище т.е ее можно расматривать как указатель.. смысл кода такой :
сам текст условный.. можно ничего не выводить |
||||||
|
|||||||
| xvr |
|
||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Ломается из за этого Смотрим функцию Addition
Кстати, нормальные компиляторы конструкцию new char[] трактуют как ошибку:
VC трактует ее как new char[0], почему то мне кажется, что это не то, что ожидалось Это сообщение отредактировал(а) xvr - 24.12.2008, 19:06 |
||||||||||
|
|||||||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| KasMP |
|
||||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Это даже не ошибки, а какие-то опечатки
Я поправила на unsigned int, чтобы избежать лишних вопросов (на которые я пока совсем не отвечу)... Это мне тоже ни о чем не говорит. Нельзя. Без этой, извиняюсь, фигульки вылетает ошибка, из-за которой была создана тема (опять потоки
Может и удачней, потому что не читавший этот код не знает, кто такой "lv", а "0" в месте, где ожидается число (пусть и длинное, представленное символами), будет понятен всем.
Пожалуйста, держите прикрепленное к вашему творению
Ну и комментарии я написала под себя (под человека, не знающего объекты, конструкторы и т.п.; но в общих чертах я понимаю, что такое объект, его методы, конструктор и пр..). |
||||||||||||||
|
|||||||||||||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
нда.. Вот к чему приводит копипаст ((
да это не все компиляторы поддерживают Не забудь тогда и delete[] добавить. Не понял о какой ошибке идет речь, но под высказыванием ничего не выводить подразумевалось такое o<<""; хотя ничего не мешает закомментировать эту строку. Добавлено через 5 минут и 19 секунд
Помойму все таки чего то упустили в этом задании.. Где все таки должен быть стек ?? |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
вынеси его за цикл. и макросы path1, path2, pathout замени на строки (да и вобще макросов старайся избегать) а тут не забыто "MAX+1" в скобках? Это сообщение отредактировал(а) mes - 25.12.2008, 18:58 |
|||
|
||||
| KasMP |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Я думала об этом. Можно натянуть такой ответ: стек - первым пришел, последним вышел (т.е. уходят положенные сверху элементы); у нас своеобразный стек из одного элемента (точнее, 2 таких стека, каждый из которых будет содержать по одному элементу); этот элемент сначала загружается, оказывается на вершине, вершина выгружается, потом загружается новый, новый оказывается на вершине, вершина выгружается; т.е. в принципе определение стека выполняется (по ходу дела здесь и дэк (как правильно пишется?), и др.очереди так же можно притянуть) Да, правильно: у нас сложение начинается с уничтожения структуры-результата, незачем делать это дважды. ??? Почему??? Добавлено через 6 минут и 22 секунды Вот-вот, в том-то и чудеса, что я ее, так сказать, /* */, и
Добавлено через 10 минут и 50 секунд Еще после каждого выполнения lv_destroy() (тех, которые в main() ), происходит такое: ![]() (номера блоков при перезапуске программы не меняются, внутри одного запуска все разные) Не вижу причин для выхода за выделенную область. |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
a мы про какую строчку говорим то ?? что то подсказывает мне что про разные ) Покажи что и как комментировала.. но в задании сказано реализовать на основе списка.. А в коде ни слова.. и главное не понятно к ккой области его прикручивать ) Добавлено @ 20:45 Чтоб не споткнуться на труднообнаружимых и непонятных ошибках, возникших вследствии использования макросов. Используй макросы только для управления этапом компиляции и для тех мест, где без них просто не обойтись. Это сообщение отредактировал(а) mes - 25.12.2008, 20:46 |
|||
|
||||
| KasMP |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Я про вот эту:
1) видимо, это уже явный С++; 2) понятно, что я сама такое не напишу...
Поздно уже переделывать Добавлено через 1 минуту и 17 секунд А если просто определить переменные-константы, то будет чем-то лучше |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
A когда сдавать то ? На текущем этапе фактически ничего перелывать не надо.. Только бы вот понять куда этот стек запихать.. Добавлено @ 20:49 Т.е ты целиком закомментирова всю функцию ?? тогда писать в файл не будет.. Добавлено @ 20:51 хотя можно вместо операторa << поставить другое название функции и его использовать для вывода - ради того чтоб никто не подумал )) Это сообщение отредактировал(а) mes - 25.12.2008, 20:55 |
|||
|
||||
| KasMP |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Очень желательно уложиться ... в час. Еще другие зачеты...
Возможно, задание предполагает, что мы последовательно прочитаем все числа в 2 списка (элемент списка - структура, содержащая число (вернее, адреса начала и конц строки), закроем файлы и будем последовательно идти по спискам, выводя результаты в файл. Но ведь очевидно, что это хуже: зачем занимать память всеми числами, когда можно оставить место для одного (для одной пары, точнее)...
Я уже говорила, как "хорошо" я понимаю ее. |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| KasMP |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Может быть и можно, я совсем не понимаю. Уже только одно начало "std::ostream&" заставляет долго думать... Добавлено через 2 минуты и 20 секунд
Я думала так: по сути в обоих случаях мы получаем константу, которой присвоено какое-то удобное имя -> шанс ошибиться одинаков Добавлено через 3 минуты и 9 секунд Я давно себя так плохо не чувствовала. Столько ошибок и непониманий |
||||
|
|||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
так вопрос надо было коректно поставить, где тебе непонятно, я или другие форумчане обяснили бы )
если вдруг опять непонятно скажи..попробую подругому . Добавлено через 5 минут и 52 секунды
нет макрос, это просто определение , которое будет подставлено вместо всех употреблений его имени в коде в режиме предкомпиляции .. т.е фактически "удобный" копи-паст. а константа, эта сущность , у который есть и тип и адрес и все другие нужные характеристики, для того чтоб компилятор мог выявить неправильное использование или например для того чтоб компилятор мог выбрать правильную перегрузку функции. Это сообщение отредактировал(а) mes - 25.12.2008, 21:07 |
||||
|
|||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
а самая первая строчка о чем?
и можно все-таки это как-то попроще написать? |
|||
|
||||
| mes |
|
||||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Зато с каждым понимаем будет все больше свободы действий и спокойствия за код. Добавлено @ 21:20 можно записать так
тогда вывод в файл будет Write (fout, lv); можно так
тогда при выводе можно использовать последовательность Write (fout, lv)<<"\n";
тогда можно : fout <<lv <<"\n"; в общем пользуй пока первый, а как будет время разбирайся с остальными ) Это сообщение отредактировал(а) mes - 25.12.2008, 21:21 |
||||||||
|
|||||||||
| KasMP |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Мы передаем по ссылке переменную o типа выходной поток (или как правильно называется), который как-то связан с чем-то, называемым std... (видимо, std - какой-то буфер или что-то типа этого... видимо, стандартный, а не определенный мной) Добавлено через 2 минуты и 20 секунд
действительно |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
намеспейс std принадлежит стандартной библиотеке шаблонов(stl). так скажем специальная именнованная область, чтоб имена функций и переменной одной библиотеки не пересекались с другими.. то есть если я пишу std::cout... то означает что использую функцию cout из области (namespace) std чтоб не писать каждый раз std:: , можно один раз написать после инклудов using namespace std; на старых компиляторах std не было, в таких случаях можно просто отбрасывать этот префикс. |
|||
|
||||
| KasMP |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Правда, коряво смотрятся 2 вывода рядом в одно и то же место разными способами... Потом откорректирую. |
||||
|
|||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
используй второй вариант. или
Это сообщение отредактировал(а) mes - 25.12.2008, 21:53 |
||||
|
|||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
a const не забыла??
|
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
я тут подумал и нашел куда присобачить стек.. держи.. надеюсь не поздно
ну а main должен подойти без изменений. P.S private: означает что доступ к этой секции, только из "своих" функций. Это сообщение отредактировал(а) mes - 26.12.2008, 22:11 |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |