Дневник nut.
| |
nut | Дата: Воскресенье, 2013-02-10, 11:53 PM | Сообщение # 376 |
Доцент
Группа: Проверенные
Сообщений: 663
Репутация: 82
Замечания: 0%
Статус: Offline
| KaDeaT, Проблема банальная: у меня нет опыта и я боюсь этих страшных задач)) В принципе, в теории уже все темы вроде бы знаю: как записывается массив, строки, записи, считывать строчку посимвольно char...Но совместить все это не могу. Т.к. нет глубоко понимания всех этих тем, у меня в голове все запутывается и получается какая-то каша. Наверно, нужно начинать с простого...Вчера вот нашла сайт Абрамяна и решала задачки.(много простых). Компилировала, искала ошибки, опять компилировала...Потом уже ошибок меньше было. Так что надо просто тупо печатать задачки самостоятельно, а потом и понимание придет)
ЕГЭ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
Замечания: 0%
Статус: Offline
| Цитата (nut) отличная идея! Давай вместе вести)) конечно))
Мехмат МГУ 3 курс
|
|
| |
KaDeaT | Дата: Воскресенье, 2013-02-10, 11:56 PM | Сообщение # 378 |
Нобелевский лауреат
Группа: Проверенные
Сообщений: 11169
Репутация: 1446
Замечания: 0%
Статус: Offline
| Цитата (nut) Так что надо просто тупо печатать задачки самостоятельно, а потом и понимание придет) Ну я бы не стал так думать. =) Это должно быть параллельно. =)Цитата (nut) боюсь этих страшных задач А ты их на маленькие нестрашные разбивай. Давай разобьем одну какую-нибудь.=)
Обучение программированию
|
|
| |
nut | Дата: Понедельник, 2013-02-11, 0:08 AM | Сообщение # 379 |
Доцент
Группа: Проверенные
Сообщений: 663
Репутация: 82
Замечания: 0%
Статус: Offline
| KaDeaT, На самом деле! Я многих вещей сначала вообще не понимала. Именно в синтаксисе языка...С опытом все встает на свои места и приходит понимание и какое-то...удовлетворение
Цитата (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
Замечания: 0%
Статус: Offline
| Итак, сначала опиши словами как нужно решать эту задачу. =)) Как тебе это представляется. В общих чертах, не вдаваясь в подробности реализации.
Обучение программированию
|
|
| |
nut | Дата: Понедельник, 2013-02-11, 0:15 AM | Сообщение # 381 |
Доцент
Группа: Проверенные
Сообщений: 663
Репутация: 82
Замечания: 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
Замечания: 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
Замечания: 0%
Статус: Offline
| Цитата (KaDeaT) . Но ты же не собираешься это делать так но я собиралась сделать это именно так
(значит я как-то неправильно создала массив?)
ЕГЭ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
Замечания: 0%
Статус: Offline
| Теперь когда у тебя есть примерная схема решения в голове будем разбираться дальше. И так начнем сначала. Первый пункт это хранение данных. Какие данные по твоему тебе надо хранить внутри программы и с помощью чего ты это хочешь делать (массивы/переменные)?
Обучение программированию
|
|
| |
nut | Дата: Понедельник, 2013-02-11, 0:39 AM | Сообщение # 385 |
Доцент
Группа: Проверенные
Сообщений: 663
Репутация: 82
Замечания: 0%
Статус: Offline
| А может вообще массив не нужен...ну вот, у меня опять каша(((((((( может лучше пусть он считывает строчку...посимвольно...
var st:char; sl:string[не знаю, сколько символов будет в веденной строчке ]; 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
Замечания: 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
Замечания: 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
Замечания: 0%
Статус: Offline
| [size=10][/size] KaDeaT, оооооооо, все круто расписал, спасибо!!!) теперь все понятно
Только вся эта муть с кодовыми таблицами меня напрягает, поэтому мне больше нравится 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
Замечания: 0%
Статус: Offline
| nut, лучше тебе сделать первым способом, а потом переделать попробовать другими, т.к. с таблицей кодов ASCII тебе работать надо плотно. И так мы разобрались как храним данные. Так как у нас изначально все отсортировано по алфавиту, то проблему сортировки мы уже решили. теперь осталось подсчет организовать. Твои варианты как это делать. =)
Обучение программированию
|
|
| |
nut | Дата: Понедельник, 2013-02-11, 1:30 AM | Сообщение # 390 |
Доцент
Группа: Проверенные
Сообщений: 663
Репутация: 82
Замечания: 0%
Статус: Offline
| KaDeaT, Сначала обнулим массив Потом читаем первый символ в строчке. Если он равен второй букве(например), то a[2]:=a[2]+1;
ЕГЭ2013: РМФ:272 РМИ:281 Дневник:/forum/72-37475-1 МФТИ ФИВТ, 1 курс
|
|
| |
|
|
|