Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2007, 17:42   #1
klikniss(тормоз)
Новичок
Джуниор
 
Регистрация: 10.01.2007
Сообщений: 1
Восклицание помогите, please...

помогите пожалуйста с оптимизацией и упрощением! заранее огромное, огромное спасибо!

задание:
ввести двухмерный массив с клавиатуры. вывести его на эран, записать в файл. отсортировать массив по возрастанию, вывести на экран, дописать в файл. поменять местами первый элемент каждой строчки с последним, второй с предпоследним и т.д. вывести на экран, дописать в файл. по заданным двум числам все числа равные первому заменить на второе. вывести результат на экран и дописать в файл.

а вот и прога.

program exo;
uses crt;
type mas=array[1..50,1..50] of real;
var a:mas;
f:text;
m,n,i,j,k:byte;
x,y:real;
t:boolean;
procedure vivodek(var a:mas);
begin
for i:=1 to m do begin
for j:=1 to n do begin
write(a[i,j]:5:1,' ');
end;
writeln;
end;
end;
procedure vivodfail(var a:mas);
begin
for i:=1 to m do begin
for j:=1 to n do begin
write(f,a[i,j]:5:1);
end;
writeln(f,' ');
end;
end;
procedure zamena(var v,b:real);
var d:real;
begin
d:=v;
v:=b;
b:=d;
end;
begin
clrscr;
assign(f,'d:\progi\exo!\y.txt');
write('ўўҐ¤ЁвҐ Є®«ЁзҐбвў® бва®Є');
readln(m);
write('ўўҐ¤ЁвҐ Є®«ЁзҐбвў® бв®«Ўж®ў');
readln(n);
for i:=1 to m do
begin
for j:=1 to n do
begin
writeln('a[',i,',',j,']=');
readln(a[i,j]);
end;
end;
writeln;
vivodek(a);
rewrite(f);
writeln(f,'massiv');
vivodfail(a);
close(f);
repeat
t:=true;
for j:=1 to n do
begin
for i:=1 to m-1 do
begin
if a[i+1,j]<a[i,j] then
begin
zamena(a[i+1,j],a[i,j]);
t:=false;
end;
end;
end;
until t;
writeln;
vivodek(A);

append(f);
writeln(f,'masiv posle obrabotki');
vivodfail(a);
close(f);
readln;
for i:=1 to m do
begin
k:=0;
for j:=1 to n div 2 do
begin
zamena(a[i,j],a[i,n-k]);
k:=k+1;
end;
end;
vivodek(a);
append(f);
writeln(f,'mas posle zameni');
vivodfail(a);
close(F);
readln;
writeln('vvedite nygnoe chislo');
readln(x);
writeln(' napishite chislo massiva, kotoroe nado zamenit na eto chislo');
readln(y);
for i:=1 to m do
for j:=1 to n do
if a[i,j]=y then a[i,j]:=x;
writeln('massiv posle zameni');
vivodek(a);
append(f);
writeln(f,'massiv posle zameni');
vivodfail(a);
close(f);
readln;
end.
klikniss(тормоз) вне форума Ответить с цитированием
Старый 11.01.2007, 18:33   #2
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

for j:=1 to n do
begin
for i:=1 to m-1 do
begin
if a[i+1,j]<a[i,j] then
begin
zamena(a[i+1,j],a[i,j]);
t:=false;
end;
end;
end;
->
Код:
for j:=1 to n do
for i:=1 to m-1 do
for k:=i+1 to m do
begin
 if a[k,j]<a[i,j] then
 begin
   zamena(a[k,j],a[i,j]);
  // t:=false;
 end;
end;
Repeat в этом случае не нужен
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 12.01.2007, 00:29   #3
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

klikniss(тормоз), как новичку предупреждение за кросс постинг, если повторится будет бан.
Alar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск