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

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

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

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


Новичок
*

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

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


помогиет решить задачу!! срочно, не могу зачет здать!
вот она:
Составьте прогу, проверяющую, можно ли, меняя местами элементы одномерного массива А, получить одномерный массив В
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


сортируешь оба массива, а потом поэлементам сравниваешь соответственные :
a[1] & b[1]
a[2] & b[2]
...
a[n] & b[n].
если пара не равна, то flag:=false => конец цикла проверки.

зы это естественно для массивов А и Б размерности N (одинаковой)

Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Цитата(klem4 @ 22.05.05 13:36)
сортируешь оба массива, а потом поэлементам сравниваешь соответственные :
a[1] & b[1]
a[2] & b[2]
...
a[n] & b[n].
если  пара не равна, то flag:=false => конец цикла проверки.

зы это естественно для массивов А и Б размерности N (одинаковой)


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


Гость






Выбери любой из методов сортировки отсюда: FAQ: Методы сортировки
, отсортируй по возрастанию оба массива и сравнивай числа с одинаковыми индексами... Что неясно?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Сортируешь оба массива по возрастанию(убыванию) на твой вкус, естественно оба или так или так.

далее делаешь примерно так :

var

{необходимые переменные}
...
flag:boolean;

begin
...
flag:=false;
i:=1;
while(i<=n)and(not(flag)) do
begin
if not(a[i]=b[i]) then
flag:=true;
inc(i);
end;

if not(flag) then writeln('Yes')
else writeln('No');


Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

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

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


Цитата(volvo @ 22.05.05 13:43)
Выбери любой из методов сортировки отсюда: FAQ: Методы сортировки
, отсортируй по возрастанию оба массива и сравнивай числа с одинаковыми индексами... Что неясно?



понял как сортировать по возростанию( в тетрадке нашел!!)Но как их сравнивать не очень...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






flag := true;
for i := 1 to n do
flag := flag and (a[i] = b[i]);

if flag then writeln('Можно') else writeln('Нельзя');
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

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

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


Цитата(volvo @ 22.05.05 13:55)
flag := true;
for i := 1 to n do
  flag := flag and (a[i] = b[i]);

if flag then writeln('Можно') else writeln('Нельзя');



т.е я сортирую потом добавляю
ag := true;
for i := 1 to n do
flag := flag and (a[i] = b[i]);

if flag then writeln('Можно') else writeln('Нельзя');
и все
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Цитата(volvo @ 22.05.05 13:55)
flag := true;
for i := 1 to n do
  flag := flag and (a[i] = b[i]);

if flag then writeln('Можно') else writeln('Нельзя');



это короче, но и тут лучше while использовать, ведь вовсе не обязательно нужен полный просмотр массива, согласись ;)

Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

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

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


а что обозначают:
flag := true;
flag:=false;
а то потом препод спрашивать будет
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Цитата(klem4 @ 22.05.05 13:59)
это короче, но и тут лучше while использовать, ведь вовсе не обязательно нужен полный просмотр массива, согласись ;)

Нет, не соглашусь... Что, из For нельзя выйти как только Flag = False? Можно. Так почему While? У тебя же все-таки фиксированное количество проходов...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Цитата(volvo @ 22.05.05 14:23)
Нет, не соглашусь... Что, из For нельзя выйти как только Flag = False? Можно. Так почему While? У тебя же все-таки фиксированное количество проходов...


Да можно, например используя exit... но врядли препод это оценит, они этого не любят, покрайней мере в таких простых ситуациях, где он (exit) вовсе необязателен. ;)

а по поводу фиксировонного числа, если у нас в массиве пара тысяч элементов, а уже первая пара не сошлась, то все что будет происходить дальше бессмысленно, так что, электрик, либо exit сувай, либо цикл через while органиовывай :yes:


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






klem4
специально для тебя:
flag := true;
for i := 1 to n do begin
flag := flag and (a[i] = b[i]);
if not flag then break;
end;

if flag then writeln('Можно') else writeln('Нельзя');

и сколько сравнений тебе понадобится? И где ты видел Exit? Кстати, мне как-то все равно, что преподы любят, а что нет.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

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

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


Цитата(volvo @ 22.05.05 14:37)
klem4
специально для тебя:
flag := true;
for i := 1 to n do begin
  flag := flag and (a[i] = b[i]);
  if not flag then break;
end;

if flag then writeln('Можно') else writeln('Нельзя');

и сколько сравнений тебе понадобится? И где ты видел Exit? Кстати, мне как-то все равно, что преподы любят, а что нет.



и Как лучше закончить?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Новичок
*

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

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


короче посидел подумал и вот задача:
Program laba7;

uses
crt;

type
matr=array [1..7,1..7] of real;

var
ma:matr;
n,m:byte;
pol:integer;

Procedure Zastavka;

const
x=40;
y=10;
c=9;
var
i:byte;

Begin
clrscr;
gotoxy(x,y);
textcolor©;
write('Программа');
gotoxy(wherex-21,wherey+1);
write('‚Вычисление математических функций');
gotoxy(wherex-26,wherey+1);
textcolor(15);
write('Автор: Макаев А,Р,');
textcolor(15);
for i:=1 to 2 do
delay(65535);
clrscr;
end;


Procedure xread(var ma:matr; var n,m:byte);

var
i,j:byte;
Begin
Writeln('Vvedite kolichestvo strok');
readln(n);
Writeln('Vvedite kolichestvo stolbcov');
readln(m);
for i:=1 to n do
begin
Writeln('Vvedite ',i,' stroku');
for j:=1 to m do
read(ma[i,j]);
end;
end;

Function pol1(ma:matr;n,m:byte):integer;

Var
i,j:byte;
pol2:integer;

begin
pol2:=0;
for i:=1 to n do
for j:=1 to m do
if ma[i,j]>=0 then
pol2:=pol2+1;pol1:=pol2;
end;


BEGIN
zastavka;
Xread(ma,n,m);
pol:=pol1(ma,n,m);
writeln ('Количество положительных элементов ',pol);
readln;
readln;
end.


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


Гость






А ты в курсе, что она неверно оформлена? У тебя ее ни один преподаватель не примет smile.gif Вот из-за этого:
  pol:=pol1(ma,n,m);

а pol - глобальная переменная... smile.gif Нехорошо. Тогда зачем делать это функцией? Оформи, как процедуру.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Новичок
*

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

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


ИЗВИНИТЕ СКИНУЛ НЕ ТУ ЗАДАЧУ:( ТА ЗАДАЧАЧА ВЫДАЕТ СНАЧАЛА ЗАСТАВКУ ,А ПОТОМ СЩИТАЕТ В ВАШЕЙ МАТРИЦЕ ЧИСЛО ПОЛОЖИТЕЛЬНЫХ ЭЛЕМЕНТОВ, ПРИЧЕМ ВСЕ СДЕЛАННО ЧЕРЕЗ ПРОЦЕДУРЫ),А ЭТО ВОТ ТА САМААЯ ЗАДАЧА!!!


Исходный код
Program rgz2;
uses crt;
const
n = 10;
type
t = array[1..n] of integer;
v = array[1..n] of integer;

var
a : t;
b : v;
flag : boolean;

j:integer;
procedure massiv(n:integer; var a:t);
var j:integer;
begin

for j:=1 to n do begin
writeln( 'ўўҐ¤ЁвҐ',j,'-© н«Ґ¬Ґ­в 1-Ј® ¬ ббЁў ='); readln(a[j]);end;
writeln;
end;

procedure massiv1(n:integer; var b:v);
var j:integer;
begin

for j:=1 to n do begin
writeln( 'ўўҐ¤ЁвҐ',j,'-© н«Ґ¬Ґ­в 2-Ј® ¬ ббЁў ='); readln(b[j]);end;
writeln;
end;

Procedure bubble(n : integer; var a : t);
var
i, j, p : integer;
begin
for i := 2 to n do
for j := n downto i do
if a[j] < a[j-1] then
begin
p := a[j];
a[j] := a[j-1];
a[j-1] := p
end;
writeln('гЇ®а冷з­л© Ї®­ҐгЎлў ­Ёо 1 ¬ ббЁў');
for i := 1 to n do write(a[i], ' ');
writeln
end;
Procedure bubble1(n : integer; var b : v);
var
i, j, p : integer;
begin
for i := 2 to n do
for j := n downto i do
if b[j] < b[j-1] then
begin
p := b[j];
b[j] := b[j-1];
b[j-1] := p
end;
writeln('гЇ®а冷з­л© Ї®­ҐгЎлў ­Ёо 1 ¬ ббЁў');
for i := 1 to n do write(b[i], ' ');
writeln
end;

begin
massiv(n, a);
massiv1(n, B);
bubble(n, a);
bubble1(n, B);
begin
flag:=true;
for j:=1 to n do
flag:=flag and (a[j]=b[j]);
if flag then writeln('yes')else writeln('no'); end;
readln;
end.



KLEM4,А ТЫ ГОВОРИШЬ, ЧТО САМ НЕ РЕШАЮ....ПРОСТО Я ЭЛЕКТРИК В ПРЯМОМ СМЫСЛЕ УЧУСЬ НА ЭЛЕКТРОЭНЕРГЕТИЧЕСКОМ, И НЕ ШАРЮ В ВАШИХ ЯЗЫКАХ, ДА ЕЩЕ ПРЕПОД, НЕ ДАЙ БОГ ВАМ ТАКОГО.... ВОТ И ДОСТАЮ ВАС, ИЗВИНИТЕ КОНЕЧНО....

Вот только кричать не надо...

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


Гость






Ну и смысл? Зачем тебе 2 одинаковые процедуры ввода массива и 2 одинаковые процедуры сортировки? А если у тебя будет 4 массива? Copy+Paste? Для того она и процедура, чтобы выполнять повторяющуюся последовательность действий, а ты при первом же повторе определяешь вторую процедуру blink.gif Так делай совсем без процедур...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Новичок
*

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

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


Цитата(volvo @ 5.06.05 20:24)
А ты в курсе, что она неверно оформлена? У тебя ее ни один преподаватель не примет smile.gif Вот из-за этого:
  pol:=pol1(ma,n,m);

а pol - глобальная переменная... smile.gif Нехорошо. Тогда зачем делать это функцией? Оформи, как процедуру.


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


Гость






Ну, тогда и используй функцию по прямому назначению !
...
BEGIN
zastavka;
Xread(ma,n,m);
writeln ('Количество положительных элементов ', pol1(ma,n,m));
readln;
readln;
end.
 К началу страницы 
+ Ответить 

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

 





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