singlepost

Pascal (вопрос по задаче 6.1) << На главную или назад  

Дан двум мас(real). Упорядочить массив(переставляя строки по возрастанию произвед всех элементов каждой строки.
вывести исх и получ мас на экран, а также произведение элементов.

program obr_str;
const m=4;n=5;
type vector=array[1..m] of real;
var a:array[1..n] of vector; d:array[1..n] of real;
p:real;
ind_str:1..n;
c:vector;
i,j,k:1..n;
Begin randomize;
.writeln('isxod mas');
.for i:=1 to m do
.. for J:=1 to n do
..a[i,j]:=random(n*m)+3;
..writeln('poluch mas');
..for i:=1 to m do begin
…for j:=1 to n do
…write(round(a[i,j]):4);
…writeln; end;
…for i:=1 to m do begin p:=1;
….for j:=1 to n do
….p:=p*a[i,j]; k:=k+1;
….d[k]:=p; end;
…..for k:=1 to k do
…..write(round(d[k]),' ');
readln
End.

произведение посчитал и вывел.А вот как прописывать возрастание произв, и перестановки строк по возр я не знаю.
Подскажите пожалуйста!

26 ответов в теме “Pascal (вопрос по задаче 6.1)”

  1. 25
    Александр Чигринец ответил:

    Какая помощь ожидается? "Напишите за меня программу" или разъясните непонятные моменты?

  2. 24
    Юля Гадалина ответил:

    дана целочисленная матрица А размером MxN, где M,N – заданные натуральные числа. Сформировать одномерный массив В, где В(j) равно сумме элементов кратных пяти и расположенных в j столбце матрицы, j=1,2…N. если таких элемнтов в j столбце нет, то элементу В(j) присвоить номер столбца. помогите мне пожалуйста!

  3. 23
    Сергей Владимирович ответил:

    именно это я и хотелсказать)

  4. 22
    Александр Чигринец ответил:

    Сортировка пузырьком это – один способ сортировки. Он не зависит от того, как обходится массив от конца в начало или наоборот. Смысл-то не в порядке обхода, а в том, что переставляются два рядом стоящих элемента.
    Другое дело, что есть другие алгоритмы.

  5. 21
    Сергей Владимирович ответил:

    хотя наверно есть ещё и не один способ сортировки пузырьком)

  6. 20
    Александр Чигринец ответил:

    Ну да, так тоже можно. Вопрос только в оптимальности такого решения.
    Строчка for z:=1 to n do begin означает, что на каждом шаге алгоритма сортировки выполняется дополнительно n перестановок (вместо одной). Такое решение будет в n раз медленнее работать, чем алгоритм с массивом индексов (массив G).

  7. 19
    Сергей Владимирович ответил:

    кстати, при работе над другой прогой, с похожим условием, ещё один методсмог сделать:
    сортирвку:
    for i:=2 to m do
    for j:=m downto i do
    if d[j-1]>d[j] then begin
    t:=d[j-1];
    d[j-1]:=d[j];
    d[j]:=t;
    for z:=1 to n do begin
    tt:=a[j-1,z];
    a[j-1,z]:=a[j,z];
    a[j,z]:=tt;end;end;

    т.е масссив G вообще не использовать и сразу можно потом выводить массив A, правда я вот долго думал, очему не работает данный метод, пока не написал
    for z:=1 to n do begin

  8. 18
    Александр Чигринец ответил:

    Без разницы как обходить массив.

  9. 17
    Сергей Владимирович ответил:

    ещё один такой вопросик, чисто теоретический, а почему метод пузырька описан имеено так
    for i :=2 to m do
    for j:=m downto i do

    а допустим не вот так
    for i :=n-1 downto 1 do
    for j:=1 to i do

  10. 16
    Сергей Владимирович ответил:

    вот теперь понятно, спасибо

  11. 15
    Александр Чигринец ответил:

    Пузырьковая сортировка применяется только к массиву d (массив произведений). Суть пузырьковой сортирвки вполне сносно объяснена в википедии.
    А перестановки массива g (массив индексов строк) выполняются синхронно с перестановками массива g, чтобы по окончании сортирвки индексы в массиве g были расположены по возрастанию произведений соответствующих строк.
    Переменная tt нужна для перестановки элементов в массиве g. Делает тоже самое, что и переменная t в массиве d, т.е. временно запоминает значение элемента массива.

  12. 14
    Сергей Владимирович ответил:

    понятно, и всё таки можете пожалуйста построчно объснить метод пузырька(я не понимаю что он делает в двум мас) и для чего нужно tt?
    for i :=2 to m do
    .for j:=m downto i do
    .if D[j-1]>D[j] then begin
    .t:=D[j-1];
    .D[j-1]:=D[j];
    . D[j]:=t;
    . tt:=G[j-1];
    .G[j-1]:=G[j];
    .G[j]:=tt;

  13. 13
    Илья Лэйло ответил:

    НУ да ,в твоей записи получаетсяn штук m-ных Векторов.
    а использоватьможно любую.

  14. 12
    Илья Лэйло ответил:

    A: array[1..m,1..n] of integer;самый банальный

  15. 11
    Сергей Владимирович ответил:

    т.е. это вместо этого
    type vector=array[1..m] of real;
    var a:array[1..n] of vector;

  16. 10
    Сергей Владимирович ответил:

    Да, вот теперь всё правильно раьботает!
    как можно ещё описать массив кроме как
    type vector=array[1..m] of real;
    var a,b:array[1..n] of vector; d:array[1..n] of real; G:array[1..m] of integer

  17. 9
    Александр Чигринец ответил:

    В алгоритме сортировке строчка if D[i-1]>D[j] then begin
    В программе именно так? По моему, должно быть не i-1, а j-1

  18. 8
    Сергей Владимирович ответил:

    о блин(
    программка всё-таки даёт сбой, когда мин произв находится во второй строчке, то всё, ответ неправлильный(
    вот скрин
    //i008.radikal.ru/0803/85/7f9dbb0db4e7.jpg

    должно быть 2 4 1 3
    а выдаёт 4 2 1 3
    т.е. почемуто путает местами первую и вторую строчку
    но почему?

  19. 7
    Сергей Владимирович ответил:

    просто у меня задача была подготовлена не правильно)

  20. 6
    Александр Чигринец ответил:

    А ещё я не понял, зачем объявлять два одинаковых массива (перерасход памяти получается)? Неужели внутри одного строки не переставить?
    А если распределять строки динамически и хранить массив указателей, то переставлять их будет совсем легко. Вот только освободить нужно не забыть.

  21. 5
    Илья Лэйло ответил:

    Мне тоже описание массива понравилось:) наврно щас так преподают:) или тема была про пользовательские типы:)

  22. 4
    Дмитрий Бойко ответил:

    Елементарный пузырьковый метод. Вроде все правильно.
    ЗЫ. аффтар зачем а че с описание массива такое замысловатое? Нельзя было проще? Или я что-то не понимаю?

  23. 3
    Александр Чигринец ответил:

    Обычная пузырьковая сортировка (манипуляции с массивом D) и синхронные преобразования массива G (массив индексов строк в двумерном массиве). Потом по данным этого массива переставляются строке в двумерном массиве.

  24. 2
    Сергей Владимирович ответил:

    Ну ты мозг!
    Спасибо тебе!

    А можешь объяснить, что происходит в этом участке проги
    for i :=2 to m do
    for j:=m downto i do
    if D[i-1]>D[j] then begin
    t:=D[j-1];
    D[j-1]:=D[j];
    D[j]:=t;
    tt:=G[j-1];
    G[j-1]:=G[j];
    G[j]:=tt;
    end;

  25. 1
    Илья Лэйло ответил:

    program obr_str;
    uses crt;
    const m=4;n=5;
    type vector=array[1..m] of real;
    var a,b:array[1..n] of vector;d:array[1..n] of real;G:array[1..m] of integer;
    p,t:real;
    ind_str:1..n;
    c:vector;
    tt:integer;
    i,j,k:1..n;
    Begin randomize;
    clrscr;
    writeln('isxod mas');
    for i:=1 to m do
    for J:=1 to n do
    a[i,j]:=random(n*m)+3;
    writeln('poluch mas');
    for i:=1 to m do begin
    for j:=1 to n do
    write(round(a[i,j]):4);
    writeln; end;
    for i:=1 to m do begin p:=1;
    for j:=1 to n do
    p:=p*a[i,j]; k:=k+1;
    d[k]:=p;G[k]:=k; end;
    for k:=1 to k do
    write(round(d[k]),' ');
    readln;
    for i :=2 to m do
    for j:=m downto i do
    if D[i-1]>D[j] then
    begin t:=D[j-1];D[j-1]:=D[j];D[j]:=t;
    tt:=G[j-1];G[j-1]:=G[j];G[j]:=tt;
    end;

    for i:=1 to m do
    for j:=1 to n dobegin
    b[i,j]:=a[G[i],j];
    end;

    for i:=1 to m do begin
    for j:=1 to n do
    write(round(b[i,j]):4);
    writeln; end;
    readln;
    end.

    Вроде работает:)

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.