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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2012, 09:36   #1
qwe1qwe2qwe3
Пользователь
 
Регистрация: 16.05.2012
Сообщений: 10
Восклицание ."Динамические массивы" в Delphi

Составить процедуру, возвращающую значение TRUE, если количество отрицательных элементов одномерного массива длиной N больше количества его нулевых элементов, и значение FALSE в противном случае. Если отрицательных элементов в заданном массиве больше, чем нулевых, вычислить произведение отрицательных элементов, иначе определить сумму индексов нулевых элементов.

Подскажите пожалуйста как составить программу в Delphi по этой задаче?
qwe1qwe2qwe3 вне форума Ответить с цитированием
Старый 17.05.2012, 10:21   #2
zloywolk
 
Регистрация: 15.05.2012
Сообщений: 5
По умолчанию

Как то так.. Здесь использовал динамический массив и генератор случайных чисел для получения его элементов.
Код:
program prog_phor1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  dynamic_arr=array of integer;
var
  n: integer;
  a: dynamic_arr;
  i: integer;
  prod: integer;
  sum: integer;

// Необходимая тебе функция
function num_negative(var arr: dynamic_arr; n: integer): boolean;
var
  k,z: integer;
begin
  k:=0; //отрицательные
  z:=0; //нулевые
  for i:=0 to n-1 do begin
    if arr[i]<0 then Inc(k)
    else if arr[i]=0 then Inc(z);
  end;
  if k>z then Result:=true
  else Result:=false;
end;

begin
  try
    randomize;
    write('Input length of array or 0 for exit: ');
    readln(n);
    if n<=0 then exit;
    SetLength(a, n);
    // В делфе динамические массивы начинаются с нулевого индекса.
    for i:= 0 to n-1 do begin
      a[i]:=random(5)-3;
    end;
    writeln('Array is: ');
    for i:= 0 to n-1 do begin
      write(a[i], ' ');
    end;
    writeln;

    prod:=1;
    sum:=0;
    if num_negative(a, n) then begin
      for i := 0 to n - 1 do
        if a[i]<0 then prod:=prod*a[i];
      writeln('There are more negative elemnts in array and its prod is: ', prod);
    end else begin
      for i := 0 to n - 1 do
        if a[i]=0 then sum:=sum+i;
      writeln('There are more zero elements in array and sum of its indexes: ', sum);
    end;
    readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
zloywolk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04