Помощь - Поиск - Пользователи - Календарь
Полная версия: Двумерные массивы.
Форум «Всё о Паскале» > 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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.