Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: ТурбоПаскаль помощь нужна
цитата
24/12/08 в 07:57
 Lamagro
Знакомая попросила, турбопаскаль не помню, последний раз в институте.
Если кто нить волокет, может поможете?

Цитата:
переставить столбцы таблицы так,чтобы в заданной строке сначала стояли отрицательные,потом нули,потом положительные
числа.порядок их следования сохранить.

и то что у меня получилось-прикреплено к письму.
только там ошибка-положительные числа зануляються...это я и не могу найти и исправить.

Код:
uses crt;
const maxstr=50;maxstolb=50;
type TInt=integer;
TChar=char;
TBool=boolean;
TMas=array[1..maxstr,1..maxstolb] of TInt;
TFiler=file of TInt;

procedure IOError(io:integer;var err:TBool);
begin
if io<>0 then begin
writeln('Nekorrektnoe znachenie.');
Err:=true;
readkey;
end
else Err:=false;
end;

procedure obrabot(n1,m1:TInt;var a1:TMas;var log1:TBool);
var z,i1,j1,k1:TInt;
begin
if (n1<1) or (m1<1) or (n1>maxstr) or (m1>maxstolb) then log1:=false
else begin
log1:=true;
for i1:=1 to m1 do begin
for j1:=1 to n1 do begin
for k1:=1 to n1-1 do begin
z:=0;
if (a1[i1,k1]>0) and ((a1[i1,k1+1]=0) or (a1[i1,k1+1]<0)) then
begin
z:=a1[i1,k1];
a1[i1,k1]:=a1[i1,k1+1];
a1[i1,k1+1]:=z;
end;
if (a1[i1,k1]=0) and (a1[i1,k1+1]<0) then
begin
z:=a1[i1,k1];
a1[i1,k1]:=a1[i1,k1+1];
a1[i1,k1+1]:=z;
end;
end;
end;
end;
end;
end;

var n,m,j,i:TInt;
l,v:TChar;
log,lo,error,logo:TBool;
a:TMas;
f:TFiler;
begin
clrscr;
log:=true;
repeat
repeat
clrscr;
writeln('vvedite kol-vo strok massiva 0<n<=',maxstr:4,'.');
{$I-}
readln(n);
{$I+}
IOError(IOResult,Error);
until error = false;

repeat
clrscr;
writeln('vvedite kol-vo stolbcov massiva0<m<=',maxstolb:4,'.');
{$I-}
readln(m);
{$I+}
IOError(IOResult,Error);
until error = false;

if (n<1) or (m<1) or (n>maxstr) or (m>maxstolb) then log:=false
else log:=true;
until log;
log:=false;
repeat
clrscr;
writeln('Nazchmite odnu iz sleduyuschih klavish,chtoby vypolnit sleduyuschie deystviya.');
writeln;
writeln('<<t>>,chtoby zapolnit massiv');
writeln('<<o>>,chtoby obrabotat massiv');
writeln('<<s>>,chtoby posmotret tekuschee sostoyanie massiva');
writeln('<<r>>,chtoby vyvesti rezultat obrabotki');
writeln('<<e>>,chtoby vyity iz programmy');
readln(l);
clrscr;
randomize;
case l of
't': begin
writeln('kak vy hotite zapolnit massiv:vruchnuyu(1),ili predostavit delo sluchayu(2),');
readln(v);
if v='2' then begin
log:=true;
for i:=1 to n do begin
writeln;
for j:=1 to m do begin
a[i,j]:=random(100)-50;
end;
end;
end
else if v='1' then begin
log:=true;
writeln('vvodite elementy massiva');
for i:=1 to n do begin
writeln;
for j:=1 to m do begin
repeat
{$I-}
read(a[i,j]);
{$I+}
IOError(IOResult,Error);
until Error=false;
end;
end;
end
end;

'o': begin
obrabot(n,m,a,lo);
if lo then
writeln('massiv obrabotan')
else
writeln('Tablica pusta.');
readln;
end;
's': begin
if log=true then begin
for i:=1 to n do begin
writeln;
for j:=1 to m do write(a[i,j]:4);
end;
readln;
end
else begin
writeln('vy ne zapolnili massiv!');
writeln('nazchmite <<t>>!');
readln;
end;
end;

'r': begin
if lo=true then begin
writeln('otsortirovannyi massiv:');
for i:=1 to n do begin
writeln;
for j:=1 to m do write(a[i,j]:4);
end;
readln;
end
else
write('Tablica pusta.');
readkey;
end;

end;
until l='e';
end.
цитата
24/12/08 в 20:23
 _s_[sov]
сильно мне задача напомнила наш экзамен на 1 курсе... задачу нада было решать на листочке без компа, вот тут секаса было много. по сабжу, ТС стукнись, был ряд похожих задач из универа(поищу если что)..
цитата
25/12/08 в 01:08
 borgivan
Сейчас очень занят, не смогу выдать готовую прогу (может завтра утром асилю), дам пару советов. ИМХО, сейчас написал ты много ненужного. Тут же важен сам алгоритм, почему бы не создать массив при обьявлении переменных? Хотя помоему в паскале так нельзя делать... память, епт. Во вторых тебе надо две функции, первая переставляет столбцы M и N у массива, в качестве параметров передается массив, номера переставляемых строк, число столбцов и число строк. И ещё одна функция , которая упорядочевает строку по возрастанию, в качестве параметров передается массив, номер строки, число столбцов и число строк. Что с ними делать догадался ? icon_smile.gif Если нет, то упорядочиваешь по возрастанию нужную строку к примеру методом пузырьков. Но меняешь местами не только элементы строки, но и столбцы , соответствующие этим элементам. Всё, пока ничем большим не смогу помочь ! icon_smile.gif
цитата
25/12/08 в 14:21
 Lamagro
спасибо ребята!
2_s_[sov] счас стукну icon_smile.gif

2borgivan
спасибо коллега! если бы ты осилил было бы очень заебись, так как я вообще ни в зуб ногой в паскале, последний раз его трогал в 1994...
цитата
26/12/08 в 12:03
 Lamagro
Ну, что я могу сказать мучали мы её с s_sovом вчера, точнее я он мучил, а я рядом маячил icon_smile.gif
получилось вот что:
Код:
program pascal;
uses crt;
var c,i,j,tmp:integer;
var arr:array[1..4,1..4] of integer;
begin
clrscr;
for i:=1 to 4 do
    for j:=1 to 4 do
      arr[i,j]:=random(10)-5;
for i:=4-1 downto 1 do {n - размер массива arr[]}
    for j:=1 to i do
        if arr[i,j]>arr[i,j+1] then begin
            tmp:= arr[i,j];
            arr[i,j]:= arr[i,j+1];
            arr[i,j+1]:= tmp;
        end;
write('вывод значений arr[]: ');
for i:=1 to 4 do
begin
for j:=1 to 4 do
    write(arr[i,j],' ');
    writeln;
   end;
readln(arr[i,j]);

end.

как-то работает, но как-то нетак smail10.gif
цитата
26/12/08 в 13:36
 borgivan
Код:
program SortMatrixByRow;

uses
  Crt;

const
  N = 10; {Column number}
  M = 20; {Row number}

type
  Matrix = array[0..M, 0..N] of Integer;

function MatrixInit(var varMatrix: Matrix): Integer;

var
  i, j: Integer;

begin
  Randomize;
  for i := 0 to N-1 do
    for j := 0 to M-1 do begin
      varMatrix[i,j] := 50 - Random(100);
      if random(5) = 2 then varMatrix[i,j] := 0;
    end;
end;

function MatrixShow(var varMatrix: Matrix; x: Integer): Integer;

var
  i, j: Integer;

begin
  for i := 0 to N-1 do begin
    if ((x = i+1) or (x = i)) and (i > 0) and (i < N-1) then WriteLn;
    for j := 0 to M-1 do begin
      Write(varMatrix[i,j]:3, ' ');
    end;
    WriteLn;
  end;
  WriteLn;
end;


function MatrixChangeColumns(var varMatrix: Matrix; x, y: Integer): Integer;

var
  i, j, Temp: Integer;

begin
  for i := 0 to N-1 do begin
    Temp := varMatrix[i, x-1];
    varMatrix[i, x-1] := varMatrix[i, y-1];
    varMatrix[i, y-1] := Temp;
  end;
end;

function MatrixSortByRow(var varMatrix: Matrix; x: Integer): Integer;
begin
{Вот здесь делай сортировку}
end;


var
  initMatrix: Matrix;
  x, y: Integer;

begin

  ClrScr;
  MatrixInit(initMatrix);
  WriteLn('The initial array:');
  matrixShow(initMatrix, 0);
  Write('Insert tne number of row to sort by (from 1 to ', N, '): ');
  ReadLn(x);
  if (x > M) or (x <= 0) then WriteLn('Error in row indexes!')
  else begin
    MatrixSortByRow(initMatrix, x);
    MatrixShow(initMatrix, x);
  end;

end.

Там сортировка не доделална... а остальное вроде пашет icon_smile.gif
цитата
26/12/08 в 14:20
 Lamagro
ошибку кажет icon_sad.gif
Код:
begin

  ClrScr;
  MatrixInit(initMatrix); <- Error 122 Invalid variable reference
  WriteLn('The initial array:');
  matrixShow(initMatrix, 0);
  Write('Insert tne number of row to sort by (from 1 to ', N, '): ');
  ReadLn(x);
  if (x > M) or (x <= 0) then WriteLn('Error in row indexes!')
  else begin
    MatrixSortByRow(initMatrix, x);
    MatrixShow(initMatrix, x);
  end;

end.
цитата
26/12/08 в 19:13
 borgivan
Lamagro писал:
ошибку кажет icon_sad.gif

Ей богу, гдето что то проебал, либо нетакой паскаль стоит ! icon_sad.gif
цитата
27/12/08 в 08:53
 Lamagro
borgivan писал:
Ей богу, гдето что то проебал, либо нетакой паскаль стоит ! icon_sad.gif
ок smail101.gif
цитата
29/12/08 в 06:11
 Lamagro
2borgivan
Девушка сдала прогу, передает тебе спасибо и поцелуйчег! icon_smile.gif
цитата
30/12/08 в 00:23
 borgivan

Фото в студию (хотя бы в асю)! icon_smile.gif
А если серьезно, передай ей успехов в учебе! Ещё че надо будет по мелочи - в асю стукни (php тоже по мелочи балуюсь) icon_smile.gif
цитата
30/12/08 в 08:54
 Lamagro
Фотку позже icon_smile.gif
Успехов передам, по паскалю стукну, а php я сам умею нормально icon_smile.gif
С наступающим!
цитата
31/12/08 в 21:45
 borgivan
И тебя с наступающим! smail04.gif
цитата
01/01/09 в 22:18
 Lamagro
smail04.gif


Эта страница в полной версии