2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4  След.
 
 Re: Помогите разобраться, как работать с файлами на C++
Сообщение01.08.2012, 22:41 
Аватара пользователя


21/06/12
184
Я его не изучаю в данный момент. Я давно ознакомился с темами, достаточными для решения олимпиадных задач(различные циклы, условия и так далее) и все. Нет, ну год назад проходил еще функции, классы, но это уже забылось из-за неиспользования.

У меня возникают проблемы с чтением из файлов и записью. Раньше я только с readln/writeln/cin/cout решал. Сейчас, из-за того, что не понимаю это, пытаюсь понять методом проб и ошибок.
Задачи решаю(алгоритмы придумываю) достаточно успешно для задач, что предлагает тот сайт, но много времени может уходить на исправление ошибок в чтении/записи.

Задачи из темы циклических алгоритмов уже все решил, осталась только эта. Правда, как мне кажется, она решена(найдена идея решения), но не реализована правильно.
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
#include <stdio.h>

int main(){ int a,b=0,c=0,;

  freopen("input.txt","r",stdin);
  freopen("output.txt","w",stdout);
 

while ((a = getchar()) != EOF)
{     if (a=='0') c++;
      if (a=='1'){if (c>b){b=c;}}
      c=0;                   }
                       
     
   
  if (b>c) printf("%ld",b);    
  else printf("%ld",c);
  return 0;
                                 }

 
 

 Профиль  
                  
 
 Re: Помогите разобраться, как работать с файлами на C++
Сообщение01.08.2012, 23:04 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Ubermensch в сообщении #602065 писал(а):
Я его не изучаю в данный момент. Я давно ознакомился с темами, достаточными для решения олимпиадных задач

Программирование - это навык, и знакомством с темами не исчерпывается. Увы. Для него нужна практика, тренировка и опыт.

Ubermensch в сообщении #602065 писал(а):
У меня возникают проблемы с чтением из файлов и записью.

Не только. У вас проблемы с тем, чтобы вообще формулировать свои мысли на языке программирования, в достаточно строгом и связном виде, чтобы бездушная бездумная машина это кушала.

Например, кто за вас будет в строке
лишнюю запятую убирать? Или, почему у вас
стоит в неправильном месте? Это всё ко вводу-выводу не имеет ни малейшего отношения, это расхлябанность и неаккуратность в мыслях и действиях, которая удаляется только практикой.

На всякий случай: у вас на вашем личном компьютере компилятор стоит? Или вы компилируете программы, только отсылая их на онлайновые олимпиадные сайты? Тесное личное общение с компилятором, его выдачей, и специализированным текстовым редактором не в последнюю очередь, многому бы вас научило.

 Профиль  
                  
 
 Re: Помогите разобраться, как работать с файлами на C++
Сообщение01.08.2012, 23:10 
Аватара пользователя


21/06/12
184
Munin, спасибо. Наконец-то задача сдалась.
Впредь буду более внимателен, ибо обидно, когда вроде бы идея решения есть и она правильная, а реализовать не могу.
Компилятор есть. DevCpp, только он эти 2 ошибки не нашёл.

 Профиль  
                  
 
 Re: Помогите разобраться, как работать с файлами на C++
Сообщение01.08.2012, 23:30 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Одну из них должен найти любой компилятор, потому что она синтаксическая. А другую должны были найти вы сами, потому что она смысловая. Для этого надо отлаживать, уметь отлаживать, и учиться отлаживать.

 Профиль  
                  
 
 Re: Помогите разобраться, как работать с файлами на C++
Сообщение02.08.2012, 13:14 
Аватара пользователя


14/08/09
1140
Ubermensch в сообщении #602078 писал(а):
Наконец-то задача сдалась.

У вас последний код не работал правильно опять-таки из-за неаккуратности. Вы скобки фигурные ставите всё равно там, где не надо, поэтому пропустили, там, где надо.
Да и if-if режет глаза. Лучше использовать в данном случае if-else.

 Профиль  
                  
 
 Re: Помогите разобраться, как работать с файлами на C++
Сообщение02.08.2012, 15:27 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Mathusic в сообщении #602297 писал(а):
Да и if-if режет глаза. Лучше использовать в данном случае if-else.

Тоже неоднозначный совет. В условиях не оговорено, что программа должна делать, если встретится не '0' и не '1', и в условиях олимпиады такого теста не встретится. А значит, пускай автор пишет логику так, как ему удобней, это опять же сэкономит секунды.

 Профиль  
                  
 
 Re: Помогите разобраться, как работать с файлами на C++
Сообщение02.08.2012, 15:55 
Аватара пользователя


14/08/09
1140
Ну работать будет и то будет понятное дело. Зато с элсом будет работать для произвольного файла, где ищем цепочки нулей.

Munin в сообщении #602336 писал(а):
А значит, пускай автор пишет логику так, как ему удобней, это опять же сэкономит секунды.

И всегда писать if-if? По-моему тут не логика, а недостаток практики. Если ТС потренируется еще месяцок, то сам в подобном случае напишет else :|

Munin в сообщении #602336 писал(а):
...сэкономит секунды.

А лишнее сравнивание в случае единицы тоже время забирает :D

 Профиль  
                  
 
 Re: Помогите разобраться, как работать с файлами на C++
Сообщение02.08.2012, 18:25 
Аватара пользователя


31/10/08
1244
Цитата:
В условиях не оговорено, что программа должна делать, если встретится не '0' и не '1',

Ай-яяй. Проверка вводных данных это обязанность программиста. А то потом долго ошибки будешь искать, отлаживая программу.

 Профиль  
                  
 
 Re: Помогите разобраться, как работать с файлами на C++
Сообщение02.08.2012, 18:38 
Аватара пользователя


14/08/09
1140
Pavia в сообщении #602389 писал(а):
Ай-яяй. Проверка вводных данных это обязанность программиста. А то потом долго ошибки будешь искать, отлаживая программу.

Ну, вообще, формулировка задачи подразумевает, что входные данные корректны. Так что на олимпиаде, когда нужно экономить секунды, над этим можно не париться :D

 Профиль  
                  
 
 Posted automatically
Сообщение02.08.2012, 18:42 
Админ форума
Аватара пользователя


19/03/10
8952
 i  Тема перемещена из форума «Computer Science» в форум «Программирование»

 Профиль  
                  
 
 Re: Помогите разобраться, как работать с файлами на C++
Сообщение02.08.2012, 19:21 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Mathusic в сообщении #602346 писал(а):
Зато с элсом будет работать для произвольного файла, где ищем цепочки нулей.

Я уже сказал, здесь - не значимо.

Pavia в сообщении #602389 писал(а):
Проверка вводных данных это обязанность программиста.

Да, в обычном программировании (как я уже и говорил). А здесь обсуждается олимпиадное. В олимпиадных тестах могут подсунуть файл, в котором будет 0 символов (или чисел, или строк - на что задача), но не подсовывают файл, который некорректен, не соответствует условиям задания. Это просто принятый стиль. Смысл олимпиады - решить задачу, которую, подразумевается, саму по себе решить сложно, а вовсе не заклеить все дыры, по нормам промышленного программирования.

Mathusic в сообщении #602346 писал(а):
И всегда писать if-if?

Где я такое сказал? Писать надо так, как проще всего придумывается. Для Ubermensch на данный момент - if-if. Для вас - if-else. Главное, чтобы это быстро придумывалось, быстро в уме проверялось на правильность, и быстро записывалось. А считать, что это такой важный вопрос, как именно тут будут оформлены нюансы - это ошибка, которая как раз и повлечёт за собой потери времени, критичные на олимпиаде.

Mathusic в сообщении #602346 писал(а):
А лишнее сравнивание в случае единицы тоже время забирает

В данном случае некритично мало. На олимпиадах вообще обычно не встречаются задания с критичностью требований к объёму памяти или времени выполнения (хотя бывают и исключения). Если вы вышли за пределы - значит, у вас в идее решения что-то не так.

 Профиль  
                  
 
 Re: Помогите разобраться, как работать с файлами на C++
Сообщение02.08.2012, 20:04 
Аватара пользователя


31/10/08
1244

(Оффтоп)

Цитата:
, но не подсовывают файл, который некорректен, не соответствует условиям задания.

Во-первых вы сами себе противоречите. Во-вторых и не такое бывает (из личного опыта олимпиад, "торт" с английской буквой "p").


По поводу того что писать if if или if else то лучше писать так как вам проще. Тоже на одной олимпиад решил только 1 задачу. На две других физически времени не хватила искал элегантное решения, а задачи были на перебор плюс ручками надо было написание 20 условий. Сложными они небыли, просто требовали много ручками написать и меньше думать.
Тогда многие решили по 1 задачи.

 Профиль  
                  
 
 Re: Помогите разобраться, как работать с файлами на C++
Сообщение02.08.2012, 20:12 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Pavia в сообщении #602442 писал(а):
Во-первых вы сами себе противоречите.

Где?

Pavia в сообщении #602442 писал(а):
Во-вторых и не такое бывает

Вообще, бывает, но обычно судей за это потом пинают долго и больно (а результаты иногда аннулируют). Принято все условия оговаривать в правилах конкретной олимпиады, и в условиях конкретной задачи, и не подсовывать некорректных тестов. Другое дело, если в условиях (или правилах) явно сказано, как программа должна реагировать на некорректный ввод - тогда, действительно, можно её помучить.

-- 02.08.2012 21:24:10 --

Munin в сообщении #602405 писал(а):
В олимпиадных тестах могут подсунуть файл, в котором будет 0 символов (или чисел, или строк - на что задача), но не подсовывают файл, который некорректен, не соответствует условиям задания.

Поясняю.
Задача http://acmp.ru/index.asp?main=task&id_task=43
    Цитата:
    Входные данные
    В единственной строке входного файла INPUT.TXT записана последовательность нулей и единиц (без пробелов). Суммарное количество цифр не превышает 100.
Файл может не содержать ни одного нуля или единицы, а сразу заканчиваться концом файла. По условиям, подразумеваемый результат выполнения - 0.

Задача http://acmp.ru/index.asp?main=task&id_task=106
    Цитата:
    Входные данные
    В первой строке входного файла INPUT.TXT записано натуральное число N (1 <= N <= 100) – число монеток. В каждой из последующих N строк содержится одно целое число – 1 если монетка лежит решкой вверх и 0 если вверх гербом.
Файл не может содержать меньше двух строк, и общее число строк всегда равно $N+1.$ Программа может не рассчитывать на структуру файла, отклоняющуюся от этих условий.

 Профиль  
                  
 
 Re: Помогите разобраться, как работать с файлами на C++
Сообщение07.08.2012, 09:28 


24/05/09

2054
Удивляют участники олимпиады!, у которых непреодолимые затруднения вызывают запись-чтение в файл. Я уж не говорю про хотя-бы попытку отладить неверно работающую программу.

Если я правильно понял - удачное участие в олимпиаде позволяет поступить в ВУЗ без экзаменов. Господа преподаватели - готовьтесь к встрече нового студента. :D

 Профиль  
                  
 
 Re: Помогите разобраться, как работать с файлами на C++
Сообщение07.08.2012, 14:00 
Аватара пользователя


21/06/12
184
Alexu007 в сообщении #603691 писал(а):
Удивляют участники олимпиады!, у которых непреодолимые затруднения вызывают запись-чтение в файл. Я уж не говорю про хотя-бы попытку отладить неверно работающую программу.

Если я правильно понял - удачное участие в олимпиаде позволяет поступить в ВУЗ без экзаменов. Господа преподаватели - готовьтесь к встрече нового студента. :D

Вы тему даже не читали. Нечего здесь умничать.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 47 ]  На страницу Пред.  1, 2, 3, 4  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group