|
1 / 1 / 0
Регистрация: 30.07.2012
Сообщений: 53
|
|
Считывание из файла30.07.2012, 22:39. Показов 3184. Ответов 20
Метки нет (Все метки)
Ребят, помогите, пожалуйста, новичку разобраться=)
Есть файл, в котором расположена информация примерно такого содержания 1946 12 30 0 -519 0 -490 0 9999 9 0 2 0 1946 12 31 0 -528 0 -499 0 9999 9 0 2 0 1947 1 1 0 -477 0 -383 0 -366 0 1 0 0 1947 1 2 0 -406 0 -356 0 -335 0 5 0 0 1947 1 3 0 -481 0 -408 0 -373 0 0 2 0 Нужно считать информацию из файла 4 столбца(1-столбец год, второй-месяц-3-день и 8-температура). Причем если в 8 столбце стоит значение 9999, то строку не выписывать во второй файл. Затем надо посчитать и вывести среднее арифметическое температур по годам , т.е. среднюю температуруза 47 год, 48 и т.д. Подскажите, как?
0
|
|
| 30.07.2012, 22:39 | |
|
Ответы с готовыми решениями:
20
Заменить считывание с клавиатуры на считывание из файла Считывание файла в массив и запись нового файла Считывание файла |
|
60 / 60 / 8
Регистрация: 15.10.2010
Сообщений: 356
|
||||||
| 30.07.2012, 23:08 | ||||||
|
Считываете число за числом, считая число считанных чисел. Пусть это число (число считанных чисел) равно n.
Берете остаток от деления этого n на число столбцов. Получаете конкретный индекс столбца. В зависимости от этого номера, кладете в соответствующую ячейку структуры. Что то вроде
Дерзайте.
1
|
||||||
|
49 / 44 / 8
Регистрация: 06.09.2010
Сообщений: 419
|
|
| 30.07.2012, 23:10 | |
|
Считываешь построчно и делаешь анализ строки.
Код за тебя писать никто не будет. для анализа даты и прочего, разбираешь строку. ТО есть начиная от нуля до первого пробела - это год, дальше от проблел+1 до след пробела - это месяц и так далее анализируешь. Если тебе не надо анализировать даты и прочее а нудно только находить 9999 то делаешь поиск по строке, если он вернул позицию - значит не выполняем запись. и так далее.
0
|
|
|
1 / 1 / 0
Регистрация: 30.07.2012
Сообщений: 53
|
|||||||||||
| 31.07.2012, 01:27 [ТС] | |||||||||||
|
Считываете число за числом, считая число считанных чисел. Пусть это число (число считанных чисел) равно n.
Берете остаток от деления этого n на число столбцов. Получаете конкретный индекс столбца. В зависимости от этого номера, кладете в соответствующую ячейку структуры. Что то вроде
ТОгда такой вопрос. Вот мой код
0
|
|||||||||||
|
60 / 60 / 8
Регистрация: 15.10.2010
Сообщений: 356
|
||||||||||||||||||
| 31.07.2012, 01:51 | ||||||||||||||||||
|
i - необъявленный идентификатор. Забыли где надо фигурные скобки. В следующий раз используйте теги [ CPP ] [ / CPP ] Ух как даже. Вы переопределили занова идентификатор. Не стоит так делать. Нечитабельно. Добавлено через 10 минут Быть может вот так будет по-лучше?
Документация к
Вот еще...
Аналогично для заведомо неверного fwrite. К тому же, в файл вы пытаетесь записать только последнюю считанную строку. Имейте это в виду. Добавлено через 1 минуту Как то так. Невооруженным взглядом больше ошибок не видно.
0
|
||||||||||||||||||
|
|
|
| 31.07.2012, 10:42 | |
|
HomeR_J_SimpsoN, нельзя так читать это файл как ты предлагаешь - числа там записаны в текстовом формате, а fread читаем бинарку. Для данного задания следует использовать либо fscanf либо если пишем на плюсах то потоковый ввод ifstream >>
0
|
|
|
63 / 58 / 14
Регистрация: 14.12.2011
Сообщений: 193
|
|||||||||||
| 31.07.2012, 10:54 | |||||||||||
Я б считывал всю строку и использовал
0
|
|||||||||||
|
|
|||||||
| 31.07.2012, 11:08 | |||||||
|
Ниже код на Си по чтению и печати содержимого файла, как поступать с массивом структур это на ваше усмотрение
Не по теме: PS:Dr.Urban, не зачем этого делать - во первых мы наперёд ограничиваем длинну данных в строке(т.к. строку определённой длинны будем использовать), затем в дальнейшем при разборе всё равно бы scanf-или уже строку а не поток.
1
|
|||||||
|
|
||||||
| 31.07.2012, 11:26 | ||||||
|
Вот простой вариант на плюсах без мап и векторов(ИМХО без них в этом задании не обойтись при построении высокоуровневого кода)
0
|
||||||
|
70 / 64 / 5
Регистрация: 09.06.2012
Сообщений: 291
|
|
| 31.07.2012, 11:54 | |
|
-=ЮрА=-,
Не по теме: Спасибо за СИ-шный код,много полезного извлек :)
0
|
|
|
|
||||||
| 31.07.2012, 11:55 | ||||||
|
Вот вариант с картой
0
|
||||||
|
|
|
| 31.07.2012, 12:06 | |
|
Вот некая абстракция для последнего кода с картой (для лучшего понимания)
http://codepad.org/q5b4MSQy
0
|
|
|
1 / 1 / 0
Регистрация: 30.07.2012
Сообщений: 53
|
|||||||||||
| 31.07.2012, 13:42 [ТС] | |||||||||||
0
|
|||||||||||
|
1 / 1 / 0
Регистрация: 30.07.2012
Сообщений: 53
|
|||||||||||
| 31.07.2012, 17:34 [ТС] | |||||||||||
|
Еще раз спасибо огромное,Юрий! Да, все-таки я Вас еще помучаю=))
0
|
|||||||||||
|
1 / 1 / 0
Регистрация: 30.07.2012
Сообщений: 53
|
|||||||||||
| 01.08.2012, 11:43 [ТС] | |||||||||||
|
Юр, спасибо тебе огромное, код почти написан, осталось разобраться, почему он ругается и при переходе с одной строки на другую=)) Были даны 13 столбцов, из них надо было убрать те строки, где есть цифра 9999, затем взять среднее арифметическое по годам, т.е. взять среднее за 1958 год, 59 и т.д. и вывести это все в печать=)) В общем, в принципе писать особо ничего не надо, спаисбо тебе огромное-итак фактически задание за меня сделал. Тут спасибо ввиде +1 выдается?=)) У меня была идея такая-поставить в цикл условия-если цифра в 13 столбце и в n+1 строке= n строке, тогда суммируем элементы, если же равентсво не выполняется, тогда выводим на печать сумму и количество подсчитанных строк(ну и их отношения). далее обнуляем их и пускаем заново цикл.Вот собственно фактически твоя же программа
а само задание изначально выглядело примерно так 1966 3 18 0 -343 0 -240 0 -148 0 0 2 0 1966 3 19 0 -348 0 -234 0 -146 0 0 2 0 1967 3 20 0 -240 0 -174 0 -110 0 0 2 0 1967 3 21 0 -158 0 -132 0 -109 0 16 0 0 1968 3 22 0 -164 0 -103 0 -44 0 16 0 0 1968 3 23 0 -130 0 -116 0 -63 0 0 2 0 1968 3 24 0 -184 0 -139 0 -90 0 0 2 0 1969 3 25 0 -154 0 -133 0 -91 0 0 2 0 1969 3 26 0 -245 0 -166 0 -72 0 2 0 0 1969 3 27 0 -293 0 -175 0 -54 0 0 2 0 1970 3 28 0 -262 0 -158 0 -54 0 0 2 0 1970 3 29 0 -194 0 -95 0 -2 0 4 0 0 1970 3 30 0 -104 0 -53 0 0 0 0 2 0
0
|
|||||||||||
|
|
|||||||
| 01.08.2012, 12:57 | |||||||
|
kuziashagrath, твой код править не хочу (кроме моей части в нём нет ничего верного
прошу не воспринимать это как личное ). Также исходных данных не достаточно, пишешь о 59-м годе а вривёл 46-47,66-70 (запомни правильное задание все исходные данные это единственный ключ к тому чтобы код решал именно ту задачу которую тебе требуется).Короче я немножко подправил твои исходные данные(добил в паре строк в 9-й столбец 9999), а также находил средне для 7-го столбца т.к последний (как я понял темпереатура во всех строках == 0 и не видно было бы подсчёта среднего). Ниже код который после прочтения данных запрашивает нужный год и осуществляет выгрузку валижных строк нужного года в файл одновременно подсчитывая среднее в 7-м столбце(опять же для строк без 9999 в 9-м столбце)
0
|
|||||||
|
|
|||||
| 01.08.2012, 13:03 | |||||
|
Касательно твоих ошибок
![]() К примеру идут числа 17 + 4 + 5 ну чему равно их среднее арифметическое? наверное 26/3 ~ 8.67 но никак не 8 который получится при целочисленном делении 26 на 3. Есть ещё замечания но они не концептуальны и их пожалуй опущу...
0
|
|||||
|
1 / 1 / 0
Регистрация: 30.07.2012
Сообщений: 53
|
|
| 02.08.2012, 16:10 [ТС] | |
|
Юр, еще раз спасибо огромное за коды, в результате разобрался где у меня ошибка. Понял, где и как выводить. Кстати, я долольно простой человек, так что не обижаюсь на критику, отношусь с юмором. Я учусь, а если делаешь что то впервые, ошибки неизбежны=)))
0
|
|
| 02.08.2012, 16:10 | |
|
Помогаю со студенческими работами здесь
20
Считывание из файла
считывание из файла Считывание из файла Считывание файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|