|
|
#1
e1eKTrik @ 23.01.08 17:30 |
[пожаловаться]
|
|
Всем доброго вечера очень нужны люди которые разбираются в языке программирования паскаль. Длео в том что у меня беда( Завтра необходимо ехать в универ сдавать Лабораторную работу по информатике. Проблема в том что у меня нет этой лабораторной, но есть образец выполнения другого варианта. Вкратце суть лабораторной состоит в работе с псевдослучайными последовательностями(нихерова для 1 курса универа). Ссылка на образец работы - http://ifolder.ru/5071931. Задание образца
Выделить цветом и подсчитать число слов, удовлетворяющих следующим условиям:
1. Гласные буквы в слове расположены асимметрично(1-я но не последняя и т.д.)
2. Слово принадлежит строке, в которой букв меньше, чем в первой строке.
Мое задание :
Выделить цветом и подсчитать число слов, удовлетворяющих следующим условиям:
1. Первая и средняя буквы в слове - согласные.
2. Слово принадлежит столбцу, в котором четырехбуквенных слов меньше, чем пятибуквенных.
P.S. Пролистал 3 книжки по Паскалю. Нигде не описывается команда GetWord.
P.P.S. Обращусь ещё обязательно. Всем заранее спасибо за самые адекватные комментарии и желание помочь
|
|
|
#2
xfwx.hinter @ 23.01.08 18:14 |
[пожаловаться]
|
|
getword - это не стандартная функция, в образце она описана вручную как процедура;
имхо выучить уже не успеешь, лучше бы попросил, чтобы объяснили
|
|
|
#3
e1eKTrik @ 23.01.08 19:10 |
[пожаловаться]
|
|
Объяснение вполне устроит, мне не нужно ничего кроме 1 пункта а именно про согласные скажите пожалуйста как это сделать!
|
|
|
#4
Gg_rus_creW @ 23.01.08 19:48 |
[пожаловаться]
|
|
а слова то русские? в принцепе не важно, if (x="q") or (x="п")... or (x="щ") ...
я бы так сделал, врядли паскаль знает что такое согласные...
|
|
|
#5
e1eKTrik @ 23.01.08 19:51 |
[пожаловаться]
|
|
program lab7;
uses Crt;
type
s=array[1..7] of char;
var
a:array[1..20,1..10] of s;
w:s;
i,j,k:integer; {i-stroka,j-stolbez}
buf:string[7];
nstr:integer;
mstr:array[1..20] of shortint;
const summa: real = 0;
procedure GetWord(var ww:s);
var
k,n,p:integer;
begin
n:=random(6)+2;
for k:=1 to 7 do
ww[k]:=chr(0);
for k:=1 to n do begin
p:=random(25)+65;
ww[k]:=CHR(p);
end;
for k:=n+1 to 7 do
ww[k]:=chr(32);
end;
function asymmetric(var ww:s):boolean;
var
k,wwlen,n,obeg,oend,omid:integer;
begin
wwlen:=0;
asymmetric:=true;
for k:=1 to 7 do
if ww[k]' ' then wwlen:=wwlen+1;
n:=wwlen div 2;
for k:=1 to n do begin
obeg:=ord(ww[k]);
oend:=ord(ww[wwlen-k+1]);
if (obeg=65)or(obeg=69)or(obeg=73)or(obeg=79)or(obeg=85)or(obeg=89) then begin
asymmetric:=true;
end
else begin
asymmetric:=false;
if (oend=65)or(oend=69)or(oend=73)or(oend=79)or(oend=85)or(obeg=89) then
asymmetric:=false;
end;
if (oend=65)or(oend=69)or(oend=73)or(oend=79)or(oend=85)or(obeg=89) then begin
asymmetric:=true;
if (obeg=65)or(obeg=69)or(obeg=73)or(obeg=79)or(obeg=85)or(obeg=89) then
asymmetric:=false;
end;
end;
end;
begin
randomize;
buf:='';
nstr:=0;
for i:=1 to 20 do begin
for j:=1 to 10 do begin
GetWord(w);
a[i,j]:=w;
for k:=1 to 7 do
if ord(w[k])32 then nstr:=nstr+1;
end;
mstr[i]:=nstr;
nstr:=0;
end;
for i:=1 to 20 do begin
for j:=1 to 10 do begin
w:=a[i,j];
for k:=1 to 7 do
buf:=buf+w[k];
if (mstr[i]
|
|
|
#6
e1eKTrik @ 23.01.08 19:53 |
[пожаловаться]
|
|
and asymmetric(w) then
begin
summa:=summa+1;
TextColor(green);
end
else TextColor(white);
write(buf);
TextColor(white);
write('|');
buf:='';
end;
end;
writeln ('Number of words - ',summa:2:0);
readln;
end.
|
|
|
#7
showt1me @ 23.01.08 19:54 |
[пожаловаться]
|
|
ЛОЛ, зачем массив ? Создаем множество из согласных букв и проверяем символ на вхождение ... Входит - буква согласная , нет - гласная ...
|
|
|
#9
e1eKTrik @ 23.01.08 19:56 |
[пожаловаться]
|
|
Вся особенность именно в создании массива и получения рандомных слов, причем подходящие из массива должны выделяться цветом
|
|
|
#10
Gg_rus_creW @ 23.01.08 19:57 |
[пожаловаться]
|
|
это ты сам написал?я давно уже паскаль изучал, но как я понял программа будет работать для слов не больше 7ми символов и текста состоящего из не болле 20ти слов...
по моему тупа масс if'ы решают:-)
если конечно это задача не на какую-нить специальную тему, типа там, рекурсия...или циклы:-)
|
|
|
#11
showt1me @ 23.01.08 20:00 |
[пожаловаться]
|
|
Так я предлагаю сделать множество просто для проверки на гласность, чтобы избежать подобных строк - if(obeg=65)or(obeg=69)or(obeg=73)or(obeg=79)or(obeg=85)or(obeg=89) then begin , или по условию все обязательно должны быть выполнено с использованием массивов ? В данном случае это не очень удобно
|
|
|
#12
e1eKTrik @ 23.01.08 20:00 |
[пожаловаться]
|
|
в том то и дело что задачка целенаправленная, а именно на создание Массивов множеств и работой с псевдослучайными последовательностями... я сам в шоке от того что задают людям после 11 класса на 1 курсе универа. Специальность замечу к программисту никакого отношения не имеет, это видимо так для общего развития
|
|
|
#13
e1eKTrik @ 23.01.08 20:04 |
[пожаловаться]
|
|
http://www.proplay.ru/users/60574/gallery/ вот как должна выглядеть программа
|
|
|
#14
Gg_rus_creW @ 23.01.08 20:06 |
[пожаловаться]
|
|
блин, всю жизнь ругался на нашу систему образования..."для общего развития"...блин, с массивом и впрям нифига не удобно, а если слово больше чем из 3х букв?и слов этих больше чем 20?надо динамический массив, а это надо тип описывать, а это, блин, вложно...если б си...да и то не вспомню...короче извини...давно это было...паскаль
|
|
|
#15
e1eKTrik @ 23.01.08 20:09 |
[пожаловаться]
|
|
да в принципе я тоже так думаю сомневаюсь что препод сам точно знает как это делает я думаю что сдам эту работу и скажу что это именно то что он просит) прокатит не зря же я деньги за учебу плачу)
|
|
|
#16
e1eKTrik @ 23.01.08 20:11 |
[пожаловаться]
|
|
а вообще отпишитесь пожалуйста то кто понимают)Мне просто любопытно как это сделать на самом деле ?
|
|
|
#17
showt1me @ 23.01.08 20:12 |
[пожаловаться]
|
|
Так тебе чего надо было ? Написать тебе как это выполнить или объяснить принцип просто ? Там делать то нечего по сути ...
|
|
|
#18
e1eKTrik @ 23.01.08 20:14 |
[пожаловаться]
|
|
нет желательно конечно помочь) но если это требует усилий) то никого конечно не заставляю просто расскажите)
|
|
|
#20
showt1me @ 23.01.08 20:17 |
[пожаловаться]
|
|
Ну а более там никаких ограничений нет, кроме тех что надо массивы использовать ? Просто обычно в лабах разрешают использовать все, что сам хочешь, хоть строки на ассемблере вставляй ...
|
|
|
#21
Gg_rus_creW @ 23.01.08 20:18 |
[пожаловаться]
|
|
ппц, дак смотря как делать, самый простой способ(я уже писал) масс if'ы, массив в этой задаче бесполещен...
а принцип прост, побуквенно считываешь слово, проверяешь каждую букву на принадлежность к согласной, запоминая номера согласных, а потом сравниваешь эти номера...
|
|
|
#22
showt1me @ 23.01.08 20:21 |
[пожаловаться]
|
|
Тебе не каждая буква нужна, а лишь первая и средняя ... Тоесть надо всего то посчитать кол-во этих букв, разделить на два и проверить первую букву и полученную только что ... Проверять лучше всеже гласность, ибо гласных букв меньше соответственно и само условие проверки будет короче ...
|
|
|
#24
showt1me @ 23.01.08 20:25 |
[пожаловаться]
|
|
Так вон же они множества в теме то и даже в задании написано что поиск через них ... Эх масс if , масс if ...
Ща напишу тебе кусок выполняющий проверку только первого пункта ...
|
|
|
#25
e1eKTrik @ 23.01.08 20:26 |
[пожаловаться]
|
|
Лабораторная работа №7.
Тема. Массивы. Множества. Работа с псевдослучайными последовательностями(ПСП).
Задание. С помощью ПСП сформировать двухмерный MxN массив из элементов. В качестве элементов использовать слова из K...L символов A...Z(одномерный массив символов латинского алфавита). Осуществить подсчет элементов, удовлетворяющих условиям задания. Проверку заданных условий поиска реализовать и использованием типа множества. Вывести на экран сформированный массив, выделив цветом подсчитанные элементы. Вывести результат подсчета на экран в отдельное окно.(Здесь M и N - соответственно число строк и столбцов формируемой матрицы; K и L - соответственно минимальное и максимальное число букв в формируемых словах элементах массива).
Методические указания
При формировании массива использовать стандартные подпрограммы ПСП - Random, Randomize, а также, возможно использование функции CHR. Коды ASCII символов A...Z - 65...90. Слова формируются в одномерных массивах, каждый из которых состоит из L ячеек, буквы записываются без пробела, начиная с первой ячейки.
Незаполненные буквами позиции массива в конце слов заполнить символами пробела - код ASCII - 32.
Для вывода на экран строки заданного текста необходимо:
- в программе указать об использовании модуля CRT(USER CRT; - эта директива должна присутствовать в начале текста программы).
- Перед использованием стандартной процедуры вывода необходимо задать цвет вывода соответствующим значением параметра Х стандартной процедуры TextColor(x)
|
|
|
#27
Gg_rus_creW @ 23.01.08 20:33 |
[пожаловаться]
|
|
#24 ты прав...
сорри, я все уже забыл...был бы я щас на 1-2 курсе, мин за 10 написал бы прогу...
|
|
|
#30
showt1me @ 23.01.08 20:55 |
[пожаловаться]
|
|
Короче на примере как изменить данный вариант , в описание добавляй
const glasn: set of 65..90 = [65,69,73,79,85,89]; //тут еще надо проверить правильно ли я коды гласных выписал, если че дописать или удалить лишние
function asymmetric(var ww:s):boolean;
var
n,c:integer;
begin
n := 0;
for c := 1 to 7 do
if ww[c] '' then n := n + 1; //Подсчет кол-ва символов в строке
n := n div 2 + 1; //Определение средней буквы
if (not (ord(ww[n]) in glasn)) and (not (ord(ww[1]) in glasn)) then
asymmetric := true //Условие выолняется
else
asymmetric := false;//Условие не выполняется
end;
Как то так должно быть , остальной код проги я не читал , но я так понимаю эта ф-ия как раз и проверяет выполнение условия...
P.S В цикле который считает символы в строке должны быть неравно пробелу , почему то не отпечаталось ... Так же вариант работает если символов в строке нечетное число , т.е есть средний , лень было проверки ставить просто )
|
|
|
#31
e1eKTrik @ 23.01.08 21:00 |
[пожаловаться]
|
|
if (not (ord(ww[n]) in glasn)) строку не понял так и писать что ли он определит слолво glasn?
|
|
|
#33
e1eKTrik @ 23.01.08 21:03 |
[пожаловаться]
|
|
Спасибо!!!!! сейчас будем тестить P.S. не поял замечания по поводу пробела
|
|
|
#34
showt1me @ 23.01.08 21:07 |
[пожаловаться]
|
|
Ну там написано if ww[c] '' then n := n + 1 , знак неравенства еще должен быть , тока она не отпечатался , типа если ww[c] не равен ' ' , то n := n + 1;
|
|
|
#35
e1eKTrik @ 23.01.08 21:10 |
[пожаловаться]
|
|
слушай у меня там тоже пусто а ехешник работает исправно) наверное файл повредился не подскажешь что там поставить?)
|
|
|
#38
e1eKTrik @ 23.01.08 21:13 |
[пожаловаться]
|
|
я извиняюсь я наверное сейчас выгляжу несведующим в этом деле) просто так и есть я в паскале почти ничего не понимаю)Программирование для меня это if else readln writeln sry если что)
|
|
|
#41
e1eKTrik @ 23.01.08 21:24 |
[пожаловаться]
|
|
ещё такой вопрос а если в слове четное количество букв что считается серединой ?
|
|
|
#42
showt1me @ 23.01.08 21:28 |
[пожаловаться]
|
|
if ww[c] < > '' then n := n + 1
Если четное, то хз чего серединой считать ... Я бы у препода спросил когда задание получал ) Ну так как я написал , получится что если букв 4 , то серединой будет 3 ... Можно сделать проверку на четность кол-ва букв , и выдавать мессагу мол кол-во букв четное , так что средней нет ...
|
|
|
#43
e1eKTrik @ 23.01.08 21:33 |
[пожаловаться]
|
|
Спасибо огромное Showt1me а также всем кто помогал) Серьезно очень выручили) маленько работает) а больше нам не надо) Хорошо что ещё есть люди которые готовы друг другу помочь
|
|
|
Reply | | | |
|
|
|