singlepost

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

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

program obr_po_str;
const n=3; m=4;
var a:array[1..n,1..m] of integer; b:array[1..m] of integer;
i,j:1..m; p,k:integer;
Begin
randomize;
for i:=1 to n do
for j:=1 to m do
a[i,j]:=random(n*m)-5;
writeln('исх мас ');
for i:=1 to n do begin
for j:=1 to m do
write(a[i,j]:4);
writeln; end;
for i:=1 to n do
begin p:=1;
for j:=1 to m do
if a[i,1]<0 then p:=p*a[i,j]; k:=k+1;
b[i]:=p
end;
writeln('получ мас');
for i:=1 to k do
write(b[i],' ');
readln
End.

считает вроди правильно, но вот если отриц эл. нет в строке, то произведение он считает Р=1
и в одномерном массиве выводит вместо пустой ячейки, цифру 1.
25,1,-6,4 адолжен25,-6,4
что не так в проге?

24 ответов в теме “Рascal (вопрос по задаче)”

  1. 11
    Татьяна Ширшова ответил:

    Написать программу, осуществляющую поиск заданного множества ключевых слов в текстовом файле. Результатом работы программы должен быть список найденных слов и номера позиций этих слов в тексте. Символ новой строки не учитывать при подсчете позиции слова.
    Использовать теории регулярных выражений и конечных автоматов:
    1) Упростить,если можно, регулярное выражение.
    2) Для заданного регулярного выражения (РГ) построить соответствующую ему КА. Представление – диаграмма.
    3) Если автомат, полученный в 2) недетерминированный, то преобразовать его в ДКА, используя метод"ленивого" вычисления подмножеств.
    4)Если это удобно, переобозначить состояния полученного ДКА.
    5) Используя ДКА написать программу поиска ключевых слов в текстовом файле.
    First, for, gamma

  2. 10
    Александр Сидорович ответил:

    Спасибо всё правильно

  3. 9
    Дима Календо ответил:

    по-моему такой треугольник только один… 6 8 10, дальше разность между S и P всё хуже и хуже….
    если уж надо код то
    var
    a,b,c,i:longint;
    BEGIN
    a:=0;b:=0;c:=0;
    for i:=1 to 10000 do
    begin
    inc(a,3);inc(b,4);inc(c,5);
    if (a*b div 2=a+b+c) then writeln(a,' ',b,' ',c);
    end;
    END.

  4. 8
    Андрей Михалыч ответил:

    вообщем главное условие "if ((a*b)/2 = a+b+c) and (c=sqrt(sqr(a)+sqr(b)) 'а далее твори что хочешь…

  5. 7
    Андрей Михалыч ответил:

    а какие ограничения по целым числам?

  6. 6
    Александр Сидорович ответил:

    найти все прямоугольные треугольники, длины сторон которых являются целыми числами,а периметрчисленно равен площади

    Напишите прогу на паскале,пожайлуста

  7. 5
    Владимир Смирнов ответил:

    Некрофилия?
    информатика =ин форма тика=ин формат ика
    String s="информатика";
    String ss1=s.SubString(3,5);
    String ss2=s.SubString(3,6);

  8. 4
    Александр Сидорович ответил:

    А вот моя задача оч лёгкя, но всё-равно ответте:со слова информатика составить слова форма,формат.Зарание спасибо.

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

    Спасибо вам!!! и РЕСПЕКТ!!!

    В итоге полчилась вот такая прога

    program obr_po_str;
    const n=3; m=4;
    var a:array[1..n,1..m] of integer; b:array[1..m] of integer;
    i,j:1..m; p,k:integer;
    Begin
    randomize;
    …for i:=1 to n do
    ….for j:=1 to m do
    ……a[i,j]:=random(n*m)-5;
    …..writeln('исх мас');
    ……for i:=1 to n do begin
    ……for j:=1 to m do
    …….write(a[i,j]:4);
    …….. writeln; end; k:=0;
    ……….for i:=1 to n do
    ……………begin
    …………..if a[i,1]<0 then begin p:=1;
    ……………. for j:=1 to m do
    ……………..p:=p*a[i,j]; k:=k+1;
    …………….. b[k]:=p
    ……………….end; end;
    ……. writeln('получ мас');
    …….for k:=1 to k do
    ……. write(b[k],' ');
    readln
    End.

  10. 2
    Алексей Дарий ответил:

    объявляешь ты b как массив 1..m, а крутишь от 1 до n.
    тебя спасает сейчас только то, что m у тебя больше n.

    кусок:
    ……….for i:=1 to n do
    ……….begin
    ………………..p:=1;
    ………………..for j:=1 to m do
    …………………………if a[i,1]<0 then
    ………………………………….p:=p*a[i,j];
    ………………..k:=k+1;
    ………………..b[i]:=p
    ……….end;
    отсюда и косяки.

    интересно, как у тебя выполняется программа, когда ты нигде не присваиваешь начального значения для k? но я уже не помню паскаль.

    попробуй заменить кусок выше на кусок ниже. компилятора под рукой нет. поэтому за работоспособность не ручаюсь.
    ……….k:=0;
    ……….for i:=1 to n do
    ……….begin
    ………………..if a[i,1]<0 then
    ………………..begin
    …………………………p:=1;
    …………………………for j:=1 to m do
    ………………………………….p:=p*a[i,j];
    …………………………k:=k+1;
    …………………………b[k]:=p;
    ………………..end;
    ……….end;

  11. 1
    Jaroslav Lysyy ответил:

    Вот мой вариант решения. У меня всё работает. Разберись, посмотри…

    Program ExOneProg;
    Uses CRT;

    var
    massiv_1:array[1..n,1..m] of Longint; {исходный массив}
    massiv_2:array[1..5] of Longint;
    P:Longint; {произведение}
    i,j,k:Integer;

    begin
    ……….ClrScr;
    ……….InputMassiv;//здесь подразумевается заполнение массива
    ………. k:=0;
    ……….For i:=1 to n do
    ………………..if massiv_1[i,1]<0 then
    ………………………..begin
    ………………………………….P:=1;
    ………………………………….For j:=1 to m do P:=massiv_1[i,j]*P;
    ………………………………….k:=k+1;
    ………………………………….massiv_2[k]:=P;
    ………………………..end;
    ………………..For k:=1 to k do WriteLn('massiv_2 = ',massiv_2[k]);
    ReadLn;
    end.

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