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

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

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

> Двухмерный символьный массив. Вывод различающихся столбцов.
сообщение
Сообщение #1


голодный(
*

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

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


Здравствуйте, помогите пожалуйста с программой.
----------------------------------------------------------------
Задача:
Напечатать последовательно все различающиеся между собой столбцы символьной матрицы.
Мое решение:

program simv_massive;
uses crt;
const str=30;
stp=40;
type MyArr=array[1..str,1..stp] of char;
MyArrSp=array[1..str] of char;
var mas:MyArr;
x:MyArrSp;
i,j,k,n,m:byte;
num:integer;

procedure Matr_In(var mas1:MyArr; n1,m1:byte);
var
i,j:byte;
begin
for i:=1 to n1 do
begin
for j:=1 to m1 do
read(mas1[i,j]);
readln;
end;
end;

procedure Matr_Out(var mas2:MyArr; n2,m2:byte);
var
i,j:byte;
begin
for i:=1 to n2 do
begin
for j:=1 to m2 do
write(mas2[i,j]:5);
writeln;
end;
end;

begin
clrscr;
Write('Введите количество строк:');
Readln(n);
Write('Введите количество столбцов:');
Readln(m);
Writeln('Заполните массив');
Matr_In(mas,n,m);
Writeln('Вы ввели массив');
Matr_Out(mas,n,m);

for j:=1 to m do
begin
num:=0;
for i:=1 to n do
if mas[i,j]=x[i] then
num:=num+1;

if num<>n then
for i:=1 to n do
writeln(mas[i,j]);

for i:=1 to n do
x[i]:=mas[i,j];
end;
writeln;
readkey
end.


Начну сначала, подскажите вывести столбцы последовательно это так
Цитата
2 5 5
2 5 6
2 5 8

или можно и так
Цитата
2
2
2

5
5
5
...

моя программа естественно выводит во втором варианте...
-------------------------------------
дальше, у меня она не выводит одинаковые столбцы если только одинаковые столбцы идут друг за другом, подскажите пожалуйста как сделать чтобы работала полноценно.
буду очень благодарен smile.gif
-------------------------------------
приветствуется критика по поводу процедур ввода вывода массива
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


голодный(
*

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

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


Client
Большое спасибо за помощь, сейчас постараюсь разобраться...
Вы множества да использовали? Я тип множества еще не знаю, сейчас буду "узнавать", или может можно как-то без них справиться?
------------------------------
По поводу ввода массива, мне нельзя его вводить в одну строчку или по одному символу в каждой строке, с числовым массивом никаких проблем, а вот в символьном проблема! Есть у кого идеи?
------------------------------
Ну и еще можно глупый вопрос, просто интересно уже не первый раз встречаю в других программах идентификатор (flag) почему именно flag ? Есть этому объяснения?
Если глупость спрашиваю не пинайте smile.gif
Буду благодарен за помощь) smile.gif

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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Sum42 @ 19.10.2010 20:33) *
Я тип множества еще не знаю, сейчас буду "узнавать", или может можно как-то без них справиться?
------------------------------
По поводу ввода массива, мне нельзя его вводить в одну строчку или по одному символу в каждой строке, с числовым массивом никаких проблем, а вот в символьном проблема! Есть у кого идеи?
------------------------------
Ну и еще можно глупый вопрос, просто интересно уже не первый раз встречаю в других программах идентификатор (flag) почему именно flag ? Есть этому объяснения?
Если глупость спрашиваю не пинайте smile.gif

Конечно, можно. Я бы сказал, даже нужно. Вообще не понимаю, зачем усложнять (и ограничивать) простые вещи..
------------------------------
А зачем вообще его вводить? В условии это не оговорено. Сделай ввод случайным процессом.
------------------------------
Совсем не глупость, наоборот - проявление здорового интереса в к вопросу (что так нечасто бывает..) Поднять флажок, опустить флажок, выставить флаг, убрать флаг - это все действия, которые моделируют реальную отметку, например, на карте (в генеральном штабе)), на почтовом ящике (в России не принято, а в остальных странах - сплошь и рядом: Прикрепленное изображение - почтальон кладет конверт и поднимает флаг (картинка отсюда) ). Мой массив f - тоже сокращение от этого слова. В данном слуяае флаг означает, что столбец с этим номером выводить НАДО. Сначала я поднимаю все флаги (f[i]:=true), а потом сбрасываю их по мере обработки.

Вот так будет малька попроще, думаю:
const
m=10; // row length, or number of columns
n=3; // number of rows, or column length

var
a: array[1..n,1..m]of char;
f: array[1..m]of boolean;
i,j,k: integer;

begin
for i:=1 to n do for j:=1 to m do a[i,j]:=Chr(Random(3)+65);
for i:=1 to m do f[i]:=true;
WriteLn('initial array:');
for i:=1 to n do begin
for j:=1 to m do Write(a[i,j]:2);
WriteLn
end;
for i:=1 to m do if f[j] then
for j:=i+1 to m do if f[j] then begin
k:=1;
while (a[k,i]=a[k,j]) and (k<n) do Inc(k);
f[j]:=(k<n) or (a[k,i]<>a[k,j]);
f[i]:=f[i] and f[j] { < == убрать эту строку, чтобы выводить первую копию }
end;
WriteLn('developed array:');
for i:=1 to n do begin
for j:=1 to m do if f[j] then Write(a[i,j]:2);
WriteLn
end;
ReadLn
end.

P.S.
Прогнал прогу Client'а и подумал, что кто-то из нас неверно трактует условие. Клиент, похоже, выводит хотя бы один из повторяющихся столбцов. А я вообще не вывожу столбец, если у него есть дубль. sum42, пожалуйста, уточни условие.

Кстати, мое решение легко модифицировать, чтоб оно выдавало хотя бы одну копию (выбросить дубли, оригиналы оставить). Достаточно убрать одну строку (я пометил в коде).

P.P.S.
При всем моем уважении, просьба к тебе:
- старайся более аккуратно форматировать коды для новичков - пусть привыкают (да и ты заодно));
- не надо подавать новичкам дурной пример постоянного сования юнита CRT где ни попадя только для того, чтоб сделать задержку (а если он уже есть в проге, лучше выкинуть на фиг cwm8.gif )


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


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

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

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


Цитата(Lapp @ 20.10.2010 4:26) *

- не надо подавать новичкам дурной пример постоянного сования юнита CRT где ни попадя только для того, чтоб сделать задержку (а если он уже есть в проге, лучше выкинуть на фиг cwm8.gif )

имхо, он засунут ради очистки экрана.


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

Сообщений в этой теме
Sum42   Двухмерный символьный массив. Вывод различающихся столбцов.   19.10.2010 0:45
Client   надо проверить элементы столбца с элементами всех …   19.10.2010 0:54
Client   uses crt; const str=10; stp=10; type M…   19.10.2010 1:55
Sum42   Client Большое спасибо за помощь, сейчас постараю…   19.10.2010 23:33
Lapp   Я тип множества еще не знаю, сейчас буду "узн…   20.10.2010 7:26
мисс_граффити   - не надо подавать новичкам дурной пример постоян…   20.10.2010 12:22
Lapp   имхо, он засунут ради очистки экрана.... что само …   20.10.2010 14:08
Client   а мне надо чуть меньше действий :) if flag then …   20.10.2010 12:58
Sum42   Lapp Большое спасибо за помощь, сейчас буду разбир…   20.10.2010 23:31
Sum42   Lapp Разбираю ваш код Вроде где-то не совсем прав…   21.10.2010 0:22
Lapp   в первой строчке fi] а не fj]?Да, конечно )). Изв…   21.10.2010 3:02
Client   for i:=1 to m do if f i ] thenпопробуй так   21.10.2010 1:55
Sum42   RE: Двухмерный символьный массив. Вывод различающихся столбцов.   21.10.2010 22:49
Lapp   ну я вроде ответил вышеА, понятно, извини. Потеря…   22.10.2010 3:55


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

 





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