Имам нужда от помощ за една задача на Паскал
Модератор: Общи модератори
28 мнения
• Страница 1 от 2 • 1, 2
- SummonedToDIe
- старши ентусиаст
-
- Мнения: 2068
- Регистриран на: 1.11.2004
- Местоположение: София
- Пол: Мъж
Имам нужда от помощ за една задача на Паскал
Ето я и самата задача:
Да се състави програма за обработка на два масива А[N,N] и B[N,N], където данните са цели числа в интервала [-1000;1000]. Съответните подпрограми да извършват следните действия:
- отпечатване на условието на задачата;
- отпечатване на автора на програмата;
- въвеждане на входните данни;
- отпечатване на входните данни;
- а) да се нулират елементите в масива А, които са по-малки от минималния елемент на съответния ред от масива B, б)да се определи броя на променените елементии в масива А;
- отпечатване на получените резултати след обработката а) и след обработката б);
- Бонус - резултата да се запише в файл.
За позналия и написал верния отговор ще има бира
Да се състави програма за обработка на два масива А[N,N] и B[N,N], където данните са цели числа в интервала [-1000;1000]. Съответните подпрограми да извършват следните действия:
- отпечатване на условието на задачата;
- отпечатване на автора на програмата;
- въвеждане на входните данни;
- отпечатване на входните данни;
- а) да се нулират елементите в масива А, които са по-малки от минималния елемент на съответния ред от масива B, б)да се определи броя на променените елементии в масива А;
- отпечатване на получените резултати след обработката а) и след обработката б);
- Бонус - резултата да се запише в файл.
За позналия и написал верния отговор ще има бира

- Eliana
- УмНаТа КаКа с чЕрпАка :)
-
- Мнения: 1055
- Регистриран на: 25.08.2006
- Местоположение: Stara Zagora
- Пол: Жена
- Кара: '96 BMW318 cabrio
Решение
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 и се използва метода на мехурчето за сортиране.
И по кода има няколко неща за дооправяне
трябва да си го оправиш.

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 и се използва метода на мехурчето за сортиране.
И по кода има няколко неща за дооправяне

- SummonedToDIe
- старши ентусиаст
-
- Мнения: 2068
- Регистриран на: 1.11.2004
- Местоположение: София
- Пол: Мъж
Ще разгледам програмата и ще я едитна малко ако трябва
Безкрайно благодарен съм, имаш почерпка от мен
П.С. Ако някой има някакви критики по дадения сорс, може да ги сподели, ще бъда благодарен

Безкрайно благодарен съм, имаш почерпка от мен

П.С. Ако някой има някакви критики по дадения сорс, може да ги сподели, ще бъда благодарен

- Eliana
- УмНаТа КаКа с чЕрпАка :)
-
- Мнения: 1055
- Регистриран на: 25.08.2006
- Местоположение: Stara Zagora
- Пол: Жена
- Кара: '96 BMW318 cabrio
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;
За това ли става на въпрос
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;
За това ли става на въпрос

- Eliana
- УмНаТа КаКа с чЕрпАка :)
-
- Мнения: 1055
- Регистриран на: 25.08.2006
- Местоположение: Stara Zagora
- Пол: Жена
- Кара: '96 BMW318 cabrio
- logout
- старши ентусиаст
-
- Мнения: 1599
- Регистриран на: 29.10.2005
- Местоположение: фар-ийст ъв София
- Пол: Мъж
- Кара: KiA, Volvo, Ford
- Мечтае да кара: Болид от F1
- Детайли за колата: Picanto 2008, V70 2001, Puma 2021
Аз ли нещо не разбирам... тука има някакви сортировки, пък условието на задачата е да се нулират елементите в масива А, които са по-малки от съответния елемент на масива B. Според мен процедурата, която върши тая работа, трябва да е така:
Забравил съм го тоя Паскал. И въобще Паскал
А, забравих, променливата change смята колко са промените и трябва да е глобална, а не локална. Сори...
- Код: Избери целия код
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;
Забравил съм го тоя Паскал. И въобще Паскал

А, забравих, променливата change смята колко са промените и трябва да е глобална, а не локална. Сори...
It's not who You are, it's who You know...
- t0sh
- старши ентусиаст
-
- Мнения: 2184
- Регистриран на: 7.08.2006
- Местоположение: София / ghetto+
- Пол: Мъж
- Кара: m52 e36
- Мечтае да кара: е38 ;)
- Детайли за колата: е36
яко, от години не бях виждал паскал
а това липсва:
но след сортирането не е трудно едно 'елиминиране'
яко, и то жена да пуска решение
евалата Елиана 
а това какво е в изхода?!? нарочно за оправяне или..
едит: еррор, ами може и без да си ги сортирал...
едит2: за кво пипаш по масива, нулирането е:
1. минаваш по масив А, и помниш в Х примерно винаги най-малкото число. ако намериш по-малко, Х=A[i,j]
2 след това минаваш по Б, и всичко дето е по-малко от Х го правиш =0
едит3: и един брояч колко пъти е било това и си готов

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

яко, и то жена да пуска решение


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

write(a[i,j]:7:2,' ');
едит: еррор, ами може и без да си ги сортирал...
едит2: за кво пипаш по масива, нулирането е:
1. минаваш по масив А, и помниш в Х примерно винаги най-малкото число. ако намериш по-малко, Х=A[i,j]
2 след това минаваш по Б, и всичко дето е по-малко от Х го правиш =0
едит3: и един брояч колко пъти е било това и си готов

Последна промяна t0sh на 09 Мар 2007, 12:50, променена общо 1 път
- Eliana
- УмНаТа КаКа с чЕрпАка :)
-
- Мнения: 1055
- Регистриран на: 25.08.2006
- Местоположение: Stara Zagora
- Пол: Жена
- Кара: '96 BMW318 cabrio
Съжалявам момчета, нещо много жестоко объркване е станало от моя страна. Все пак съм юрист, а не програмист
Ако някой друг може да помогне, неко го направи

Ако някой друг може да помогне, неко го направи

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

It's not who You are, it's who You know...
- Eliana
- УмНаТа КаКа с чЕрпАка :)
-
- Мнения: 1055
- Регистриран на: 25.08.2006
- Местоположение: Stara Zagora
- Пол: Жена
- Кара: '96 BMW318 cabrio
logout написа:Абе хора, аз пак да питам, не се ли объркахте нещо? Условието на задачата никак не ми се връзва с това, което давате като решение. Ма де да знам, аз съм прост програмист, не съм учил висше
Ти не можеш ли да помогнеш? След като си програмист значи имаш представа как е решението

- t0sh
- старши ентусиаст
-
- Мнения: 2184
- Регистриран на: 7.08.2006
- Местоположение: София / ghetto+
- Пол: Мъж
- Кара: m52 e36
- Мечтае да кара: е38 ;)
- Детайли за колата: е36
ох що ме карате да пиша на ПАСКАЛ, то се пише на всичко ама чак пък..
преправено на еррор:
не гарантиарм че ще компилира без грешка, писано on-the-fly
преправено на еррор:
- Код: Избери целия код
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

28 мнения
• Страница 1 от 2 • 1, 2
Кой е на линия
Потребители разглеждащи този форум: 0 регистрирани