Паскаль ошибка времени выполнения значение maxvalue должно быть больше нуля имя параметра maxvalue

Перейти к контенту

OverloaD

0 / 0 / 0

Регистрация: 20.11.2010

Сообщений: 63

1

10.05.2012, 20:17. Показов 2867. Ответов 6

Метки нет (Все метки)


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Label4: TLabel;
    Edit2: TEdit;
    Label5: TLabel;
    Edit3: TEdit;
    Label6: TLabel;
    Edit4: TEdit;
    Label7: TLabel;
    Edit5: TEdit;
    Label8: TLabel;
    Edit6: TEdit;
    Button1: TButton;
    Label9: TLabel;
    Edit7: TEdit;
    Label10: TLabel;
    Edit8: TEdit;
    Memo1: TMemo;
    Memo2: TMemo;
    Memo3: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  mass:array [1..1000] of Real;
  rez,a,b,min,max:real;
  i:integer;
  Function f(a,b:Real):Real;
 
implementation
 
uses Math;
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
a:=StrToInt(Edit1.Text);
b:=StrToInt(Edit4.Text);
i:=1;
while a<=StrToInt(Edit2.Text) do
  begin
  Memo1.Lines.Add(FloatToStr(a));
    while b<=StrToInt(Edit5.Text) do
    begin
    Memo2.Lines.Add(FloatToStr(b));
    rez:=f(a,b);
    mass[i]:=rez;
    Memo3.Lines.Add(FloatToStr(rez));
    b:=b+StrToInt(Edit6.Text);
    Inc(i);
    end;
  a:=a+StrToInt(Edit3.Text);
  end;
min:=MinValue(mass);
max:=MaxValue(mass);
Edit7.Text:=FloatToStr(max);
Edit8.Text:=FloatToStr(min);
end;
 
Function f(a,b:Real):Real;
var
g:real;
begin
g:=a/b*Sqrt(Sqr(b)/Exp(3*ln(a)));
end;
 
end.

Не работаю 2 строки

min:=MinValue(mass);
max:=MaxValue(mass);

Пишет incompatible types, хотя все совпадает!

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

sokos

4 / 2 / 3

Регистрация: 09.05.2012

Сообщений: 11

10.05.2012, 20:29

2

У меня эта функция перегружена так:

Delphi
1
2
3
function MinValue(const Data: array of Single): Single;
function MinValue(const Data: array of Double): Double;
function MinValue(const Data: array of Extended): Extended;

Следовательно с Real работать не умеет. Могу ошибаться. Зависит возможно от версии Delphi.

0

OverloaD

0 / 0 / 0

Регистрация: 20.11.2010

Сообщений: 63

10.05.2012, 20:33

 [ТС]

3

Функция MinValue( const Data: array of Double ): Double;

Модуль: Math

Описание
Функция возвращает наименьшее значение числового массива Data.

Пример

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
var
   Mas: array of Real;
   Min: Real;
   I: byte;
begin
  ...
   SetLength(Mas, 10);
   Randomize;
   for I:=0 to 9 do Mas[i]:=Random;
   Min:=MinValue(Mas);
  ...
end;

0

4 / 2 / 3

Регистрация: 09.05.2012

Сообщений: 11

10.05.2012, 20:41

4

Странно сначала сами говорят Double

Цитата
Сообщение от OverloaD
Посмотреть сообщение

Функция MinValue( const Data: array of Double ): Double;

А пример приводят с Real.

Попробуйте просто заменить real на double у себя в коде.

0

0 / 0 / 0

Регистрация: 20.11.2010

Сообщений: 63

10.05.2012, 20:46

 [ТС]

5

Цитата
Сообщение от sokos
Посмотреть сообщение

Странно сначала сами говорят Double

А пример приводят с Real.

Попробуйте просто заменить real на double у себя в коде.

а как я это исправлю? у меня там по условию выходят не целые числа! или проканает?

0

antikiler_

1085 / 571 / 79

Регистрация: 07.04.2011

Сообщений: 971

Записей в блоге: 2

10.05.2012, 20:51

6

Delphi
1
2
var
   mass:array [1..1000] of double;

и все…

0

4 / 2 / 3

Регистрация: 09.05.2012

Сообщений: 11

10.05.2012, 20:54

7

Double — замена устаревшему Real.
Также имеет примерно 15 цифр точности.

0

Я не уверен, что это проблема, но в сообщении что-то выглядит как не правильно .

Моя первая попытка:

try
{
    var r = new Random();
    Console.WriteLine(r.Next(-1));
}
catch (Exception e)
{
    Console.WriteLine(e.GetType().ToString());
    Console.WriteLine(e.Message);
}

Выход:

System.ArgumentOutOfRangeException

‘maxValue’ должно быть больше нуля.

Имя параметра: maxValue

Моя вторая попытка:

try
{
    var r = new Random();
    Console.WriteLine(r.Next(0));
}
catch (Exception e)
{
    Console.WriteLine(e.GetType().ToString());
    Console.WriteLine(e.Message);
}

Выход:

0

Итак, проблема : почему 0 больше нуля ?

5 ответов

Лучший ответ

Если вы посмотрите на исходный код:

  /*=====================================Next=====================================
  **Returns: An int [0..maxValue)
  **Arguments: maxValue -- One more than the greatest legal return value.
  **Exceptions: None.
  ==============================================================================*/
  public virtual int Next(int maxValue) {
      if (maxValue<0) {
          throw new ArgumentOutOfRangeException("maxValue", Environment.GetResourceString("ArgumentOutOfRange_MustBePositive", "maxValue"));
      }
      Contract.EndContractBlock();
      return (int)(Sample()*maxValue);
  }

Значение должно быть положительным, а ноль — положительным.


2

Oliver
20 Июн 2017 в 05:51

По определению из MSDN Метод Random.Next (Int32).

maxValue Тип: System.Int32 Исключительная верхняя граница генерируемого случайного числа. maxValue должно быть больше или равно 0.

Так что да, мы можем сказать, что сообщение об ошибке вводит в заблуждение. Это должно быть больше или равно нулю.


2

jegtugado
20 Июн 2017 в 05:53

Метод Random.Next (Int32)

maxValue: исключительная верхняя граница случайного числа, которое будет сгенерировано. maxValue должно быть больше или равно 0.


1

Nkosi
20 Июн 2017 в 05:52

< Сильный > Параметры

maxValue

Тип: System.Int32 Исключительная верхняя граница случайного числа, которое будет сгенерировано. maxValue должно быть больше или равно 0.

Из метода Random.Next (Int32)


1

kgzdev
20 Июн 2017 в 05:52

Значение не может быть отрицательным. Ноль или выше приемлемо. Вот почему вы получаете ответ выше.


0

Reshma
20 Июн 2017 в 05:54

Неверный тип переменной цикла

var x: real;
begin
  for x := 1 to 10 do // переменная - параметр цикла не может иметь вещественный тип
    write(x);
end.

Изменение переменной цикла в теле цикла

Пример 1.

var i: integer;
begin
  for i := 1 to 10 do
  begin
    write(i);
    i := i + 2; // Нельзя изменять значение переменной цикла внутри цикла
  end;  
end.

Пример 2.

var i: integer;
begin
  for i := 1 to 10 do
  begin
    read(i); // Нельзя изменять значение переменной цикла внутри цикла
    write(i);
  end;  
end.

Использование одинаковой переменной цикла в заголовках вложенных циклов

var i,j: integer;
begin
  for i := 1 to 10 do
  for i := 1 to 10 do // ошибка: во вложенном цикле нельзя использовать параметр цикла с тем же именем
  begin
    write(i);
  end;  
end.

Неинициализированная переменная

var 
  i: integer;
  p: real;
begin
  // Забыли инициализировать p := 1
  for i := 1 to 10 do
    p := p * 2;
  write(p);  
end.

Зацикливание

var x: integer;
begin
  x := 1;
  while x>0 do // ошибка: условие все время остается истинным
  begin
    writeln(x);
    x := x + 1;
  end;
end.

Переполнение

var 
  n: integer;
  x: real;
begin
  n := integer.MaxValue; // максимальное целое
  writeln(n);
  n := n + 1; // следующее за максимальным целым
  writeln(n);  
  writeln;
  
  x := real.MaxValue; // максимальное вещественное
  writeln(x);
  x := x * 2; // бОльшее, чем максимальное вещественное
  writeln(x); // в ряде компиляторов возникает ошибка переполнения. 
              // Здесь x получает значение "бесконечность"
end.

Сравнение вещественных чисел на равенство

begin
  if 0.3*3 = 0.9 then // Значения не равны ввиду ошибки округления при работе с вещественными числами
    writeln('Равны')
  else writeln('Не равны');
end.

Ссылки

  • Программы для начинающих
  • Сайт PascalABC.NET: Программы и алгоритмы для начинающих

Я не уверен, что это проблема, но в сообщении что-то не так.

Моя первая попытка:

try
{
    var r = new Random();
    Console.WriteLine(r.Next(-1));
}
catch (Exception e)
{
    Console.WriteLine(e.GetType().ToString());
    Console.WriteLine(e.Message);
}

Вывод:

System.ArgumentOutOfRangeException

«maxValue» должен быть больше нуля.

Имя параметра: maxValue

Моя вторая попытка:

try
{
    var r = new Random();
    Console.WriteLine(r.Next(0));
}
catch (Exception e)
{
    Console.WriteLine(e.GetType().ToString());
    Console.WriteLine(e.Message);
}

Вывод:

0

Итак, проблема в том, почему 0 больше нуля?

20 июнь 2017, в 08:46

Поделиться

Источник

5 ответов

Если вы посмотрите на исходный код:

  /*=====================================Next=====================================
  **Returns: An int [0..maxValue)
  **Arguments: maxValue -- One more than the greatest legal return value.
  **Exceptions: None.
  ==============================================================================*/
  public virtual int Next(int maxValue) {
      if (maxValue<0) {
          throw new ArgumentOutOfRangeException("maxValue", Environment.GetResourceString("ArgumentOutOfRange_MustBePositive", "maxValue"));
      }
      Contract.EndContractBlock();
      return (int)(Sample()*maxValue);
  }

Значение должно быть положительным, а ноль положительным.

Oliver
20 июнь 2017, в 03:11

Поделиться

По определению из MSDN Random.Next Method (Int32).

maxValue Тип: System.Int32 Исключительная верхняя граница случайного числа, которое должно быть сгенерировано. maxValue должен быть больше или равен 0.

Поэтому да, мы можем сказать, что сообщение об ошибке вводит в заблуждение. Он должен быть больше или равен нулю.

John Ephraim Tugado
20 июнь 2017, в 04:31

Поделиться

Метод Random.Next(Int32)

maxValue: Исключительная верхняя граница случайного числа, которое должно быть сгенерировано. maxValue должен быть больше или равен 0.

Nkosi
20 июнь 2017, в 03:55

Поделиться

параметры

maxValue

Тип: System.Int32 Исключительная верхняя граница случайного числа, которое должно быть сгенерировано. maxValue должен быть больше или равен 0.

Из метода Random.Next(Int32)

Ikram Turgunbaev
20 июнь 2017, в 02:59

Поделиться

Значение can not negative.zero или above приемлемо. Вот почему вы получаете ответ выше.

Reshma
20 июнь 2017, в 03:22

Поделиться

Ещё вопросы

  • 1Как выбрать / получить все строки с node-sqlite3?
  • 0Установить значение по умолчанию выбрать базу данных формы AngularJS
  • 1Облачная функция, которая регистрирует текущие секунды в базе данных реального времени Firebase
  • 1Как узнать, правильно ли работает сайт или нет?
  • 0Найдите в строке запятую, затем пробел, а затем число
  • 1Договор на обслуживание WCF не поддерживается в тестовом клиенте
  • 0Конструктор копирования и выделение памяти
  • 0Функции Click и Hover для каждого элемента в ul
  • 0FCKEditor, добавление ширины и высоты к элементам img
  • 1Имитация объектов, создаваемых внутри метода во время модульного тестирования
  • 0Как добавить класс CSS в строку PHP?
  • 0Задайте динамически созданный div, который удаляется после события mouseup
  • 0Загрузка файлов не всегда работает в AngularJS
  • 0Как вычислить двойную переменную с десятичной точностью в C ++
  • 1Нужна помощь с использованием строки в скобках [дубликата]
  • 0Установить систему C на Cygwin
  • 0импортировать локальные подмодули в Android-проект JNI
  • 1Можем ли мы применить аспекты АОП к проекту Multi Maven
  • 0Использование Masonry.js на jQuery генерирует div
  • 0как ограничить результаты, которые возвращаются в массиве PHP
  • 0JQuery в прямом эфире отправить событие не звонить?
  • 0Запись в файл с C ++ и Linux
  • 0Установить переменную для конкретной страницы в jquery
  • 1java.lang.UnsatisfiedLinkError — Проблема с собственным методом
  • 1Как разделить строку ANSI с неизвестными символами, возвращенными из OpenVMS в C #
  • 1Перегруженные методы Oracle не поддерживаются
  • 0Примечание: ошибка преобразования массива в строку при преобразовании массива из php в javascript
  • 0MySQL История результатов запросов?
  • 1Ответ без команды пользователя в Telegram Bot становится личным
  • 1Как читать телефонные номера с полными (не только отображаемыми именами) контактными данными (имя, фамилия, псевдоним)? на Android
  • 0Директива триггера по щелчку
  • 0Сетка углового интерфейса: уведомить пользователя, что сортировка может занять некоторое время
  • 1группировка данных zingchart и выборка вниз
  • 0Есть ли способ разметить или пометить транзакции mysql для регистрации?
  • 0C128 скрипт в php
  • 0Jquery имеет / найти / содержит не работает
  • 1Где разместить ресурсы ее приложения, чтобы они были установлены на SD-карте?
  • 1D3 вручную позиционирует узлы с определенным идентификатором
  • 1Создание объекта подкласса аккаунта
  • 0Что такое метод шифрования пароля в Joomla 1.5.26?
  • 1Где разместить пользовательские данные
  • 1HornetQ Reconnect-попытки не работают с DefaultMessageListenerContainer
  • 0Как передать данные между запросами в угловом ресурсе?
  • 1Null Coalescing для строки в Int
  • 1Диаграмма JS показывает старые данные диаграммы при наведении
  • 1Python Добавить список диктов
  • 1Как загрузить файлы в Google Drive другого человека
  • 0пружинная защита с интеграцией angularjs
  • 0Как запросить таблицу с составным первичным ключом
  • 1Как получить площадь полигона GeoJSON с помощью Python

Сообщество Overcoder

Asked
5 years, 7 months ago

Viewed
3k times

I’m not sure it’s an issue, but something looks like not correct in the message.

My first try:

try
{
    var r = new Random();
    Console.WriteLine(r.Next(-1));
}
catch (Exception e)
{
    Console.WriteLine(e.GetType().ToString());
    Console.WriteLine(e.Message);
}

Output:

System.ArgumentOutOfRangeException

‘maxValue’ must be greater than zero.

Parameter name: maxValue

My second try:

try
{
    var r = new Random();
    Console.WriteLine(r.Next(0));
}
catch (Exception e)
{
    Console.WriteLine(e.GetType().ToString());
    Console.WriteLine(e.Message);
}

Output:

0

So, the problem is: why is 0 greater than zero?

Community's user avatar

asked Jun 20, 2017 at 5:47

If you take a look at the source code:

  /*=====================================Next=====================================
  **Returns: An int [0..maxValue)
  **Arguments: maxValue -- One more than the greatest legal return value.
  **Exceptions: None.
  ==============================================================================*/
  public virtual int Next(int maxValue) {
      if (maxValue<0) {
          throw new ArgumentOutOfRangeException("maxValue", Environment.GetResourceString("ArgumentOutOfRange_MustBePositive", "maxValue"));
      }
      Contract.EndContractBlock();
      return (int)(Sample()*maxValue);
  }

The value must be positive and zero is positive.

answered Jun 20, 2017 at 5:51

Oliver's user avatar

OliverOliver

42.5k8 gold badges95 silver badges148 bronze badges

1

By definition from MSDN Random.Next Method (Int32).

maxValue Type:
System.Int32 The exclusive upper bound of the random
number to be generated. maxValue must be greater than or equal to 0.

So yes we can say that the error message is misleading. It should be greater than or equal to zero.

answered Jun 20, 2017 at 5:53

jegtugado's user avatar

jegtugadojegtugado

5,0771 gold badge10 silver badges35 bronze badges

Random.Next Method (Int32)

maxValue: The exclusive upper bound of the random number to be generated. maxValue must be greater than or equal to 0.

answered Jun 20, 2017 at 5:52

Nkosi's user avatar

NkosiNkosi

228k32 gold badges404 silver badges456 bronze badges

Parameters

maxValue

Type: System.Int32
The exclusive upper bound of the random number to be generated. maxValue must be greater than or equal to 0.

From Random.Next Method (Int32)

answered Jun 20, 2017 at 5:52

kgzdev's user avatar

kgzdevkgzdev

2,7302 gold badges18 silver badges35 bronze badges

The value cant be negative.zero or above is acceptable.That’s why your are getting above answer.

answered Jun 20, 2017 at 5:54

Reshma's user avatar

ReshmaReshma

4363 silver badges13 bronze badges

Asked
5 years, 7 months ago

Viewed
3k times

I’m not sure it’s an issue, but something looks like not correct in the message.

My first try:

try
{
    var r = new Random();
    Console.WriteLine(r.Next(-1));
}
catch (Exception e)
{
    Console.WriteLine(e.GetType().ToString());
    Console.WriteLine(e.Message);
}

Output:

System.ArgumentOutOfRangeException

‘maxValue’ must be greater than zero.

Parameter name: maxValue

My second try:

try
{
    var r = new Random();
    Console.WriteLine(r.Next(0));
}
catch (Exception e)
{
    Console.WriteLine(e.GetType().ToString());
    Console.WriteLine(e.Message);
}

Output:

0

So, the problem is: why is 0 greater than zero?

Community's user avatar

asked Jun 20, 2017 at 5:47

If you take a look at the source code:

  /*=====================================Next=====================================
  **Returns: An int [0..maxValue)
  **Arguments: maxValue -- One more than the greatest legal return value.
  **Exceptions: None.
  ==============================================================================*/
  public virtual int Next(int maxValue) {
      if (maxValue<0) {
          throw new ArgumentOutOfRangeException("maxValue", Environment.GetResourceString("ArgumentOutOfRange_MustBePositive", "maxValue"));
      }
      Contract.EndContractBlock();
      return (int)(Sample()*maxValue);
  }

The value must be positive and zero is positive.

answered Jun 20, 2017 at 5:51

Oliver's user avatar

OliverOliver

42.5k8 gold badges95 silver badges148 bronze badges

1

By definition from MSDN Random.Next Method (Int32).

maxValue Type:
System.Int32 The exclusive upper bound of the random
number to be generated. maxValue must be greater than or equal to 0.

So yes we can say that the error message is misleading. It should be greater than or equal to zero.

answered Jun 20, 2017 at 5:53

jegtugado's user avatar

jegtugadojegtugado

5,0771 gold badge10 silver badges35 bronze badges

Random.Next Method (Int32)

maxValue: The exclusive upper bound of the random number to be generated. maxValue must be greater than or equal to 0.

answered Jun 20, 2017 at 5:52

Nkosi's user avatar

NkosiNkosi

228k32 gold badges404 silver badges456 bronze badges

Parameters

maxValue

Type: System.Int32
The exclusive upper bound of the random number to be generated. maxValue must be greater than or equal to 0.

From Random.Next Method (Int32)

answered Jun 20, 2017 at 5:52

kgzdev's user avatar

kgzdevkgzdev

2,7302 gold badges18 silver badges35 bronze badges

The value cant be negative.zero or above is acceptable.That’s why your are getting above answer.

answered Jun 20, 2017 at 5:54

Reshma's user avatar

ReshmaReshma

4363 silver badges13 bronze badges

Весь код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Media.Animation;

namespace WpfApp1
{
/// <summary>
/// Interaction logic for MainPage.xaml
/// </summary>
public partial class MainWindow : Window
{
    Random random = new Random();
    public MainWindow()
    {
        InitializeComponent();
    }

    private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
    {

    }

    private void startButton_Click(object sender, RoutedEventArgs e)
    {
        AddEnemy();
    }

    private void AddEnemy()
    {   
        ContentControl enemy=new ContentControl();
        enemy.Template = Resources["EnemyTemplate"] as ControlTemplate;
        AnimateEnemy(enemy, 0, playArea.ActualWidth - 100, "(Canvas.Left)");
        AnimateEnemy(enemy, random.Next((int)playArea.ActualHeight - 1),
            random.Next((int)playArea.ActualHeight - 1), "(Canvas.Top)");
        playArea.Children.Add(enemy);
    }

    private void AnimateEnemy(ContentControl enemy, double from, double to, string propertyToAnimate)
    {
        Storyboard storyboard = new Storyboard() { AutoReverse = true, RepeatBehavior = RepeatBehavior.Forever };
        DoubleAnimation animation = new DoubleAnimation()
        {
            From = from,
            To = to,
            Duration = new Duration(TimeSpan.FromSeconds(random.Next(4, 6))),
        };

        Storyboard.SetTarget(animation, enemy);
        Storyboard.SetTargetProperty(animation, new PropertyPath(propertyToAnimate));
        storyboard.Children.Add(animation);
        storyboard.Begin();
    }


}

}

При запуске ошибка

System.ArgumentOutOfRangeException: 'Значение "maxValue" должно быть больше нуля.'

В свойствах высота/ширина установлены на авто.

Свойства

Значения переменных
введите сюда описание изображения
В чем может быть ошибка?

OverloaD

0 / 0 / 0

Регистрация: 20.11.2010

Сообщений: 63

1

10.05.2012, 20:17. Показов 3004. Ответов 6

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Label4: TLabel;
    Edit2: TEdit;
    Label5: TLabel;
    Edit3: TEdit;
    Label6: TLabel;
    Edit4: TEdit;
    Label7: TLabel;
    Edit5: TEdit;
    Label8: TLabel;
    Edit6: TEdit;
    Button1: TButton;
    Label9: TLabel;
    Edit7: TEdit;
    Label10: TLabel;
    Edit8: TEdit;
    Memo1: TMemo;
    Memo2: TMemo;
    Memo3: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  mass:array [1..1000] of Real;
  rez,a,b,min,max:real;
  i:integer;
  Function f(a,b:Real):Real;
 
implementation
 
uses Math;
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
a:=StrToInt(Edit1.Text);
b:=StrToInt(Edit4.Text);
i:=1;
while a<=StrToInt(Edit2.Text) do
  begin
  Memo1.Lines.Add(FloatToStr(a));
    while b<=StrToInt(Edit5.Text) do
    begin
    Memo2.Lines.Add(FloatToStr(b));
    rez:=f(a,b);
    mass[i]:=rez;
    Memo3.Lines.Add(FloatToStr(rez));
    b:=b+StrToInt(Edit6.Text);
    Inc(i);
    end;
  a:=a+StrToInt(Edit3.Text);
  end;
min:=MinValue(mass);
max:=MaxValue(mass);
Edit7.Text:=FloatToStr(max);
Edit8.Text:=FloatToStr(min);
end;
 
Function f(a,b:Real):Real;
var
g:real;
begin
g:=a/b*Sqrt(Sqr(b)/Exp(3*ln(a)));
end;
 
end.

Не работаю 2 строки

min:=MinValue(mass);
max:=MaxValue(mass);

Пишет incompatible types, хотя все совпадает!



0



sokos

4 / 2 / 3

Регистрация: 09.05.2012

Сообщений: 11

10.05.2012, 20:29

2

У меня эта функция перегружена так:

Delphi
1
2
3
function MinValue(const Data: array of Single): Single;
function MinValue(const Data: array of Double): Double;
function MinValue(const Data: array of Extended): Extended;

Следовательно с Real работать не умеет. Могу ошибаться. Зависит возможно от версии Delphi.



0



OverloaD

0 / 0 / 0

Регистрация: 20.11.2010

Сообщений: 63

10.05.2012, 20:33

 [ТС]

3

Функция MinValue( const Data: array of Double ): Double;

Модуль: Math

Описание
Функция возвращает наименьшее значение числового массива Data.

Пример

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
var
   Mas: array of Real;
   Min: Real;
   I: byte;
begin
  ...
   SetLength(Mas, 10);
   Randomize;
   for I:=0 to 9 do Mas[i]:=Random;
   Min:=MinValue(Mas);
  ...
end;



0



4 / 2 / 3

Регистрация: 09.05.2012

Сообщений: 11

10.05.2012, 20:41

4

Странно сначала сами говорят Double

Цитата
Сообщение от OverloaD
Посмотреть сообщение

Функция MinValue( const Data: array of Double ): Double;

А пример приводят с Real.

Попробуйте просто заменить real на double у себя в коде.



0



0 / 0 / 0

Регистрация: 20.11.2010

Сообщений: 63

10.05.2012, 20:46

 [ТС]

5

Цитата
Сообщение от sokos
Посмотреть сообщение

Странно сначала сами говорят Double

А пример приводят с Real.

Попробуйте просто заменить real на double у себя в коде.

а как я это исправлю? у меня там по условию выходят не целые числа! или проканает?



0



antikiler_

1085 / 571 / 79

Регистрация: 07.04.2011

Сообщений: 971

Записей в блоге: 2

10.05.2012, 20:51

6

Delphi
1
2
var
   mass:array [1..1000] of double;

и все…



0



4 / 2 / 3

Регистрация: 09.05.2012

Сообщений: 11

10.05.2012, 20:54

7

Double — замена устаревшему Real.
Также имеет примерно 15 цифр точности.



0



Я не уверен, что это проблема, но в сообщении что-то выглядит как не правильно .

Моя первая попытка:

try
{
    var r = new Random();
    Console.WriteLine(r.Next(-1));
}
catch (Exception e)
{
    Console.WriteLine(e.GetType().ToString());
    Console.WriteLine(e.Message);
}

Выход:

System.ArgumentOutOfRangeException

‘maxValue’ должно быть больше нуля.

Имя параметра: maxValue

Моя вторая попытка:

try
{
    var r = new Random();
    Console.WriteLine(r.Next(0));
}
catch (Exception e)
{
    Console.WriteLine(e.GetType().ToString());
    Console.WriteLine(e.Message);
}

Выход:

0

Итак, проблема : почему 0 больше нуля ?

5 ответов

Лучший ответ

Если вы посмотрите на исходный код:

  /*=====================================Next=====================================
  **Returns: An int [0..maxValue)
  **Arguments: maxValue -- One more than the greatest legal return value.
  **Exceptions: None.
  ==============================================================================*/
  public virtual int Next(int maxValue) {
      if (maxValue<0) {
          throw new ArgumentOutOfRangeException("maxValue", Environment.GetResourceString("ArgumentOutOfRange_MustBePositive", "maxValue"));
      }
      Contract.EndContractBlock();
      return (int)(Sample()*maxValue);
  }

Значение должно быть положительным, а ноль — положительным.


2

Oliver
20 Июн 2017 в 05:51

По определению из MSDN Метод Random.Next (Int32).

maxValue Тип: System.Int32 Исключительная верхняя граница генерируемого случайного числа. maxValue должно быть больше или равно 0.

Так что да, мы можем сказать, что сообщение об ошибке вводит в заблуждение. Это должно быть больше или равно нулю.


2

jegtugado
20 Июн 2017 в 05:53

Метод Random.Next (Int32)

maxValue: исключительная верхняя граница случайного числа, которое будет сгенерировано. maxValue должно быть больше или равно 0.


1

Nkosi
20 Июн 2017 в 05:52

< Сильный > Параметры

maxValue

Тип: System.Int32 Исключительная верхняя граница случайного числа, которое будет сгенерировано. maxValue должно быть больше или равно 0.

Из метода Random.Next (Int32)


1

kgzdev
20 Июн 2017 в 05:52

Значение не может быть отрицательным. Ноль или выше приемлемо. Вот почему вы получаете ответ выше.


0

Reshma
20 Июн 2017 в 05:54

Во-первых, ваш код работает. Ошибка возможна потому, что не находит файл или он занять другим процессом.

Во — вторых, раз это PascalABC.Net, то почему бы не писать в его стиле

const
    filename = 'dat.txt';

var
    f: Text;   // Файловая переменная.
    i: integer;  // Переменная для хранения значения количества подсчитываемых элементов.
    a: real;  // Промежуточная переменная для хранения значения читаемых элементов.
    sum: real;// переменная для хранения значения произведения.

begin
    //    Rewrite(f, filename); 
    //    f.Writeln(2);
    //    f.Writeln(7);
    //    f.Close();
    
    f := OpenRead(filename);
    
    i := 0;               //  Установка счетной переменной в нулевое состояние.
    sum := 0;
    while not f.Eof do  // Цикл для поэлементного чтения из файла.
    begin
        a := f.ReadlnReal();        // Чтение информации из файла.
        write(a:8:2);
        sum := sum + a;
        inc(i);
    end;
    f.Close();
    
    writeln;
    writeln('The number of extracted numbers from the file is: ', i);
    writeln('Summa numbers from a file is equal to: ', sum:0:2);
    readln;
end.

I’m not sure it’s an issue, but something looks like not correct in the message.

My first try:

try
{
    var r = new Random();
    Console.WriteLine(r.Next(-1));
}
catch (Exception e)
{
    Console.WriteLine(e.GetType().ToString());
    Console.WriteLine(e.Message);
}

Output:

System.ArgumentOutOfRangeException

‘maxValue’ must be greater than zero.

Parameter name: maxValue

My second try:

try
{
    var r = new Random();
    Console.WriteLine(r.Next(0));
}
catch (Exception e)
{
    Console.WriteLine(e.GetType().ToString());
    Console.WriteLine(e.Message);
}

Output:

0

So, the problem is: why is 0 greater than zero?

Community's user avatar

asked Jun 20, 2017 at 5:47

If you take a look at the source code:

  /*=====================================Next=====================================
  **Returns: An int [0..maxValue)
  **Arguments: maxValue -- One more than the greatest legal return value.
  **Exceptions: None.
  ==============================================================================*/
  public virtual int Next(int maxValue) {
      if (maxValue<0) {
          throw new ArgumentOutOfRangeException("maxValue", Environment.GetResourceString("ArgumentOutOfRange_MustBePositive", "maxValue"));
      }
      Contract.EndContractBlock();
      return (int)(Sample()*maxValue);
  }

The value must be positive and zero is positive.

answered Jun 20, 2017 at 5:51

Oliver's user avatar

OliverOliver

43.1k8 gold badges93 silver badges151 bronze badges

1

By definition from MSDN Random.Next Method (Int32).

maxValue Type:
System.Int32 The exclusive upper bound of the random
number to be generated. maxValue must be greater than or equal to 0.

So yes we can say that the error message is misleading. It should be greater than or equal to zero.

answered Jun 20, 2017 at 5:53

jegtugado's user avatar

jegtugadojegtugado

5,0711 gold badge11 silver badges35 bronze badges

Random.Next Method (Int32)

maxValue: The exclusive upper bound of the random number to be generated. maxValue must be greater than or equal to 0.

answered Jun 20, 2017 at 5:52

Nkosi's user avatar

NkosiNkosi

233k34 gold badges415 silver badges465 bronze badges

Parameters

maxValue

Type: System.Int32
The exclusive upper bound of the random number to be generated. maxValue must be greater than or equal to 0.

From Random.Next Method (Int32)

answered Jun 20, 2017 at 5:52

kgzdev's user avatar

kgzdevkgzdev

2,7602 gold badges18 silver badges35 bronze badges

The value cant be negative.zero or above is acceptable.That’s why your are getting above answer.

answered Jun 20, 2017 at 5:54

Reshma's user avatar

ReshmaReshma

4363 silver badges13 bronze badges

  • Паскаль ошибка runtime error
  • Паскаль выдает ошибку неизвестное имя
  • Паскаль абс ошибка ожидался идентификатор
  • Паскаль абс ошибка времени выполнения
  • Пасито 2 ошибка check atomizer что значит