Имам нужда от помощ за една задача на Паскал

На братчеда на леля му на зетя й брат му се жени, не мога да избера с какъв цвят обувки да ходя на сватбата?? Помагайте!

Модератор: Общи модератори

старши ентусиаст
Аватар
Мнения: 2068
Регистриран на: 1.11.2004
Местоположение: София
Пол: Мъж

Имам нужда от помощ за една задача на Паскал

Мнение от SummonedToDIe » 08 Мар 2007, 15:47

Ето я и самата задача:
Да се състави програма за обработка на два масива А[N,N] и B[N,N], където данните са цели числа в интервала [-1000;1000]. Съответните подпрограми да извършват следните действия:
- отпечатване на условието на задачата;
- отпечатване на автора на програмата;
- въвеждане на входните данни;
- отпечатване на входните данни;
- а) да се нулират елементите в масива А, които са по-малки от минималния елемент на съответния ред от масива B, б)да се определи броя на променените елементии в масива А;
- отпечатване на получените резултати след обработката а) и след обработката б);
- Бонус - резултата да се запише в файл.
За позналия и написал верния отговор ще има бира :)

кандидат ентусиаст
Аватар
Мнения: 206
Регистриран на: 30.06.2004

Мнение от Griffin » 08 Мар 2007, 15:58

Пфу... преди много години бях писал нещо подобно. Ще поровя довечер да видя дали няма да го изровя.
1.8 литра е чудесен обем. Не мога да разбера, защо продължават да произвеждат 0.5 литрови халби?!

старши ентусиаст
Аватар
Мнения: 2068
Регистриран на: 1.11.2004
Местоположение: София
Пол: Мъж

Мнение от SummonedToDIe » 08 Мар 2007, 16:03

Ще бъда много благодарен :winky:

старши ентусиаст
Аватар
Мнения: 2068
Регистриран на: 1.11.2004
Местоположение: София
Пол: Мъж

Мнение от SummonedToDIe » 09 Мар 2007, 9:59

:arrow: :roll: :help:

УмНаТа КаКа с чЕрпАка :)
Аватар
Мнения: 1055
Регистриран на: 25.08.2006
Местоположение: Stara Zagora
Пол: Жена
Кара: '96 BMW318 cabrio

Мнение от Eliana » 09 Мар 2007, 11:43

Решение :arrow:
type Arr = Array [1..100, 1..100] of Real;

var A : Arr;
N : integer;
vhoden_fail : string;

procedure uslovie;
begin
writeln('Da se systavi programa, za obrabotka na masiva A[N, N] kydeto');
writeln('dannite sa realni chisla v intervala [-1000, 1000]. Suotvetnite');
writeln('podprogrami da izvyrshvat slednite deistviq:');
writeln(' - otpechatvane na uslovieto na zadachata');
writeln(' - otpechatvane na avtora na zadachata');
writeln(' - vyvejdane na vhodnite danni');
writeln(' - otpechatvane na vhodnnite danni');
writeln(' - koTlonite na masiva da se sortirat po sledniq nachin; kotlonite');
writeln(' s cheten indeks - po vyzhodqsht red; kotlonite s necheten indeks');
writeln(' - po nizhodqsht');
writeln(' - optechatvane na poluchenite danni');
writeln(' * Bonus - vhodnite danni da se prochetat ot fail sys zadadenoto ime');
end;

procedure avtor;
begin
writeln('Avtor: Hristo boteff i baba Yanka');
end;

procedure pitanka;
var s : string;
begin
writeln;
write('Jelaete li da prochetete vhodnite danni ot fail [Da/ne]');
readln(s);
if (s = 'da') or (s = 'Da') then
begin
write('Kak da se kazva faila: ');
readln(vhoden_fail);
end
else
vhoden_fail := '';
end;

procedure vhod;
var t : text;
i, j : integer;
begin
assign(t, vhoden_fail);
reset(t);
if vhoden_fail='' then write('N=');
readln(t, n);
for i := 1 to N do
for j := 1 to N do
begin
if vhoden_fail = '' then
write('chislo na ',i,'-ti red, ',j,'-ta kolona: ');
read(t, A[j, i]);
end;
close(t);
end;

procedure izhod;
var i, j : integer;
begin
writeln('A=');
for j := 1 to N do
begin
for i := 1 to N do
write(a[i,j]:7:2,' ');
writeln;
end;
end;

procedure bubsort(col, order : integer);
var i, j : integer;
t : real;
begin
for i := 1 to N do
for j := 1 to N-i do
begin
if (A[col, j+1] - A[col, j]) * order > 0 then
begin
t := A[col, j];
A[col, j] := A[col, j+1];
A[col, j+1] := t;
end;
end;
end;

procedure sortirovka;
var i : integer;
begin
for i := 1 to N do
if odd(i) then
bubsort(i, +1)
else
bubsort(i, -1);
end;

BEGIN
uslovie;
avtor;
pitanka;
vhod;
izhod;
sortirovka;
izhod;
END.


Има два тънки момента: сортирането (разгадай си го) и четенето от файл. Ако случайно учителя/учителката не знае, го осведоми, че при отваряне на файл, ако се зададе като име на файла празният низ (''), то се използва клавиатурата като входно устройство (по-не-леймърски казано, ползва се стандартният вход).

Въпроса за N е МНОГО важен, тъй като определя структурите, които ще се ползват и алгоритъма за сортиране и т.н.. в момента се ползва статична матрица 100х100 и се използва метода на мехурчето за сортиране.

И по кода има няколко неща за дооправяне :arrow: трябва да си го оправиш.
Изображение

старши ентусиаст
Аватар
Мнения: 2068
Регистриран на: 1.11.2004
Местоположение: София
Пол: Мъж

Мнение от SummonedToDIe » 09 Мар 2007, 12:16

Ще разгледам програмата и ще я едитна малко ако трябва ;)
Безкрайно благодарен съм, имаш почерпка от мен :winky:
П.С. Ако някой има някакви критики по дадения сорс, може да ги сподели, ще бъда благодарен ;)

старши ентусиаст
Аватар
Мнения: 2068
Регистриран на: 1.11.2004
Местоположение: София
Пол: Мъж

Мнение от SummonedToDIe » 09 Мар 2007, 12:21

Забелязах, че в големия бегин-енд, я няма процедурата бъбсорт... :help: Да не би да си я забравила :help:

УмНаТа КаКа с чЕрпАка :)
Аватар
Мнения: 1055
Регистриран на: 25.08.2006
Местоположение: Stara Zagora
Пол: Жена
Кара: '96 BMW318 cabrio

Мнение от Eliana » 09 Мар 2007, 12:29

procedure bubsort(col, order : integer);
var i, j : integer;
t : real;
begin
for i := 1 to N do
for j := 1 to N-i do
begin
if (A[col, j+1] - A[col, j]) * order > 0 then
begin
t := A[col, j];
A[col, j] := A[col, j+1];
A[col, j+1] := t;
end;
end;
end;
За това ли става на въпрос :roll:
Изображение

УмНаТа КаКа с чЕрпАка :)
Аватар
Мнения: 1055
Регистриран на: 25.08.2006
Местоположение: Stara Zagora
Пол: Жена
Кара: '96 BMW318 cabrio

Мнение от Eliana » 09 Мар 2007, 12:37

Tosh виждам, че си тук. Кажи си компетентното мнение, защото нещо работите започнаха да се объркват :mhihi:
Изображение

старши ентусиаст
Аватар
Мнения: 1599
Регистриран на: 29.10.2005
Местоположение: фар-ийст ъв София
Пол: Мъж
Кара: KiA, Volvo, Ford
Мечтае да кара: Болид от F1
Детайли за колата: Picanto 2008, V70 2001, Puma 2021

Мнение от logout » 09 Мар 2007, 12:38

Аз ли нещо не разбирам... тука има някакви сортировки, пък условието на задачата е да се нулират елементите в масива А, които са по-малки от съответния елемент на масива B. Според мен процедурата, която върши тая работа, трябва да е така:

Код: Избери целия код
procedure zeroing;
var row, col, min_value, change : integer;

begin
change := 0;

for row := 1 to N do
begin
  min_value = min(row);   - където min е процедура за намиране на най-малкото число на дадения ред

  for col := 1 to N do
    begin
      if (A[col, row] < min_value then
        begin
           A[col, row] := 0;
           change := change + 1; - имаше функция за инкрементиране
        end;
    end;
end;

end;


Забравил съм го тоя Паскал. И въобще Паскал :puke:

А, забравих, променливата change смята колко са промените и трябва да е глобална, а не локална. Сори...
It's not who You are, it's who You know...

старши ентусиаст
Аватар
Мнения: 2184
Регистриран на: 7.08.2006
Местоположение: София / ghetto+
Пол: Мъж
Кара: m52 e36
Мечтае да кара: е38 ;)
Детайли за колата: е36

Мнение от t0sh » 09 Мар 2007, 12:46

яко, от години не бях виждал паскал :mhihi:

а това липсва:
а) да се нулират елементите в масива А...

но след сортирането не е трудно едно 'елиминиране' ;)

яко, и то жена да пуска решение :) евалата Елиана :mhihi:


а това какво е в изхода?!? нарочно за оправяне или.. :)

write(a[i,j]:7:2,' ');


едит: еррор, ами може и без да си ги сортирал...

едит2: за кво пипаш по масива, нулирането е:

1. минаваш по масив А, и помниш в Х примерно винаги най-малкото число. ако намериш по-малко, Х=A[i,j]

2 след това минаваш по Б, и всичко дето е по-малко от Х го правиш =0
едит3: и един брояч колко пъти е било това и си готов :)
Последна промяна t0sh на 09 Мар 2007, 12:50, променена общо 1 път

УмНаТа КаКа с чЕрпАка :)
Аватар
Мнения: 1055
Регистриран на: 25.08.2006
Местоположение: Stara Zagora
Пол: Жена
Кара: '96 BMW318 cabrio

Мнение от Eliana » 09 Мар 2007, 12:50

Съжалявам момчета, нещо много жестоко объркване е станало от моя страна. Все пак съм юрист, а не програмист Изображение

Ако някой друг може да помогне, неко го направи :D
Изображение

старши ентусиаст
Аватар
Мнения: 1599
Регистриран на: 29.10.2005
Местоположение: фар-ийст ъв София
Пол: Мъж
Кара: KiA, Volvo, Ford
Мечтае да кара: Болид от F1
Детайли за колата: Picanto 2008, V70 2001, Puma 2021

Мнение от logout » 09 Мар 2007, 12:53

Абе хора, аз пак да питам, не се ли объркахте нещо? Условието на задачата никак не ми се връзва с това, което давате като решение. Ма де да знам, аз съм прост програмист, не съм учил висше :mhihi:
It's not who You are, it's who You know...

УмНаТа КаКа с чЕрпАка :)
Аватар
Мнения: 1055
Регистриран на: 25.08.2006
Местоположение: Stara Zagora
Пол: Жена
Кара: '96 BMW318 cabrio

Мнение от Eliana » 09 Мар 2007, 12:55

logout написа:Абе хора, аз пак да питам, не се ли объркахте нещо? Условието на задачата никак не ми се връзва с това, което давате като решение. Ма де да знам, аз съм прост програмист, не съм учил висше :mhihi:


Ти не можеш ли да помогнеш? След като си програмист значи имаш представа как е решението :)
Изображение

старши ентусиаст
Аватар
Мнения: 2184
Регистриран на: 7.08.2006
Местоположение: София / ghetto+
Пол: Мъж
Кара: m52 e36
Мечтае да кара: е38 ;)
Детайли за колата: е36

Мнение от t0sh » 09 Мар 2007, 12:58

ох що ме карате да пиша на ПАСКАЛ, то се пише на всичко ама чак пък..

преправено на еррор:



Код: Избери целия код
procedure zeroing;
var row, col, min_value, change : integer;

begin
change := 0;

for row := 1 to N do
min_value := 1000;
// до 1000 са, нека си имаш стартов макс

for col :=1 to N do

begin
if (B[col,row]) < min_value then

begin
min_value := B[col,row]
end
end
/// дотук си намерил за ТОЗИ ред най-малкото. аре са рязане от А

  for col := 1 to N do
    begin
      if (A[col, row] < min_value then
        begin
           A[col, row] := 0;
           change := change + 1; - имаше функция за инкрементиране
        end;
    end;
// дотук си минал по едната колона на Б за аминимално, и после по А за елиминиарне. сега ще 'щракне' брояча за следваща колона
end;
// тук ще са свършили колоните и ще щракне за следващ row
end;
// край на функцийката


не гарантиарм че ще компилира без грешка, писано on-the-fly :)

Следваща

Назад към Извън Темата

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани

Последни теми
Facebook