Всем доброго вечера очень нужны люди которые разбираются в языке программирования паскаль. Длео в том что у меня беда( Завтра необходимо ехать в универ сдавать Лабораторную работу по информатике. Проблема в том что у меня нет этой лабораторной, но есть образец выполнения другого варианта. Вкратце суть лабораторной состоит в работе с псевдослучайными последовательностями(нихерова для 1 курса универа). Ссылка на образец работы - http://ifolder.ru/5071931. Задание образца
Выделить цветом и подсчитать число слов, удовлетворяющих следующим условиям:
1. Гласные буквы в слове расположены асимметрично(1-я но не последняя и т.д.)
2. Слово принадлежит строке, в которой букв меньше, чем в первой строке.
Мое задание :
Выделить цветом и подсчитать число слов, удовлетворяющих следующим условиям:
1. Первая и средняя буквы в слове - согласные.
2. Слово принадлежит столбцу, в котором четырехбуквенных слов меньше, чем пятибуквенных.
P.S. Пролистал 3 книжки по Паскалю. Нигде не описывается команда GetWord.
P.P.S. Обращусь ещё обязательно. Всем заранее спасибо за самые адекватные комментарии и желание помочь
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]
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ми символов и текста состоящего из не болле 20ти слов...
по моему тупа масс if'ы решают:-)
если конечно это задача не на какую-нить специальную тему, типа там, рекурсия...или циклы:-)
Так я предлагаю сделать множество просто для проверки на гласность, чтобы избежать подобных строк - if(obeg=65)or(obeg=69)or(obeg=73)or(obeg=79)or(obeg=85)or(obeg=89) then begin , или по условию все обязательно должны быть выполнено с использованием массивов ? В данном случае это не очень удобно
в том то и дело что задачка целенаправленная, а именно на создание Массивов множеств и работой с псевдослучайными последовательностями... я сам в шоке от того что задают людям после 11 класса на 1 курсе универа. Специальность замечу к программисту никакого отношения не имеет, это видимо так для общего развития
блин, всю жизнь ругался на нашу систему образования..."для общего развития"...блин, с массивом и впрям нифига не удобно, а если слово больше чем из 3х букв?и слов этих больше чем 20?надо динамический массив, а это надо тип описывать, а это, блин, вложно...если б си...да и то не вспомню...короче извини...давно это было...паскаль
да в принципе я тоже так думаю сомневаюсь что препод сам точно знает как это делает я думаю что сдам эту работу и скажу что это именно то что он просит) прокатит не зря же я деньги за учебу плачу)
Ну а более там никаких ограничений нет, кроме тех что надо массивы использовать ? Просто обычно в лабах разрешают использовать все, что сам хочешь, хоть строки на ассемблере вставляй ...
ппц, дак смотря как делать, самый простой способ(я уже писал) масс if'ы, массив в этой задаче бесполещен...
а принцип прост, побуквенно считываешь слово, проверяешь каждую букву на принадлежность к согласной, запоминая номера согласных, а потом сравниваешь эти номера...
Тебе не каждая буква нужна, а лишь первая и средняя ... Тоесть надо всего то посчитать кол-во этих букв, разделить на два и проверить первую букву и полученную только что ... Проверять лучше всеже гласность, ибо гласных букв меньше соответственно и само условие проверки будет короче ...
Так вон же они множества в теме то и даже в задании написано что поиск через них ... Эх масс if , масс if ...
Ща напишу тебе кусок выполняющий проверку только первого пункта ...
Лабораторная работа №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)
Короче на примере как изменить данный вариант , в описание добавляй
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 В цикле который считает символы в строке должны быть неравно пробелу , почему то не отпечаталось ... Так же вариант работает если символов в строке нечетное число , т.е есть средний , лень было проверки ставить просто )
Ну там написано if ww[c] '' then n := n + 1 , знак неравенства еще должен быть , тока она не отпечатался , типа если ww[c] не равен ' ' , то n := n + 1;
я извиняюсь я наверное сейчас выгляжу несведующим в этом деле) просто так и есть я в паскале почти ничего не понимаю)Программирование для меня это if else readln writeln sry если что)
if ww[c] < > '' then n := n + 1
Если четное, то хз чего серединой считать ... Я бы у препода спросил когда задание получал ) Ну так как я написал , получится что если букв 4 , то серединой будет 3 ... Можно сделать проверку на четность кол-ва букв , и выдавать мессагу мол кол-во букв четное , так что средней нет ...
Спасибо огромное Showt1me а также всем кто помогал) Серьезно очень выручили) маленько работает) а больше нам не надо) Хорошо что ещё есть люди которые готовы друг другу помочь