Дневник nut. - Страница 28 - ФОРУМ ПОСТУПИМ.РУ
Главная
Поиск репетитора
Коллективный блог
публикаций
Форум (обсуждаем ЕГЭ 2020)
тем и сообщений
Для учебы




Войти
или
Зарегистрироваться
Новые сообщения · Участники · Правила форума · Поиск по форуму · RSS
Архив - только для чтения
ФОРУМ ПОСТУПИМ.РУ » АРХИВ (ТОЛЬКО ДЛЯ ЧТЕНИЯ) » ОБЩИЕ ВОПРОСЫ ЕГЭ 2014 » Дневник nut. (Как выучить информатику за 5 месяцев и не забыть физику)))
Дневник nut.
KaDeaTДата: Понедельник, 2013-02-11, 2:46 AM | Сообщение # 406
Нобелевский лауреат
Группа: Проверенные
Сообщений: 11169
Репутация: 1446
Награды: 136
Замечания: 0%
Статус: Offline
Смотри задача есть строка, которая заканчивается точкой. Найти какая буква туда чаще всего входит. при этом считать прописные и строчные буквы одинаковыми.

Общий план.
1. считать всю строку по одному символу, пока не встретим точку.
2. для каждого символа узнать что это за символ.
3. в зависимости от того, какая буква прибавить счетчик.

Идем снаружи во внутрь. 1 действие.
считать символ из строки можно одним действие read(). ок. легко. Дальше надо считать много раз пока не будет точка. Это значит цикл. Фигня.
Имеем:

читаю символ

открываю цикл если символ не точка, то
выполняю пункт 2.
читаю следующий символ
возвращаюсь к проверке условия.


Все первый пункт готов. Теперь углубляемся дальше внутрь.

пункт 2 гласит.
"для каждого символа узнать что это за символ."

Ага есть некоторая буква пускай она хранится в ch. надо узнать её порядковый номер в первом массиве. Ага. Узнать номер, это сложновато для компа, значит упрощаем. массив это некоторый набор букв. так. пускай еще один цикл будет. пробегаем по первому массиву от 1 до 26 числа и каждый символ сравниваем с ch. тут сложных действий для компа нет. сравнить он умеет. цикл тоже умеет. Все. получаем

пункт 2.
ch

запускаем цикл со счетчиком i от 0 до 26.

если первый массив (i)= сh то выполняем
пункт 3, иначе берем следующий элемент.

теперь соединяем эти два кусочка первый и второй пункт. Т.е. на место где было выполнить 2 пункт вставляю свой код.

читаю символ в ch

открываю цикл если символ не точка, то
выполняю


запускаем цикл со счетчиком i от 0 до 26.

если первый массив (i)= сh то выполняем
пункт 3, иначе берем следующий элемент.

читаю следующий символ
возвращаюсь к проверке условия.


теперь продвигаюсь еще дальше внутрь.
нужно выполнить пункт 3.
он гласит
в зависимости от того, какая буква прибавить счетчик.

так как мы вычислили номер буквы то прибавить счетчик легко.
Номер буквы у нас был i.
получаем

второй_массив(i)=второй_массив(i)+1;

объединяем это с нашим предыдущим кусочком.
Получим готовый код ну т.е. схему.

читаю символ в ch

открываю цикл если символ не точка, то
выполняю


запускаем цикл со счетчиком i от 0 до 26.

если первый массив (i)= сh то выполняем
второй_массив(i)=второй_массив(i)+1;
, иначе берем следующий элемент.

читаю следующий символ
возвращаюсь к проверке условия.


Вот такая стратегия должна быть когда мы двигаемся снаружи внутрь.
Кстати мы упустили тот факт, что большие и маленькие буквы должны считаются одинаковыми. Это нас должно быть в начале 2 пункта когда мы определяем номер. или в конце 1 пункта.


Обучение программированию
 
nutДата: Понедельник, 2013-02-11, 3:02 AM | Сообщение # 407
Доцент
Группа: Проверенные
Сообщений: 663
Репутация: 82
Награды: 18
Замечания: 0%
Статус: Offline
KaDeaT, у тебя прямо целые статьи получаются))
я прочитала, но уже вообще ничего не соображаю...как в той сказке :"котелок у девочки не варил" biggrin

Цитата (KaDeaT)
Ага есть некоторая буква пускай она хранится в ch. надо узнать её порядковый номер в первом массиве. Ага. Узнать номер, это сложновато для компа, значит упрощаем. массив это некоторый набор букв. так. пускай еще один цикл будет. пробегаем по первому массиву от 1 до 26 числа и каждый символ сравниваем с ch. тут сложных действий для компа нет. сравнить он умеет. цикл тоже умеет. Все. получаем
вот в этом пункте я и...заклилась) Сравнивать...точняк.
Попробую переварить и завтра допишу начатое!!!!!!!!!!!!!!

а сейчас спать надо...завтра c утра в инст ехать


ЕГЭ2013:
РМФ:272
РМИ:281
Дневник:/forum/72-37475-1
МФТИ ФИВТ, 1 курс


Сообщение отредактировал nut - Понедельник, 2013-02-11, 3:04 AM
 
KaDeaTДата: Понедельник, 2013-02-11, 3:07 AM | Сообщение # 408
Нобелевский лауреат
Группа: Проверенные
Сообщений: 11169
Репутация: 1446
Награды: 136
Замечания: 0%
Статус: Offline
Теперь вторая стратегия. Изнутри наружу идем. Сначала выполняем самое мелкое действие.
Допустим мы уже знаем номер в массиве к которому нужно прибавить 1. пускай он хранится у нас в переменной k.

Как это сделать. Легко.

k
второй_массив(k)=второй_массив(k)+1;

Так. идем наружу, там у нас k. т.е. теперь нам нужно научиться определять номер, когда нам дана некоторая буква и сохранять его в k. Пусть буква нам дана в виде переменной s.

поучаем код

s
запускаем цикл со счетчиком k от 0 до 26.

если первый массив (k)= s то выполняем второй_массив(k)=второй_массив(k)+1;
, иначе берем следующий элемент.


Как видишь мы как бы одели наш прошлый маленький код, куском побольше в котором уже есть для маленького все нужные ему данные.

Теперь снова идем наружу, там у нас s. Т.е. нам нужно получать букву из строки, пока не встретим точку.

Ок. Без проблем.

читаю символ в s

открываю цикл если символ не точка, то
выполняю

запускаем цикл со счетчиком k от 0 до 26.

если первый массив (k)= s то выполняем второй_массив(k)=второй_массив(k)+1;
, иначе берем следующий элемент.

читаю следующий символ
возвращаюсь к проверке условия.


Снова мы одели наш небольшой кусок большим. Но этому коду уже ничего не нужно. Все Значит мы дошли до самого верха. Схема получилась такая же.=) Хотя мы шли наоборот.


Обучение программированию
 
KaDeaTДата: Понедельник, 2013-02-11, 3:09 AM | Сообщение # 409
Нобелевский лауреат
Группа: Проверенные
Сообщений: 11169
Репутация: 1446
Награды: 136
Замечания: 0%
Статус: Offline
Вот тебе две стратегии я расписал. Теперь разберись, осознай. И потом напиши для себя полный план своей задачи и работай с ним, по любой из стратегий.
Поэтому я с самого начала говорил тебе, что писать можно хоть блок схемами, главное научиться алгоритмизировать задачу.


Обучение программированию
 
KaDeaTДата: Понедельник, 2013-02-11, 3:16 AM | Сообщение # 410
Нобелевский лауреат
Группа: Проверенные
Сообщений: 11169
Репутация: 1446
Награды: 136
Замечания: 0%
Статус: Offline
Цитата (nut)
у тебя прямо целые статьи получаются))

иначе получается совсем неудобно, не тот формат. Хочется чтобы ты сразу идею уловила. Если бы был реал-тайм разговор, я бы выдавал тебе это отдельными кусками и поправял бы, но в формате форума неудобно так получает и времени больше отнимает, так как я не могу тебя сразу остановить когда ошибку ты делаешь. Приходится ждать ответа с ошибкой, потом исправлять её, а она может быть в самом начале, и ждать снова. =))


Обучение программированию
 
KaDeaTДата: Понедельник, 2013-02-11, 3:48 AM | Сообщение # 411
Нобелевский лауреат
Группа: Проверенные
Сообщений: 11169
Репутация: 1446
Награды: 136
Замечания: 0%
Статус: Offline
Нежданик. Проверь себя. Скачай архив и выполни вариант. А1-С3.
Даже если уже разбирала этот вариант все равно реши. Хочется уровень реальный знать. Только честно. Выдели 3 часа времени себе, возьми листы чистые и ручку. Все шпоры, подсказки и т.д. убери. Как сделаешь, скинь сюда ответы. Посмотрим, как у тебя обстоят дела, на данный момент. =)))
Считай что ты на экзамене.
Время засеки сколько ушло на А и сколько на Б и сколько на всю работу, если раньше 3 часов уложишься.
http://yadi.sk/d/e1DVDpQv2WZtP


Обучение программированию
 
prm2008Дата: Понедельник, 2013-02-11, 10:08 AM | Сообщение # 412
Профессор
Группа: Проверенные
Сообщений: 815
Репутация: 1199
Награды: 64
Замечания: 0%
Статус: Offline
Цитата (nut)
A:array[A..Z] of char;       *__*

A:array[A..Z] of char;       *__*

1. В описании массива ошибка, должно быть так:
A:array['A'..'Z'] of integer;
если применять такой массив, то не будет необходимости заводить второй и смотреть порядковый номер в кодовой таблице. Здесь важно понять, что индексом массива может быть и упорядоченный ряд символов.

Добавлено (2013-02-11, 9:55 AM)
---------------------------------------------
Цитата (nut)
for i:=0 to 9 do  {Цикл от 0 до 9 для обнуления массива}  a[i]:=0;

begin
while ch<> '.' do
read(ch);
a[ch]:=a[ch]+1;
read (ch);
end;

стремноватенько как-то...вот в этом я и запутываюсь

2. Цикл должен идти по символьной переменной, а не целой i
выглядеть это должно так:
for c:='A' to 'Z' do  {Цикл от А до Я для обнуления массива}  a[c]:=0;
С - символьная величина.

Добавлено (2013-02-11, 9:57 AM)
---------------------------------------------
Потом в цикле считываем посимвольно до точки все равно в каком цикле ПОКА или ДО
И каждый раз увеличиваем счетчик именно того символа, который считали.

Добавлено (2013-02-11, 10:04 AM)
---------------------------------------------
Цитата (nut)
while ch<> '.' do read(ch);
a[ch]:=a[ch]+1;
read (ch);
end;
Если все вышесказанное поправить, то этот фрагмент будет работать правильно, только перед циклом нужно считать первый символ. Еще поставить составной оператор begin end

Хочу обратить внимание на тот факт, что прописные и строчные буквы считаются одинаковыми, поэтому следует сначала с помощью UpCase преобразовать в прописные.

Нужно научиться делать хотя бы одну сортировку. Например, пузырьком.

Добавлено (2013-02-11, 10:07 AM)
---------------------------------------------
В целом, видно, что была попытка разобрать готовое решение, но очень бросается в глаза ошибка несоответствия типов. В одном и том же массиве индекс массива то целая величина, то символьная. Надо разобраться, что именно и где хранится.

Добавлено (2013-02-11, 10:08 AM)
---------------------------------------------
В массиве хранятся целые числа - количество указанных символов, а индексом, или порядковым номером является сам символ.


...чтобы оставаться на одном месте нужно все время двигаться вперед...

Сообщение отредактировал prm2008 - Понедельник, 2013-02-11, 10:11 AM
 
KaDeaTДата: Понедельник, 2013-02-11, 12:15 PM | Сообщение # 413
Нобелевский лауреат
Группа: Проверенные
Сообщений: 11169
Репутация: 1446
Награды: 136
Замечания: 0%
Статус: Offline
Цитата (prm2008)
A:array['A'..'Z'] of integer;
если применять такой массив, то не будет необходимости заводить второй и смотреть порядковый номер в кодовой таблице. Здесь важно понять, что индексом массива может быть и упорядоченный ряд символов.

Во кстати, да.=))) Вот что значит профессионал взялся за дело.=)

Цитата (prm2008)
Хочу обратить внимание на тот факт, что прописные и строчные буквы считаются одинаковыми, поэтому следует сначала с помощью UpCase преобразовать в прописные.


Еще можно использовать тот факт, что между кодами символов одинаковое расстояние, и условием сдвигать.


Обучение программированию
 
prm2008Дата: Понедельник, 2013-02-11, 3:51 PM | Сообщение # 414
Профессор
Группа: Проверенные
Сообщений: 815
Репутация: 1199
Награды: 64
Замечания: 0%
Статус: Offline
Цитата (KaDeaT)
Еще можно использовать тот факт, что между кодами символов одинаковое расстояние, и условием сдвигать.
 Кирилл,  тогда опять нужно знать это расстояние между символами или их коды и писать составное условие. 
В твоем решении в цикле повторяющемся N раз каждый символ проверяется 26 раз.
В другом алгоритме цикл N раз и без всяких проверок соотвествующий счетчик увеличивается на 1.


...чтобы оставаться на одном месте нужно все время двигаться вперед...
 
KaDeaTДата: Понедельник, 2013-02-11, 3:58 PM | Сообщение # 415
Нобелевский лауреат
Группа: Проверенные
Сообщений: 11169
Репутация: 1446
Награды: 136
Замечания: 0%
Статус: Offline
Цитата (prm2008)
В твоем решении в цикле повторяющемся N раз каждый символ проверяется 26 раз.
В другом алгоритме цикл N раз и без всяких проверок соотвествующий счетчик увеличивается на 1.

Погодите-погодите Любовь Сергеевна. Это не мое решение, я бы делал одним массивом, только вычитал бы сдвиг каждый раз, когда записывал число и пользовался бы upcase. Тоже обошлось бы одним циклом до точки.
=)))
А это, мы разбираем вариант, который показался удобнее nut, чтобы она потом переделала его в действительно удобный способ. и увидела, сколько трудностей.))) Нельзя мешать человеку ошибаться.


Обучение программированию
 
KaDeaTДата: Понедельник, 2013-02-11, 4:00 PM | Сообщение # 416
Нобелевский лауреат
Группа: Проверенные
Сообщений: 11169
Репутация: 1446
Награды: 136
Замечания: 0%
Статус: Offline
Ваш все равно покруче будет. Почему-то я сам об этом не догадался. =)))

Про коды и сдвиги, это чтобы показать все разнообразие способов. =))


Обучение программированию
 
NemiroffДата: Вторник, 2013-02-12, 4:18 AM | Сообщение # 417
Академик
Группа: Проверенные
Сообщений: 1944
Репутация: 542
Награды: 62
Замечания: 0%
Статус: Offline
Цитата (KaDeaT)
А теперь фанфары и барабанная дробь на сцене появляется таблица ASCII
А зачем ASCII? Почему сперва не интерпретировать индекс элемента как номер буквы в алфавите?

Нужно ведь что-нибудь такое (правда, я синтаксис не слишком помню и с файлами не знаю, как работать, так что будет строка)?


МФТИ (ГУ) - Факультет управления и прикладной математики

На самом деле идиотов в мире мало, но расставлены они так грамотно, что встречаются на каждом шагу.

« Мне на концерте вырвали и насильно скормили глаз. Dethklok рулит!» — Фанат Dethklok

Сообщение отредактировал Nemiroff - Вторник, 2013-02-12, 5:04 AM
 
nutДата: Воскресенье, 2013-02-17, 6:19 PM | Сообщение # 418
Доцент
Группа: Проверенные
Сообщений: 663
Репутация: 82
Награды: 18
Замечания: 0%
Статус: Offline
Цитата (Nemiroff)
A:array['A'..'Z'] of integer;
аа, значит, так все-таки можно))

Цитата (Nemiroff)
Здесь важно понять, что индексом массива может быть и упорядоченный ряд символов.
точно! я недели полторы назад и про строки читала, а сейчас уже подзабыла и запуталась...

Цитата (Nemiroff)
Нежданик. Проверь себя. Скачай архив и выполни вариант. А1-С3.
а я уже делала ДЕМО 2013!) Поэтому выберу какой-нибудь другой вариант...

Извините, что почти не пишу)) У меня просто в эти дни ну абсолютно не было премени...
Я постоянно торчу в инсте и вожусь с бумажками. Прямо наказание какое-то sad
Завтра мой обходной лист наконец подпишет декан, я сдам пропуск и надеюсь, что получу аттестат обратно...
Тогда буду торчать на форуме)
День не знаю какой
2 варианта по русскому+1 сочинение! Повторяла много чего: причастные обороты, запятые, части речи, эти злосчастные ударения пыталась запомнить...
ну и 3 задачки С6 по математике

Добавлено (2013-02-17, 6:19 PM)
---------------------------------------------


Сообщение отредактировал nut - Воскресенье, 2013-02-17, 6:51 PM
 
Dahka)))))Дата: Воскресенье, 2013-02-17, 8:42 PM | Сообщение # 419
Нобелевский лауреат
Группа: Проверенные
Сообщений: 3291
Репутация: 193
Награды: 137
Замечания: 0%
Статус: Offline
Цитата (nut)
Я постоянно торчу в инсте и вожусь с бумажками.
аналогичная ситуация angry
Цитата (nut)
Завтра мой обходной лист наконец подпишет декан, я сдам пропуск и надеюсь, что получу аттестат обратно...
ха-ха, мой сказал, что отличников никуда не пустит ни в какую москву biggrin
ага, я его еще и спрашивать должна, оказывается biggrin biggrin


Только самые мудрые и самые глупые не поддаются обучению.
 
nutДата: Воскресенье, 2013-02-17, 8:45 PM | Сообщение # 420
Доцент
Группа: Проверенные
Сообщений: 663
Репутация: 82
Награды: 18
Замечания: 0%
Статус: Offline
Dahka))))), а все, отмучилась! Мне вернули мой аттестат...В четверг пойду заяву на ЕГЭ писать smile

Цитата (Dahka))))))
ха-ха, мой сказал, что отличников никуда не пустит ни в какую москву
а мне мой молча подписал...У нас очень, очень много народу отчислялось!!! Кто-то в академ, кто-то уходит, кто-то, наоборот, восстанавливается..,В общем, дурдом)


ЕГЭ2013:
РМФ:272
РМИ:281
Дневник:/forum/72-37475-1
МФТИ ФИВТ, 1 курс
 
ФОРУМ ПОСТУПИМ.РУ » АРХИВ (ТОЛЬКО ДЛЯ ЧТЕНИЯ) » ОБЩИЕ ВОПРОСЫ ЕГЭ 2014 » Дневник nut. (Как выучить информатику за 5 месяцев и не забыть физику)))
Поиск:








© 2006 - 2023 Поступим.ру Информация:
О проекте
Контакты

Регистрация на сайте
Статистика сообщества
Пользовательское соглашение
Разделы:
Поиск репетитора
Форум сообщества
Коллективный блог
Материалы для учебы
ЕГЭ 2021
RSS:
RSS форума
RSS блога