IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Строки в массиве двумерном, строки
Zundell
сообщение 5.02.2007 14:38
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 65
Пол: Мужской

Репутация: -  0  +


Ребят подскажите пожалуйста,вот мне нужно запонить массив (двумерный) строками(чтоб была первая строка,вторая строка,третья и т.д),после этого необходимо проверить встречается ли хотя бы в трех строках цифры и знаки сравнения.Задачу решить с использованием множеств.Беда в чем,в том что я не могу заполнить массив символами,т.е сделать строки.(я как понимаю необходимо ввести строку,затем с помощью length посчитать длинну строки и дальше посимвольно записать первый символ в a[1,j],и так далее).Проверку на вхождение символов я знаю как делать..но вот с вводом не моглибы помочь?заранее благодарен. yes2.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 17)
мисс_граффити
сообщение 5.02.2007 16:34
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


1. Массив - статический? Тогда должно быть ограничение на длину строк. Ничего не оговаривается, то есть предел - 255 символов? А сколько строк - тоже не оговорено?
2. При чем здесь множества? Или их использовать только для проверки на вхождение? (То есть записать во множество цифры и знаки сравнения)?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 5.02.2007 16:44
Сообщение #3


Гость






статический массив....да..с помощью множества проверить имеются ли в массиве(а вернее в строках) цифры и знаки сравнения.Массив любой по размеру...вот я тут накидал немного:
Const
z=10;
var
a:array[1..10,1..10] of char;
b:array[1..10] of char;
str:string[10];
i,j,n,m:integer;
P:set of char;
f1:boolean;
begin
p:=['0'..'9','<'..'>'];
writeln('vvod matricu');
writeln('vvedite kolvo strok matricu-');
readln(m);
for i:=1 to m do
for j:=1 to z do
begin
write('a[',i,',',j,']-');
readln(a[i,j]);
end;
for i:=1 to m do
begin
writeln('vvedite stroku');
readln(str);
n:=length(str);
for j:=1 to n do
b[j]:=str[j];
for j:=1 to z do
a[i,j]:=b[j];
end;
F1:=true;
if a[i,j] in p then
writeln('est') else writeln('Net');
readln;
end.





бред бредом канечна...но подругому я чет не понял как в массив строку запихнуть....И еще мне препод сказал,что лучше создать для каждой строки множество и проверять удовлетворяетли условию.И проверка должна идти вот так:
первая строка,вторая,третья
затем вторая,третья,четвертая
а потом третья,четвертая,пятая.
Спасибо заранее за помощь
 К началу страницы 
+ Ответить 
Zundell
сообщение 5.02.2007 17:56
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 65
Пол: Мужской

Репутация: -  0  +


Const
z=10;
var
a:array[1..10,1..100] of char;
str:string[100];
i,j,n,m:integer;
f1:boolean;
p:set of char;
begin
f1:=false;
p:=['1'..'9'];
writeln('vvedite kolvo strok');
readln(m);
for i:=1 to m do
begin
writeln('vvedite stroku ravnuju 10 simvolam');
readln(str);
n:=length(str);
for j:=1 to n do
a[i,j]:=str[j];
end;
writeln(' ');
for i:=1 to m do
begin
for j:=1 to n do
write(a[i,j],' ');
writeln;
end;
for i:=1 to 3 do
for j:=1 to n do
begin
if a[i,j] in p then
f1:=true else
f1:=false;
end;
if f1 then writeln('est') else writeln('net');
readln;
end.





вот я переделал..посмотрите где ошибка пожалуйста
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.02.2007 17:57
Сообщение #5


Гость






Цитата
И еще мне препод сказал,что лучше создать для каждой строки множество и проверять удовлетворяетли условию.
Ну, тогда у тебя задача не про "двумерный массив строк", а про массив множеств...

type
char_set = set of char;
var
arr_of_set = array[1 .. 10] of char_set;

begin
for i := 1 to 10 do begin
arr_of_set[i] := [];
write('строка №', i, ' -> '); readln(s);
for j := 1 to length(s) do include(arr_of_set[i], s[j]);
end;

{
Все, множества заполнены, теперь надо просто пройтись по ним, и подсчитать,
в скольких из множеств выполняется условие:
arr_of_set[i] * ['0' .. '9', '<', '=', '>'] <> []
}
end.


Справишься?
 К началу страницы 
+ Ответить 
Zundell
сообщение 5.02.2007 18:05
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 65
Пол: Мужской

Репутация: -  0  +


через if?если не трудно мог бы пожалуйста написать с коментами.И еще вопрос,как я начал делать так можно чисто теоритически сделать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 5.02.2007 19:09
Сообщение #7


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Можно
Ты там с границами циклов понапутал.
Но определись, что тебе нужно - двумерный массив символов или одномерный массив множеств?

Цитата
И проверка должна идти вот так:
первая строка,вторая,третья
затем вторая,третья,четвертая
а потом третья,четвертая,пятая.

и что, все комбинации перебирать?!


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zundell
сообщение 5.02.2007 19:13
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 65
Пол: Мужской

Репутация: -  0  +


мнеб и так и так хотелось решить....подскажи плиз че там с границами...пачму он вссе время пишет yes?если я даже и не ввожу цифры в строку и знаки сравнения
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.02.2007 19:30
Сообщение #9


Гость






Цитата
пачму он вссе время пишет yes?если я даже и не ввожу цифры в строку и знаки сравнения
Не знаю... У меня при вводе
Цитата
vvedite kolvo strok
3
vvedite stroku ravnuju 10 simvolam
qwertyuiop
vvedite stroku ravnuju 10 simvolam
asdfghjkla
vvedite stroku ravnuju 10 simvolam
zxcvbnmzxc
выдает "net"
 К началу страницы 
+ Ответить 
Zundell
сообщение 5.02.2007 19:34
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 65
Пол: Мужской

Репутация: -  0  +


а вот если ввести какиенить цифры в строку,то всеравно выдает нет
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.02.2007 19:36
Сообщение #11


Гость






Потому, что ПОСЛЕДНИЙ символ, который ты проверяешь - НЕ число...

Добавлено через 56 сек.
А у тебя F1 устанавливается только по результатам последней проверки... Нехорошо...
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 5.02.2007 19:37
Сообщение #12


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


ну давай разбираться...
Const
z=10;
var
a:array[1..10,1..100] of char;
str:string[100];
i,j,n,m:integer;
f1:boolean;
p:set of char;
begin
f1:=false;
p:=['1'..'9'];
writeln('vvedite kolvo strok');
readln(m); {итак, m - это количество задействованных строк. хорошо бы проверять, что m<=10... ну ладно}
for i:=1 to m do
begin
writeln('vvedite stroku ravnuju 10 simvolam'); {в чем глубокий смысл этой просьбы? зачем выделяем 100 ячеек под строку, если ее длина равна 10?}
readln(str);
n:=length(str); {просили ввести строку длины 10, а теперь определяем ее длину. не верим пользователю?}
for j:=1 to n do
a[i,j]:=str[j];
end;
{вот в этом месте n равно длине последней строки, m равно количеству строк}
writeln(' ');
for i:=1 to m do {до m, логично}
begin
for j:=1 to n do {почему до n? а если какая-то строка короче или длиннее последней?}
write(a[i,j],' ');
writeln;
end;
for i:=1 to 3 do {откуда берется 3? это что-то новенькое...}
for j:=1 to n do {опять же - n}
begin
if a[i,j] in p then {типа f1:=a[i,j] in p? то есть только один символ тебя интересует?}
f1:=true else
f1:=false;
end;
if f1 then writeln('est') else writeln('net'); {если бы ты расставил отступы, то увидел бы, что это не в цикле... или ты и не хочешь писать для каждой строки?}
readln;
end.


Сообщение отредактировано: мисс_граффити - 5.02.2007 19:40


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zundell
сообщение 5.02.2007 19:55
Сообщение #13


Пионер
**

Группа: Пользователи
Сообщений: 65
Пол: Мужской

Репутация: -  0  +


Насчет 3-это типа я хочу проверять в первых трех строках).
<<{типа f1:=a[i,j] in p? то есть только один символ тебя интересует?}>>-а вот сдесь я чет не понял почему я тока один проверяю..ааа..так как я энд поставил перед <<if f1 then writeln('est') else writeln('net'); >>?а если я его не ставлю,то он выводит оч много непонятных yes и net

Добавлено через 6 мин.
аа..он проверяет поэлементно,а как сделать чтобы всю строку проверял?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 5.02.2007 20:41
Сообщение #14


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Ну, например, так:
изначально считаешь, что искомых символов в строке нет. (то есть f1:=false)
а потом, если попался символ из p, присваиваем true
варианты реализации:
//минимально переделанный твой
for i:=1 to m do
begin
f1:=false; {считаем, что строка без этих символов}
for j:=1 to [подумай, как определять этот индекс] do
begin
if a[i,j] in p then
f1:=true;
end;
end;


//несколько логичнее
for i:=1 to m do
begin
f1:=false; {считаем, что строка без этих символов}
for j:=1 to [подумай, как определять этот индекс] do
f1:=f1 or (a[i,j] in p) ;
end;


а по-хорошему, надо вылетать из цикла по строке, как только встретим символ - зачем нам лишние проверять?

сорри, проверить на работоспособность не могу, но вроде проблем не должно быть

Сообщение отредактировано: мисс_граффити - 5.02.2007 20:42


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zundell
сообщение 5.02.2007 21:10
Сообщение #15


Пионер
**

Группа: Пользователи
Сообщений: 65
Пол: Мужской

Репутация: -  0  +


Все..огромное спасибо..разобрался)все работает.Volvo,а ты бы не мог пояснить про массив множест плиз.Оч хочу разобраться
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.02.2007 21:25
Сообщение #16


Гость






Я же написал самое начало программы...

Ну, хорошо, вот программа полностью:
type
char_set = set of char;
var
arr_of_set: array[1 .. 10] of char_set;
s: string;
i, j, n, count: integer;

begin
write('Число строк -> '); readln(n);

for i := 1 to n do begin
arr_of_set[i] := [];
write('Строка №', i, ' -> '); readln(s);
for j := 1 to length(s) do include(arr_of_set[i], s[j]);
end;

{
Все, множества заполнены, теперь надо просто пройтись по ним, и подсчитать,
в скольких из множеств выполняется условие:
arr_of_set[i] * ['0' .. '9', '<', '=', '>'] <> []
}
count := 0;
for i := 1 to n do { <--- Проходим по всем множествам }
if arr_of_set[i] * ['0' .. '9', '<', '=', '>'] <> [] then inc(count);
{
и если приведенное выше условие выполняется, значит
в строке был хотя бы один символ из "цифр" и "операций
сравнения" (для доп. информации - читай тему "Множества",
в FAQ-е), то увеличиваем счетчик ...
}

{
Проверяем число строк, в которых встретились заданные символы.
Если больше 3 - то Да, иначе - Нет
}
if count >= 3 then writeln('Yes')
else writeln('No')

end.
 К началу страницы 
+ Ответить 
Zundell
сообщение 5.02.2007 21:54
Сообщение #17


Пионер
**

Группа: Пользователи
Сообщений: 65
Пол: Мужской

Репутация: -  0  +


Спасибо Volvo и Мисс!а для тупого что такое include?вплане че она делает и что мы указываем в скобках?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Алена
сообщение 5.02.2007 21:59
Сообщение #18


Гость






Include(the_set, value); - то же самое, что the_set := the_set + [value];
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 14:01
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"