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




Войти
или
Зарегистрироваться
Новые сообщения · Участники · Правила форума · Поиск по форуму · RSS
Архив - только для чтения
ФОРУМ ПОСТУПИМ.РУ » АРХИВ (ТОЛЬКО ДЛЯ ЧТЕНИЯ) » ОБЩИЕ ВОПРОСЫ ЕГЭ 2014 » Дневник nut. (Как выучить информатику за 5 месяцев и не забыть физику)))
Дневник nut.
nutДата: Воскресенье, 2013-02-10, 11:53 PM | Сообщение # 376
Доцент
Группа: Проверенные
Сообщений: 663
Репутация: 82
Награды: 18
Замечания: 0%
Статус: Offline
KaDeaT, Проблема банальная: у меня нет опыта и я боюсь этих страшных задач)) В принципе, в теории уже все темы вроде бы знаю: как записывается массив, строки, записи, считывать строчку посимвольно char...Но совместить все это не могу.  Т.к. нет глубоко понимания всех этих тем, у меня в голове все запутывается и получается какая-то каша.  sad
Наверно, нужно начинать с простого...Вчера вот нашла сайт Абрамяна и решала задачки.(много простых). Компилировала, искала ошибки, опять компилировала...Потом уже ошибок меньше было. Так что надо просто тупо печатать задачки самостоятельно, а потом и понимание придет)


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


Сообщение отредактировал nut - Воскресенье, 2013-02-10, 11:55 PM
 
EmilyFendiorДата: Воскресенье, 2013-02-10, 11:54 PM | Сообщение # 377
Академик
Группа: Проверенные
Сообщений: 1207
Репутация: 332
Награды: 39
Замечания: 0%
Статус: Offline
Цитата (nut)
отличная идея! Давай вместе вести))
конечно))


Мехмат МГУ 3 курс
 
KaDeaTДата: Воскресенье, 2013-02-10, 11:56 PM | Сообщение # 378
Нобелевский лауреат
Группа: Проверенные
Сообщений: 11169
Репутация: 1446
Награды: 136
Замечания: 0%
Статус: Offline
Цитата (nut)
Так что надо просто тупо печатать задачки самостоятельно, а потом и понимание придет)

Ну я бы не стал так думать. =) Это должно быть параллельно. =)
Цитата (nut)
боюсь этих страшных задач

А ты их на маленькие нестрашные разбивай. Давай разобьем одну какую-нибудь.=)


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

Цитата (KaDeaT)
Давай разобьем одну какую-нибудь.=)

Давай! К примеру, вот эта(типичная С4: не очень длинная, но все равно страшная):

Во входном файле text.dat содержится текст на английском языке, заканчивающийся точкой (другие символы “.” в этом файле отсутствуют).
Требуется написать программу, которая будет определять и выводить на экран английскую букву, встречающуюся в этом тексте чаще всего, и количество там таких букв.
Строчные и прописные буквы при этом считаются не различимыми.
Если искомых букв несколько, то программа должна выводить на экран первую из них по алфавиту.

Например, пусть файл содержит следующую запись: It is not a simple task. Yes!
Чаще всего здесь встречаются буквы I, S и T (слово Yes в подсчете не учитывается, так как расположено после точки).
Следовательно, в данном случае программа должна вывести два символа, разделенных пробелом: I 3


ЕГЭ2013:
РМФ:272
РМИ:281
Дневник:/forum/72-37475-1
МФТИ ФИВТ, 1 курс
 
KaDeaTДата: Понедельник, 2013-02-11, 0:12 AM | Сообщение # 380
Нобелевский лауреат
Группа: Проверенные
Сообщений: 11169
Репутация: 1446
Награды: 136
Замечания: 0%
Статус: Offline
Итак, сначала опиши словами как нужно решать эту задачу. =)) Как тебе это представляется. В общих чертах, не вдаваясь в подробности реализации.

Обучение программированию
 
nutДата: Понедельник, 2013-02-11, 0:15 AM | Сообщение # 381
Доцент
Группа: Проверенные
Сообщений: 663
Репутация: 82
Награды: 18
Замечания: 0%
Статус: Offline
KaDeaT
Я задним местом понимаю, что вроде бы нужно создать массив array[1..26], считывать строку посимвольно и посчитать,  сколько раз встречается каждая буква и потом сделать сортировку по алфавиту и...как-то вывести букву и количество этих букв.

я это понимаю, НО НЕ ЗНАЮ КАК ЭТО ЗАПИСАТЬ!!!!!!!!!!!!!  

1) Что означает фраза "Строчные и прописные буквы при этом считаются не различимыми. " ?!
2) В ЕГЭшных задачах все время просят создать ЭФФЕКТИВНУЮ программу. А я буду 1005000 раз читать эту фразу, пока не посчитаю все буквы, это значит что...мою программу признают неэффективной?((


ЕГЭ2013:
РМФ:272
РМИ:281
Дневник:/forum/72-37475-1
МФТИ ФИВТ, 1 курс
 
KaDeaTДата: Понедельник, 2013-02-11, 0:19 AM | Сообщение # 382
Нобелевский лауреат
Группа: Проверенные
Сообщений: 11169
Репутация: 1446
Награды: 136
Замечания: 0%
Статус: Offline
Цитата (nut)
Я задним местом понимаю, что вроде бы нужно создать массив array[1..26], считывать строку посимвольно и посчитать,  сколько раз встречается каждая буква и потом сделать сортировку по алфавиту и...как-то вывести букву и количество этих букв.


правильно. =)))
Не как-то а WriteLn () =)))

Цитата (nut)
я это понимаю, НО НЕ ЗНАЮ КАК ЭТО ЗАПИСАТЬ!!!!!!!!!!!!!  

Сейчас поймешь.=)

Цитата (nut)
1) Что означает фраза "Строчные и прописные буквы при этом считаются не различимыми. " ?!

это означает что i и I, t и T, u и U, f и F и все остальные это одно и тоже.

Цитата (nut)
В ЕГЭшных задачах все время просят создать ЭФФЕКТИВНУЮ программу. А я буду 1005000 раз читать эту фразу, пока не посчитаю все буквы, это значит что...мою программу признают неэффективной?((

ну если так будешь делать то да. Но ты же не собираешься это делать так. И не беги вперед паровоза.


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

но я собиралась сделать это именно так biggrin

(значит я как-то неправильно создала массив?)


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


Сообщение отредактировал nut - Понедельник, 2013-02-11, 0:21 AM
 
KaDeaTДата: Понедельник, 2013-02-11, 0:22 AM | Сообщение # 384
Нобелевский лауреат
Группа: Проверенные
Сообщений: 11169
Репутация: 1446
Награды: 136
Замечания: 0%
Статус: Offline
Теперь когда у тебя есть примерная схема решения в голове будем разбираться дальше.
И так начнем сначала. Первый пункт это хранение данных.
Какие данные по твоему тебе надо хранить внутри программы и с помощью чего ты это хочешь делать (массивы/переменные)?


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

var 
st:char; 
sl:string[не знаю, сколько символов будет в веденной строчке sad ]; 
i,n:integer;

Добавлено (2013-02-11, 0:37 AM)
---------------------------------------------
Или может быть массив таким:

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

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

Добавлено (2013-02-11, 0:39 AM)
---------------------------------------------
Или вообще сделать два массива: в первом присвоить каждой букве алфавита номер:

A  B  C  D
1  2  3  4

А потом уже, если в строчке встретится буква, то делать a [i]+1

о!!!!!!! кажется это лучший вариант)


ЕГЭ2013:
РМФ:272
РМИ:281
Дневник:/forum/72-37475-1
МФТИ ФИВТ, 1 курс
 
KaDeaTДата: Понедельник, 2013-02-11, 0:51 AM | Сообщение # 386
Нобелевский лауреат
Группа: Проверенные
Сообщений: 11169
Репутация: 1446
Награды: 136
Замечания: 0%
Статус: Offline
nut, погоди сопли распускать. =)))

Смотри у тебя есть строка в файле и известно что она заканчивается точкой.
Тебе нужно знать сколько раз какая буква в ней встречается. Т.е. тебе нужно хранить название буквы и сколько раз она попалась в строке.

Ты все правильно придумала тебе нужен массив из 26 значений. это чтобы хранить буквы. НО ты забыла что нам еще нужно будет хранить количество раз которое встречается буква. =)) есть три варианта.
1. завести еще один массив. получится один массив char - в нем будет записана буква.
1 a
2 b
3 c
...
26 z

Во втором массиве под номером буквы будет хранится число сколько раз оно встретилось в строке. т.е.
1 5
2 0
3 0
4 2
...
26 1

это значит, что 1 буква встретилась 5 раз, вторая буква 0 раз, 3 буква 0 раз и т.д.

2. подход основан на том, что каждая буква a,b,c b и т.д. имеет закрепленную за ней цифру (таблица кодов ASCII).

т.е. букве а соответствует цифра 97, букве b цифра 98 и т.д. посмотри по таблице.
Т.е. мы можем создать один массив типа byte размерностью 26 на 2 и хранить в нем в первой столбике номер буквы, а во втором сколько раз она встречается в тексте.
получится примерно так.
1 97 5
2 98 0
3 99 0
...
26 122 1

3. Усовершенствуем 2 подход. зачем нам тратить лишний столбик на номер буквы, если мы можем его и так получить. Например. Буква а это 97, мы будем записывать её первым элементом. разница 97-1=96. буква b вторая, а её номер 2+96=98. и т.д. Считай мы сократили занимаемую память на 26 значений типа byte.
Получим такой вот массив

1 5
2 0
3 0
4 2
...
26 1

Это понятно? =))


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

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

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

Добавлено (2013-02-11, 0:39 AM)
---------------------------------------------
Или вообще сделать два массива: в первом присвоить каждой букве алфавита номер:

A  B  C  D
1  2  3  4

А потом уже, если в строчке встретится буква, то делать a [i]+1

о!!!!!!! кажется это лучший вариант)


В верном направлении мыслишь. =))) Теперь прочитай мое предыдущее сообщение. =))) Номера буквам уже присвоены, так что считай пол дела сделано.

Про то как считать буквы в точку. просто делаем a [i]+1

Вот и не придется тогда 100500 раз бегать по строке. =)))


Обучение программированию
 
nutДата: Понедельник, 2013-02-11, 1:07 AM | Сообщение # 388
Доцент
Группа: Проверенные
Сообщений: 663
Репутация: 82
Награды: 18
Замечания: 0%
Статус: Offline
[size=10][/size]
KaDeaT
оооооооо, все круто расписал, спасибо!!!)
теперь все понятно  smile

Только вся эта муть с кодовыми таблицами меня напрягает, поэтому мне больше нравится 1 способ)

откуда ты только все знаешь...


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


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

Обучение программированию
 
nutДата: Понедельник, 2013-02-11, 1:30 AM | Сообщение # 390
Доцент
Группа: Проверенные
Сообщений: 663
Репутация: 82
Награды: 18
Замечания: 0%
Статус: Offline
KaDeaT, Сначала обнулим массив
Потом читаем первый символ в строчке. Если он равен второй букве(например), то a[2]:=a[2]+1;


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








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

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