![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
CormiX |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 42 Пол: Мужской Репутация: ![]() ![]() ![]() |
Как использовать символьный тип для решения задач?
Например: есть текст в котором есть хотябы 1 двоеточие(":"). Получить символы, которые располагаются между 1-ым и 2-ым двоеточиями, если 2-го нет - то до конца текста. И вот не могу понять, задаю символьный тип и как ему присвоить значение? s1:array[1..N] of char, как ето использовать для определения ":" в вышенаписаной задаче? Сообщение отредактировано: CormiX - 27.12.2009 11:09 |
![]() ![]() |
andriano |
![]()
Сообщение
#2
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
var c : char; |
Lapp |
![]()
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Как использовать символьный тип для решения задач? Вообще-то, для таких задач есть типа String, который поддерживается рядом процедур и функций. Но он, правда, имеет существенное ограничение в 255 символов..Например: есть текст в котором есть хотябы 1 двоеточие(":"). Получить символы, которые располагаются между 1-ым и 2-ым двоеточиями, если 2-го нет - то до конца текста. И вот не могу понять, задаю символьный тип и как ему присвоить значение? s1:array[1..N] of char, как ето использовать для определения ":" в вышенаписаной задаче? Если хочешь работать с массивом символьного типа, то это будет примерно так:
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
CormiX |
![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 42 Пол: Мужской Репутация: ![]() ![]() ![]() |
А после begin писать:
Так? Только есл я глупость написал то не смейтесь, я ток позавчера начал Паскаль учить) все в голове в перемешку) |
andriano |
![]()
Сообщение
#5
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
1. Ладно, Паскаль начал учить вчера, а какие языки программирования ты уже знаешь?
2. Во-первых, переменная flag описана вполне конкретного типа. И этот тип совсем не тот, о котором ты спрашиваешь (т.е. не символьный). А во-вторых, если ты ставишь пользовательский ввод flag перед строкой flag := false, то последняя затрет результат ввода. Какой в этом смысл? Ты никогда не слышал о примере вычисления вероятности того, что обезьяна, посаженная за пишущую машинку и беспорядочно стучащая по клавишам, напечатает "Войну и мир"? Так вот, попытка беспорядочно использовать операторы имеет такую же вероятность получения нужной программы. СНАЧАЛА следует в точности сформулировать алгоритм по-русски (и Паскаль задесь совершенно не нужен), и только ПОТОМ, когда будут ликвидированы все неясности, можно попросту переписать алгоритм с русского на Паскаль. |
CormiX |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 42 Пол: Мужской Репутация: ![]() ![]() ![]() |
Других языков к сожалению не знаю(((
Алгоритм думаю такой: 1. Сначало нужно задать символьный массив. 2. Нужно определить место расположения двоеточия. 3. Ну и вывести результат. В том то и проблема что я не знаю как ето описать в Pascal... |
andriano |
![]()
Сообщение
#7
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
Твой алгоритм, мягко говоря, недостаточно подробный. Ни в Паскале, ни в каком другом языке программирования нет команды "определить место расположения двоеточия". Есть, правда, функция pos, которая при надлежащем вызове сделает то, что ты сформулировал в п.2.
Но я подозреваю, что программа, написанная по твоему алгоритму, сделает не то, что тебе нужно. Ведь результатом поиска на шаге 2 будет "место" расположения двоеточия. Именно это "место" и будет выведено на шаге 3. А по условию требуется "Получить символы, которые располагаются между ...". Согласись, это далеко не одно и то же. Сообщение отредактировано: andriano - 27.12.2009 12:58 |
CormiX |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 42 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ага тоесть нужно выделить ети символы и копировать?
Но не знаю как. Добавлено через 14 мин. program strins_1; во я разобрался, правда не массивом...) |
Lapp |
![]()
Сообщение
#9
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Так? Только есл я глупость написал то не смейтесь, я ток позавчера начал Паскаль учить) все в голове в перемешку) Давай упорядочивать твою перемешку. flag - это булева переменная. Если ты еще не учил про такой тип, советую обратиться к учебнику. Без такой переменной в этой задаче, конечно, можно обойтись, но это будет не совсем естественно. Поэтому прочитай про них. Могу начать объяснение.. Переменная типа boolean (от Булевой алгебры, которая названа по имени основателя основателя Джорджа Буля) может принимать только два значения: ложь или правда. В Паскале это совпадает с английским написанием: false и true. Булева переменная может быть использована везде, где может стоять условие - например, в операторе if .. then или while .. do или repeat .. until. Значение можно задавать либо константой (false, true), либо вычислением условия (типа x>0). В нашем примере мы сначала устанавливаем значени флага в ложь (флаг не поднят). Затем, когда встречается первое ":", занчение становится not false. то есть правда (флаг поднят). При поднятом флаге срабатывает второй if и символы выводятся на печать. Затем, когда снова встречается ":", значение флага становится not true (флаг сбрасывается), и вывод символов прекращается. После begin тебе нужно организовать ввод символьного массива s1. Попроьуй это сделать и паокажи результат. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Lapp |
![]()
Сообщение
#10
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
во я разобрался, правда не массивом...) Ну, разобрался - и хорошо. Видишь, как важно ПРАВИЛЬНО ставить вопрос. И не вводить в заблуждение ни других, ни себя.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
CormiX |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 42 Пол: Мужской Репутация: ![]() ![]() ![]() |
Только я там удалил ту строку, что идет перед первым двоеточием.
Но ето через strings. А мне надо массив.
так?) Сообщение отредактировано: CormiX - 27.12.2009 13:34 |
Lapp |
![]()
Сообщение
#12
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
так?) Нет. С самим выводом ничего менять не нужно. Все я уже написал, не нужно ничего добавлять. А нужно добавить ПЕРЕД этим ВВОД массива. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
andriano |
![]()
Сообщение
#13
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
во я разобрался, правда не массивом...) И еще. При обработке строк (и любых других массивов) есть два подхода: 1. Мы курочим саму строку, добиваясь, чтобы в ней осталось только то, что нам нужно. При этом не используется дополнительная память (например, другая строка, у тебя s2). 2. Оригинальная строка сохраняется, а нужное мы формируем в другой строке. При этом дополнительная память, та самая вторая строка, используется. Ты же на первом этапе курочишь строку, а на втором - переносишь ее часть в другую переменную. Было бы гораздо логичнее, если бы ты, найдя втрое вхождение двоеточия, отрезал "хвост" строки той же delete. |
CormiX |
![]()
Сообщение
#14
|
Новичок ![]() Группа: Пользователи Сообщений: 42 Пол: Мужской Репутация: ![]() ![]() ![]() |
Тогда использовалась бы только 1 строка правильно?
|
andriano |
![]()
Сообщение
#15
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
Добавлено через 4 мин. Тогда использовалась бы только 1 строка правильно? Да. Это, естественно, относится к варианту со строками. В варианте с массивами нужно либо писать для них собственные варианта pos и delete, либо искать индексы первого и второго (если есть) двоеточий, либо, как предлагает Lapp, отслеживать состояние. Но я бы в качестве индикатора состояния ввел не логическую, а целую переменную, т.к. количество состояний больше двух: 1. До первого двоеточия, 2. Псле первого но до второго, 3. После второго. |
CormiX |
![]()
Сообщение
#16
|
Новичок ![]() Группа: Пользователи Сообщений: 42 Пол: Мужской Репутация: ![]() ![]() ![]() |
Тоесть результат таков:
Сообщение отредактировано: CormiX - 27.12.2009 14:07 |
Lapp |
![]()
Сообщение
#17
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Тоесть результат таков: Что это там за массив a? Он не описан. Ты пытался откомпилить эту прогу? Добавлено через 3 мин. Да, после исправления получше стало. Но ты бы все же обратил внимание на формат.. Код Я тебе даю правильно отформатированные куски кода , но когда вижу потом их в твоей программе - впору за голову хвататься -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
CormiX |
![]()
Сообщение
#18
|
Новичок ![]() Группа: Пользователи Сообщений: 42 Пол: Мужской Репутация: ![]() ![]() ![]() |
А что не так?(
ета прога почемуто не работает((( Сообщение отредактировано: CormiX - 27.12.2009 14:49 |
Lapp |
![]()
Сообщение
#19
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
ета прога почемуто не работает((( Ты запутался немного в пределах. Я исправил. Отдельно нужно иметь макисмальный размер массива (это m сейчас) и количество вводимых символов (это n).Вот так: program xxx_1; И постарайся заботиться о формате. Если бы первый вариант был правильно отформатирован, ошибка была бы замечена раньше - это я тебе гарантирую. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
CormiX |
![]()
Сообщение
#20
|
Новичок ![]() Группа: Пользователи Сообщений: 42 Пол: Мужской Репутация: ![]() ![]() ![]() |
Огромное спасибо!!!
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 2:23 |