Люди помогите пожалуйста написать программу на паскале |
|
Здравствуйте, гость ( Вход | Регистрация )
Люди помогите пожалуйста написать программу на паскале |
16.6.2006, 15:34
Сообщение
#1
|
|
Группа: Сообщений: 0 Регистрация: -- Пользователь №: |
Дан массив слов, нужно написать программу, которая бы переписывала в другой массив слова начинающиеся с гласной.
Решите пожалуйста. Заранее благодарю |
|
|
16.6.2006, 16:31
Сообщение
#2
|
|
Группа: Сообщений: 0 Регистрация: -- Пользователь №: |
Код const
NumOfWords = 10; //количество слов в массиве var source, dest: array [1..NumOfWords] of String; // массивы первый и второй s: set of char; // множество букв с которых должно начинаться слово i, j: Integer; // переменные циклов procedure InitSourceArray; begin // Инициализация первого массива, ввод с клавы сам оформь source[1]:='Амелин'; source[2]:='петя'; source[3]:='яна'; source[4]:='аня'; source[5]:='маша'; source[6]:='саша'; source[7]:='Лёва'; source[8]:='вова'; source[9]:='алеша'; source[10]:='иван'; end; procedure DisplayDestArray;; begin // Тут опиши вывод end; procedure MoveWords; begin // Буквы с которых начинаются слова, которые надо внести в другой массив s := ['а','я','у','ю','ы','и','о','ё','е','э']; s := s + ['А','Я','У','Ю','Ы','И','О','Ё','Е','Э']; // Инициализация первого массива (здесь просто присвоение, можно осуществить например ввод с клавы) InitSourceArray; // Непосредственное перемещение слов, начинающихся с нужной буквы j:=1; for i:= 1 to NumOfWords do if source[i,1] in s then begin dest[j] := source[i]; inc(j); end; // Вывод значений DisplayDestArray; end; |
|
|
1.7.2006, 21:57
Сообщение
#3
|
|
Группа: Сообщений: 0 Регистрация: -- Пользователь №: |
SIMBA Имхо чуть не то...
Дельфей дома нет (надоели на работе :lol: ), но суть объясню. 1. Дан массив слов... -> массиву лучше быть динамическим, а не статическим как у тебя, тогда не нужна будет переменная NumOfWords и соответственно привязка на количество элементов. 2.Если он (массив) уже дан, зачем его еще и оформлять программно? И тем более с клавиатуры. Массивом может выступать просто и некий текст. Тогда лучше прописать занесение данных из некоего текста (набора слов) в массив. Тут сама задачка поставлена не очень пОлно. p1caso А тебе следовало изложить условия более подробно... ;) |
|
|
1.7.2006, 22:59
Сообщение
#4
|
|
Группа: Сообщений: 0 Регистрация: -- Пользователь №: |
gNEV
Если брать динамическиую переменную (array of string), то задача вообще упрощается (если память мне не изменяет - я с паскаля 7 лет назад слез): по указателю можно к любому символу обратиться. например если s:string, то s(0) - первый символ. (кажется указатели с 0 идут...) |
|
|
1.7.2006, 23:58
Сообщение
#5
|
|
Группа: Сообщений: 0 Регистрация: -- Пользователь №: |
$t@lker Так и есть, только динамическому массиву еще желательно длину определить функциевиной SetLength.
Если s:string то тогда s[0]:= ... (строки с нуля идут, а массивы с 1). Вот у SIMBA так и написано if source[i,1] in s then (но что-то мне подсказывает, что так работать не должно, имхо конечно...) я бы создал переменную s:string и тогда (если брать статический массив): for i:= 1 to NumOfWords do begin s:=source[i]; //а уже потом if s[0] in s then ... end; |
|
|
2.7.2006, 5:01
Сообщение
#6
|
|
Группа: Сообщений: 0 Регистрация: -- Пользователь №: |
На паскале нет динамических массивов. Они появились только в Object Pascal, начиная с Дельфи 4.
|
|
|
2.7.2006, 7:31
Сообщение
#7
|
|
Группа: Сообщений: 0 Регистрация: -- Пользователь №: |
kilativv
да... а я использовал динамические массивы array of string в TP7 на практике... |
|
|
6.7.2006, 6:43
Сообщение
#8
|
|
Группа: Сообщений: 0 Регистрация: -- Пользователь №: |
Очень странно И насколько он был динаамичный. Может это был список с указателями?
|
|
|
6.7.2006, 10:18
Сообщение
#9
|
|
Группа: Сообщений: 0 Регистрация: -- Пользователь №: |
kilativv Насчет TP7 не могу точно что-либо сказать, вполне возможно, что там и есть динамические массивы, а вот в OP они появились только с 4-й версии, это да. Ну я ж говорил некорректный вопрос изначально. Программа на Паскале...каком Паскале? Вобщем лирика это все...
|
|
|
6.7.2006, 16:00
Сообщение
#10
|
|
Группа: Сообщений: 0 Регистрация: -- Пользователь №: |
kilativv
эээх, последний раз практически использовал паскаль(TP7) году так 98-ом(зарпалта для местного молокозавода), поэтому исходники далеко похерены, но если есть терпение подождать - обязательно выложу кусок. Я и сам конечно мог забыть, но то что все динамические использовал - эт точно: писал под 386-ю машину, поэтому даже Crt модуль не использовал. Весь ВВ на прямой адресации к памяти ради быстродействия и уменьшения exe-шника. ;) |
|
|
26.11.2006, 15:55
Сообщение
#11
|
|
Младший сержант Группа: Пользователи Сообщений: 1638 Регистрация: 8.11.2017 Пользователь №: 12401 |
Люди, если вы не звери, помогите решить задачку по информатике. Значит, задача:
даны три стороны треугольника, найти их S и P. Формула вычисления площади треугольника - квадратный корень из P(p-a)(p-B)(p-c), где р-полупериметр. Полупериметр, если мне не изменяет склероз - это a+b+c/2. Пытаюсь решить эту задачу, пишу на Паскале такой код: Код program z10; uses crt; var a,b,c,P,S,pp:real; begin write('Введите три стороны треугольника'); read(a,b,c); pp:=a+b+c/2; S:=sqrt(P*(pp-a)*(pp-b)*(pp-c)); P:=a+b+c; write(S, ' ', P); end. При тестировании выясняется, что S все время высчитывается неправильно - он при любых значениях a,b,c равен нулю. Ошибка явно в строчке S:=sqrt(P*(pp-a)*(pp-b)*(pp-c));. Предполагаю, что намудрил что-то со скобками или типами данных. Постарайтесь помочь до утра, мне завтра на зачет ехать, а я два урока отсутствовал, надо ж хотьчто-то привезти. Две задачи уже решил, с третьей - ваша помощь нужна. ЗЫ Переменной pp я обозначил полупериметр. |
|
|
26.11.2006, 20:42
Сообщение
#12
|
|
Группа: Сообщений: 0 Регистрация: -- Пользователь №: |
Может сначала вычислить P, а потом S? Ато в формуле площади периметр неизвестен.
Кстати, по-моему правильно будет S:=sqrt(pp*(pp-a)*(pp-B)*(pp-c)); , т.е. при выч. площади используется ТОЛЬКО полупериметр. |
|
|
26.11.2006, 21:18
Сообщение
#13
|
|
Младший сержант Группа: Пользователи Сообщений: 1638 Регистрация: 8.11.2017 Пользователь №: 12401 |
.BrAT
Точно, поставил сначала вычисление периметра, и пошел! Ну все у меня не как у людей! :lol: + тебе, реально и вовремя помог! О! Нашел еще одну ошибку! При вычислении pp a+b+c надо в скобки заключать. Иначе неправильно считает. Но теперь я готов. |
|
|
26.11.2006, 22:11
Сообщение
#14
|
|
Группа: Сообщений: 0 Регистрация: -- Пользователь №: |
Jediroman
При первом использовании в теле write желательно использовать writeln. (бывают глюки потом с вводом) |
|
|
27.11.2006, 5:56
Сообщение
#15
|
|
Младший сержант Группа: Пользователи Сообщений: 1638 Регистрация: 8.11.2017 Пользователь №: 12401 |
$t@lker
Знаю. Но это, так сказать, мелкие ошибки, устраняются на месте, в классе, дома я только на общую работоспособность проверяю. |
|
|
27.11.2006, 9:39
Сообщение
#16
|
|
Группа: Сообщений: 0 Регистрация: -- Пользователь №: |
Jediroman
Да эт не ошибка.
|
|
|
16.3.2007, 20:17
Сообщение
#17
|
|
Группа: Сообщений: 0 Регистрация: -- Пользователь №: |
Можете помочь с написанием программы....Нужно написать прогу, которая преобразовывала бы строку, заменяя каждое вхождение заданного слова другим заданным слововом, причём прога должна быть сделана через рекурсию
|
|
|
16.3.2007, 23:20
Сообщение
#18
|
|
Группа: Сообщений: 0 Регистрация: -- Пользователь №: |
Red Kaktus
function Replace_with_recursion(str, sub1, sub2: string): string; var aPos:Integer; begin aPos:=Pos(sub1, str); if(aPos>0) then begin Result:=Result+Copy(str,1,aPos-1)+sub2; Result:=Result+Replace_with_recursion(Copy(str,aPos+length(sub1),length(str)),su b1,sub2); end else Result:=Result+str; end; заменяет в строке str строку sub1 на строку sub2 |
|
|
17.3.2007, 11:31
Сообщение
#19
|
|
Группа: Сообщений: 0 Регистрация: -- Пользователь №: |
2 antonn
Спасиб большое |
|
|
17.3.2007, 11:35
Сообщение
#20
|
|
Группа: Сообщений: 0 Регистрация: -- Пользователь №: |
Пжалста
хотя было бы проще без рекурсии: function ReplaceSub(str, sub1, sub2: string): string;
var aPos: Integer; rslt: string; begin aPos := Pos(sub1, str); rslt := ''; while (aPos <> 0) do begin rslt := rslt + Copy(str, 1, aPos - 1) + sub2; Delete(str, 1, aPos + Length(sub1) - 1); aPos := Pos(sub1, str); end; Result := rslt + str; end; |
|
|
Текстовая версия | Сейчас: 26.9.2024, 9:56 |