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

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

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

 
 Ответить  Открыть новую тему 
> Строки в массиве двумерном, строки
сообщение
Сообщение #1


Пионер
**

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

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


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


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

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

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


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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.





бред бредом канечна...но подругому я чет не понял как в массив строку запихнуть....И еще мне препод сказал,что лучше создать для каждой строки множество и проверять удовлетворяетли условию.И проверка должна идти вот так:
первая строка,вторая,третья
затем вторая,третья,четвертая
а потом третья,четвертая,пятая.
Спасибо заранее за помощь
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.


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


Пионер
**

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

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


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


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

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

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


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

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

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


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


Пионер
**

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

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


мнеб и так и так хотелось решить....подскажи плиз че там с границами...пачму он вссе время пишет yes?если я даже и не ввожу цифры в строку и знаки сравнения
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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"
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Пионер
**

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

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


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


Гость






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

Добавлено через 56 сек.
А у тебя F1 устанавливается только по результатам последней проверки... Нехорошо...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.


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


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


Пионер
**

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

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


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

Добавлено через 6 мин.
аа..он проверяет поэлементно,а как сделать чтобы всю строку проверял?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;


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

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

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


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


Пионер
**

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

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


Все..огромное спасибо..разобрался)все работает.Volvo,а ты бы не мог пояснить про массив множест плиз.Оч хочу разобраться
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Пионер
**

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

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


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


Гость






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

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

 





- Текстовая версия 29.03.2024 20:10
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name