Помощь - Поиск - Пользователи - Календарь
Полная версия: Двумерные массивы.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Carola
Исправьте пожалуйста ошибки в прогах,если они есть.
У меня не работает паскаль и я буду очень признательна,если кто-нибудь закинет мне в него проги и даст ссылочки.ПЛЗ!

1. Дан 2-х мерный массив, поменять местами указанные столбцы.
2. Дан 2-х мерный квадратный массив. требуется вывести на экран строку чисел, но не по порядку, а по змейке. см. пример: массив
1 2 3
4 5 6
7 8 9
результат вывода на экран
1 2 3 6 9 8 7 4 5

Препод написал,что они у него не запускаются.

Первая.
 const
n = 3;
a: array[1 .. n, 1 .. n] of integer =
((1, 2, 3),
(4, 5, 6),
(7, 8, 9));

var
i, j: integer;
first, second: integer;
T: integer;

begin
{ Stolbez s nomerom First pomeniat' mestami so stolbzom s nomerom Second }
first := 1; second := 2;

writeln('Do:');
for i := 1 to n do begin
for j := 1 to n do
write(a[i, j]:4);
writeln;
end;

for i := 1 to n do begin
T := a[i, first];
a[i, first] := a[i, second];
a[i, second] := T;
end;

writeln('Posle:');

for i := 1 to n do begin
for j := 1 to n do
write(a[i, j]:4);
writeln;
end;

end.



Вторая.

 const
n = 3;
a: array[1 .. n, 1 .. n] of integer =
((1, 2, 3),
(4, 5, 6),
(7, 8, 9));

var
steps: array[1 .. 2*n - 1] of byte;

var
i, j, ii, jj: integer;

begin
j := 0;
for i := 2*n-1 downto 1 do begin
if odd(i) then inc(j);
steps[i] := j
end;

j := 0;
ii := 1; jj := 0;
repeat

if j < 2*n-1 then begin
inc(j);
for i := 1 to steps[j] do begin
inc(jj); write(a[ii, jj]:5);
end;
end;

if j < 2*n-1 then begin
inc(j);
for i := 1 to steps[j] do begin
inc(ii); write(a[ii, jj]:5);
end;
end;

if j < 2*n-1 then begin
inc(j);
for i := 1 to steps[j] do begin
dec(jj); write(a[ii, jj]:5);
end;
end;

if j < 2*n-1 then begin
inc(j);
for i := 1 to steps[j] do begin
dec(ii); write(a[ii, jj]:5);
end;
end;

until j = (2*n - 1);
writeln;

end.

volvo
Carola, так как эти решения писал я здесь:
Двумерный массив. Две задачи, то могу тебя уверить, что если бы они не запускались, я бы их не выложил... Вот лог работы первой программы:
Цитата
Turbo Pascal Version 7.0 Copyright © 1983,92 Borland International
До:
1 2 3
4 5 6
7 8 9
После:
2 1 3
5 4 6
8 7 9


А вот - для второй:
Цитата
Turbo Pascal Version 7.0 Copyright © 1983,92 Borland International
1 2 3 6 9 8 7 4 5


Я не знаю, что нужно преподавателю, но они обе прекрасно работают...
Carola
Я в тебе не сомневалась даже.....Наверное это всё паскаль...Что-то с ним не то..с ошибкой у меня=(
Ты не мог бы закинуть мне в Паскаль...Очень прошу.

А вот ещё одна задача.
Препод по ней написал вот что - *меня не устраивает алгоритм с применением EXIT. это
противоречит канонам программирования.* mega_chok.gif

Ввести размерность матрицы(двумерной) и значения ее элементов., Построить вектор В, где В(i) -

задание 1. количество простых чисел в i+1 -ой строке.
(записать числа в вектор и выдать на экран)

 
Const
maxcount=100;
type
vec = array[1..maxcount] of Integer;
matrix = array[1..20,1..20] of integer;

function isPrime(X: integer): boolean;
var
i: integer;
Begin
isPrime:=false;
for i:=2 to trunc(sqrt(x)) do if x mod i = 0 then Exit;
isPrime:=true
End;
(* Postrochniy vvod matrizi *)
Procedure ReadMatr(var A:Matrix; var n,m:integer );
var
i,j:word;
begin
repeat
write('‚Vvedite kolichestvo slov: '); readln(N)
until (N>0) and (N<=sqrt(maxcount));
repeat
write('‚Vvedite kolichestvo stolbzov: '); readln(m)
until (M>0) and (M<=sqrt(maxcount));
For i:=1 to n do begin
For j:=1 to m do begin
write('A[',i,j,']= ');
readln(A[i,j])
end
end
end;





procedure vecprint (a:vec; n:integer);
var i:integer;
begin
writeln('prime int:');
for i:=1 to n do write(a[i],' | ')
end;

procedure getprime(a:matrix; n,m:integer; var b:vec; var nn:integer);
var i,j,s:integer;
begin
nn:=0;
for i:=1 to n -1 do begin
s:=0;
for j:=1 to m do if isprime(a[i+1,j]) then inc(s);
inc(nn);
b[nn]:=s
end
end;

var
a:matrix;
b:vec;
m,n,nn:integer;
begin
Readmatr(a,n,m);
getprime(a,n,m,b,nn);
vecprint(b,nn);
readln;
end.




П.с. Обнаружила что у нас Дни Рождения рядом=)У меня 3-го мая. give_rose.gif
volvo
Цитата
Ты не мог бы закинуть мне в Паскаль...Очень прошу.
Ты о чем? Что значит "закинуть в Паскаль"?

А насчет
Цитата
это противоречит канонам программирования.
Ссылочку на "каноны программирования", запрещающие использование Exit, можно получить? Что за бред?

Ну, хорошо, поменяй IsPrime на это:

function isPrime(X: integer): boolean;
var
i: integer;
found: boolean;
Begin
i := 2; found := false;
while (i <= trunc(sqrt(x))) and (not found) do
if x mod i = 0 then found := true else inc(i);
isPrime := not found
End;
И, заодно, спроси у своего преподавателя, что он думает об использовании лишних переменных в программе, хорошо?
Carola
Закинуть в паскаль - я имею в виду набить эту программе в паскале......и прислать мне...просто у меня паскаль не работает=(а мы отправляем программы в паскале...вот.....

Так прога правильная?Я сама не поняла вообще к чему он это.Заколебал придираться..Ему лишь бы слово вставить,а по уму о нас мало отличается..Чесслово..Ты в плане программирования горазно лучше.

Ага.....
Так сможешь мне набить в паскале...плз. unsure.gif
volvo
Carola, просто скопируй программу в Notepad, и сохрани с расширением PAS... У меня с кириллицей проблемы...
Carola
Цитата(volvo @ 24.12.2005 22:50) *

Carola, просто скопируй программу в Notepad, и сохрани с расширением PAS... У меня с кириллицей проблемы...


Сейчас попробуююю mega_chok.gif
А если нет,то тект изменю на латинские буквы..Ага.

Notepad в смысле Блокнот?
Carola
Не получается=(((((((

Я сделала всё латинскими буквами,так сможешь?????????????????
volvo
Ну, вот эти 3 PAS-файла...
Carola
Спасибо тебе громаднейшее!!!!!!!!!!
Ты ангел! give_rose.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.