Error incompatible types got real expected smallint

Ошибка Incompatible type for arg no. 1: Got "Real", expected "SmallInt" Turbo Pascal Решение и ответ на вопрос 2824270

Arefev596

1 / 1 / 0

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

Сообщений: 29

1

03.05.2021, 21:46. Показов 1626. Ответов 2

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


Крайне благодарен буду тому,кто даст мне подзатыльник и объяснит,что и где не так.Спасибо!)
Пытаюсь написать код шифрования Диффи-Хеллмана,но не получается,ошибки…
Само задание: Написать программу, использующую алгоритм шифрования данных для преобразования исходного текста.
main.pas(7,33) Error: Incompatible types: got «Extended» expected «Int64»
main.pas(21,18) Error: Incompatible type for arg no. 1: Got «Real», expected «SmallInt»
main.pas(24,18) Error: Incompatible type for arg no. 1: Got «Real», expected «SmallInt»
main.pas(25,11) Error: Incompatible types: got «untyped» expected «SmallInt»
main.pas(26,11) Error: Incompatible types: got «untyped» expected «SmallInt»

Pascal
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
procedure search (a, b : Integer; P:extended);
label return;
begin
    if (b)=1 then 
        goto return
    else
        writeln(exp(b*LN(a) mod P));
end;
 
 
Var P, G: Real; 
    x, y, a, b, ka, kb:Integer;
 
begin 
    writeln ('Введите первое общее публичное число ');
    readln(P);
    writeln ('Введите второе общее публичное число ');
    readln(G);
    writeln ('Введите выбранный закрытый ключ для 1-го пользователя ');
    readln(a);
    x := search(G, a, P);
    writeln ('Введите выбранный закрытый ключ для 2-го пользователя ');
    readln(b);
    y := search(G, b, P); 
    ka := search(y, a, P);
    kb := search(x, b, P);
    writeln ('Секретный ключ для 1 : ', ka);
    writeln ('Секретный ключ для 2 : ', kb);
    break;
end.

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



0



Programming

Эксперт

94731 / 64177 / 26122

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

Сообщений: 116,782

03.05.2021, 21:46

Ответы с готовыми решениями:

Error: Incompatible types: got «Extended» expected «SmallInt»
Задание. Написать программу решения задачи, используя функции: в основной функции вычислить с…

Error: Incompatible types: got «Boolean» expected «Int64»
Здравствуйте, возникла ошибка в программе project1.lpr(43,6) Error: Incompatible types: got…

Ошибка .pas(15,9) Fatal: Syntax error, «;» expected but «ELSE» found
На паскале пишу код ровно один день,не понимаю,почему ругается…Буду благодарен за…

Составить фразу «текстовый редактор» из слов «тесто», «редакция», «мотор», «который»
1) Составить фразу "текстовый редактор" из слов "тесто", "редакция", "мотор", "который".

2

Модератор

Эксперт Pascal/DelphiЭксперт NIX

7502 / 4370 / 2776

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

Сообщений: 12,506

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

04.05.2021, 09:35

2

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

объяснит,что и где не так

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

Error — ошибка
Incompatible types — несовместимые типы
Got «нечто» expected «другое» — получено «нечто», ожидалось «другое»

Из написанного неявно и ненаписанного:
1) procedure не возвращают значений по своему имени вызова.
2) break прерывает цикл, в других случаях бесполезен.



1



1 / 1 / 0

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

Сообщений: 29

06.05.2021, 10:22

 [ТС]

3

Понял,спасибо!



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

Сообщений: 92,604

06.05.2021, 10:22

Помогаю со студенческими работами здесь

Составить фразу «письменный стол» из слов «тесненный», «полка», «речь», «миф».
1) Составить фразу "письменный стол" из слов "тесненный", "полка", "речь", "миф".
2) Вывести…

Составить фразу «программное обеспечение» из слов «программист», «оборот», «анчоус», «измерение»
Составить фразу "программное обеспечение" из слов "программист", "оборот", "анчоус",…

Заменить символы «1», «2», «3» словами «один», «два», «три»
Дана строка символов. Заменить символы "1", "2", "3" словами "один", "два", "три". Оформить в…

Составить програму, которая б после каждой буквы «е» в данном слове дописывала букву «о» и меняла словосочетание «да» на «нет»
Составить програму, которая б после каждой буквы "е" в данном слове дописывала букву "о" и меняла…

Построить последовательно применяя методы «отобразить», «сдвинуть», «изменить размеры», «спрятать» иерархии обьектов
построить последовательно применяя методы "отобразить", "сдвинуть", "изменить размеры",…

Проверить слово «Дом» и содержит ли оно буквы: «а» , «б» ,»о»,»д»
программа должна проверить слово "Дом" и содержит ли оно буквы: "а" , "б"…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

3

Program opn;
     uses crt;
    const
       inp=('Введите строчку, преобразованную в опн ');
       outp=('Результат равен ');
       sp=#32;
       err=('Ошибка: ');
var
   el:array[1..128] of elements;
   e,x,i,k:integer;
   ch1,ch2:real;
   s,d:string;
   stack:PElement;
begin
   stack:=nil;
   e:=0;
   x:=0;
   i:=0;
   k:=0;
   s:='';
   d:='';
   ch1:=0;
   ch2:=0;
   writeln(inp);
   read(s);
    for i:=1 to length(s) do       {начало классификации}
       with el[i] do
           begin
               k:=pos(sp,s);
               d:=copy(s,1,k-1);
               val(d,x,e);
               if (e=0) then
                   num:=x
               else
                   op:=d[1];
               delete(s,1,k);
           end;                            {конец классификации}

{здесь вроде как нормально но дальше ошибки выдает, при взятии элементов}
for i:=1 to length(el) do
       if el[i] in num then Push(el[i]);
       if el[i] in op then
           begin
               case op of
               '+': 
                begin
                    ch1:= pop(stack);
                    ch2:= pop(stack);
                    ch1:= ch1 + ch2;
                    push(ch1);
                end;      {и так же остальные операции}

ссылки на весь код
вывод компилятора

Сompiling your program...

prog.pas(99,36) Error: Incompatible type for arg no. 1: Got "elements", expected "SmallInt"
prog.pas(102,24) Error: Identifier not found "op"
prog.pas(103,19) Error: Constant and CASE types do not match
prog.pas(108,26) Error: Incompatible type for arg no. 1: Got "Real", expected "SmallInt"
prog.pas(110,19) Error: Constant and CASE types do not match
prog.pas(115,26) Error: Incompatible type for arg no. 1: Got "Real", expected "SmallInt"
prog.pas(117,19) Error: Constant and CASE types do not match
prog.pas(122,26) Error: Incompatible type for arg no. 1: Got "Real", expected "SmallInt"
prog.pas(124,19) Error: Constant and CASE types do not match
prog.pas(136,28) Error: Incompatible type for arg no. 1: Got "Real", expected "SmallInt"
prog.pas(139,19) Error: Constant and CASE types do not match
prog.pas(144,26) Error: Incompatible type for arg no. 1: Got "Real", expected "SmallInt"
prog.pas(100,13) Error: Boolean expression expected, but got "Char"
prog.pas(148,4) Fatal: There were 13 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)

не могу понять, почему компилятор ругается на взятие элемента из массива

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

Сообщение

Описание

Error: Type mismatch

Это может произойти во многих случаях:

Назначенная вами переменная отличается от типа, который используется в выражении

Вы вызываете функцию или процедуру с параметрами, которые несовместимы с параметрами в объявлении функции или процедуры

Error: Incompatible types: got «Сообщ1» expected «Сообщ2»

Невозможно преобразование между двумя типами. Ещё одна причина – типы объявлены в разных объявлениях:

Var A1 : Array[1..10] Of Integer;
  A2 : Array[1..10] Of Integer;
Begin
A1:=A2; {Этот оператор также даёт такую ошибку, потому
          что выполняется строгая проверка типов Pascal}
End.

Error: Type mismatch between «Сообщ1» and «Сообщ2»

Типы не являются эквивалентными.

Error: Type identifier expected

Идентификатор не является типом, или вы забыли указать идентификатор type.

Error: Variable identifier expected

Это случается, если вы помещаете константу в процедуру (такую как Inc или Dec), в то время как процедура требует переменной. Для таких процедур в качестве параметров можно помещать только переменные.

Error: Integer expression expected, but got «Сообщение»

Компилятор ожидает выражения типа integer, но получает другой тип.

Error: Boolean expression expected, but got «Сообщение»

Выражение должно быть типа boolean. Оно должно возвращать True или False.

Error: Ordinal expression expected

Выражение должно быть порядкового типа, то есть максимум типа Longint. Эта ошибка случается, например, если вы указали второй параметр процедуры Inc или Dec, который не соответствует порядковому типу.

Error: pointer type expected, but got «Сообщение»

Переменная или выражения не являются указателем. Это случается, если вы помещаете переменную, которая не является указателем, в New или Dispose.

Error: class type expected, but got «Сообщение»

Переменная или выражение не являются типом class. Это обычно случается, если

1.Родительский класс в объявлении класса не является классом

2.Обработчик исключения (On) cсодержит идентификатор типа, который не является классом.

Error: Can’t evaluate constant expression

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

Error: Set elements are not compatible

Вы пытаетесь выполнить операцию с двумя множествами, в то время как типы элементов этих множеств не являются одинаковыми. Базовые типы множеств должны быть одинаковыми при объединении.

Error: Operation not implemented for sets

Некоторые бинарные операторы не определены для множеств. Это операторы: div, mod, **, >= и <=. Последние два могут быть определены для множеств в будущих версиях.

Warning: Automatic type conversion from floating type to COMP which is an integer type

Обнаружено явное преобразование типов из real в comp. s encountered. Поскольку comp – это 64-битное целое число, то это может вызвать ошибку.

Hint: use DIV instead to get an integer result

Если подсказки включены, то целочисленное деление с оператором ‘/‘ приведёт к этому сообщению, потому что результатом будет вещественный тип.

Error: string types doesn’t match, because of $V+ mode

Если выполняется компиляция в режиме {$V+}, то строка, передаваемая вами в качестве параметра, должна быть точно такого же типа, как параметр процедуры.

Error: succ or pred on enums with assignments not possible

Если вы объявили перечисляемый тип в стиле С, например, так:

Tenum = (a,b,e:=5);

То вы не сможете использовать функции Succ или Pred с этим перечислением.

Error: Can’t read or write variables of this type

Вы пытаетесь прочитать или записать переменную из файла или в файл текстового типа, который не поддерживает тип переменной. Только целочисленные типы, вещественные, pchars и strings можно читать из файла или записывать в текстовый файл. Логические переменные можно только записывать в текстовый файл.

Error: Can’t use readln or writeln on typed file

readln и writeln можно использовать только с текстовыми файлами.

Error: Can’t use read or write on untyped file.

read и write допускаются только для текстовых или типизированных файлов.

Error: Type conflict between set elements

Это означает, что не менее одного элемента множества имеют неправильный тип.

Warning: lo/hi(dword/qword) returns the upper/lower word/dword

Free Pascal поддерживает перегруженную версию lo/hi для longint/dword/int64/qword, которые возвращают наименьшее/наибольшее (результат типа слово/двойное слово) значение аргумента. Turbo Pascal позволяет использовать 16-битные lo/hi, которые возвращают биты 0..7 для lo и биты 8..15 для hi. Если вы хотите получить поведение, аналогичное Turbo Pascal, вы должны использовать приведение типов к word или integer.

Error: Integer or real expression expected

Первый аргумент для str должен быть типа real или integer.

Error: Wrong type «Сообщение» in array constructor

Вы пытаетесь использовать тип в конструкторе массива, который недопустим.

Error: Incompatible type for arg no. Сообщ1: Got «Сообщ2», expected «Сообщ3»

Вы пытаетесь передать неправильный тип в указанный параметр.

Error: Method (variable) and Procedure (variable) are not compatible

Вы не можете связать метод с процедурной переменной или процедуру с указателем на метод.

Error: Illegal constant passed to internal math function

Аргумент-константа, переданный в функцию ln или sqrt выходит за пределы диапазона для этой функции.

Error: Can’t take the address of constant expressions

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

Error: Argument can’t be assigned to

Только выражение, которое может быть в левой части присваивания, может быть передано как вызов по ссылке аргумента. Примечание: Свойства могут использоваться в левой части присваивания, тем не менее, они не могут использоваться как аргументы.

Error: Can’t assign local procedure/function to procedure variable

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

Error: Can’t assign values to an address

Не допускается присваивать значение адресу переменной, константы, процедуры или функции. Вы можете попытаться выполнить компиляцию с опцией -So, если идентификатор является процедурной переменной.

Error: Can’t assign values to const variable

Не допускается присваивать значение переменной, которая объявлена как константа. Обычно параметр объявляется как константа. Чтобы иметь возможность изменять значение, передавайте параметр по значению или параметр по ссылке (используя var).

Error: Array type required

Если вы хотите получить доступ к переменной, используя индекс ‘[<x>]‘, то тип должен быть массивом. В режиме FPC указатель также допускается.

Error: interface type expected, but got  «»Сообщение»

Компилятор ожидал для нумератора имя типа интерфейса, но получил нечто другое. Следующий код приведёт к этой ошибке:

Type
TMyStream = Class(TStream,Integer)

Hint: Mixing signed expressions and longwords gives a 64bit result

Если вы делите (или вычисляете модуль) выражения со знаком с типом longword (или наоборот), или если вы имеете переполнение и/или включена проверка диапазона и используется арифметическое выражение (+, -, *, div, mod), в котором оба числа со знаком и появляется longwords, то всё это вычисляется как 64-битная арифметическая операция, которая медленнее, чем обычная 32-битная. Вы можете избежать этого при помощи преобразования типа одного из операндов в подходящий для результата и другого операнда.

Warning: Mixing signed expressions and cardinals here may cause a range check error

Если вы используете бинарный оператор (and, or, xor) и один из операндов — это longword, в то время как другой – это выражение со знаком, то, если проверка диапазона включена, вы можете получить ошибку проверки диапазона, потому что в этом случае оба операнда преобразуются в longword перед выполнением операции. Вы можете избежать этого при помощи преобразования типа одного из операндов в подходящий для результата и другого операнда.

Error: Typecast has different size (Сообщ1 -> Сообщ2) in assignment

Преобразование типа при отличающихся размерах не допускается, когда переменная используется в присваивании.

Error: enums with assignments can’t be used as array index

Если вы объявили перечисляемый тип, который имеет С-подобные присваивания, как показано ниже:

Tenum = (a,b,e:=5);

Вы не можете использовать его как индекс массива.

Error: Class or Object types «Сообщ1» and «Сообщ2» are not related

Выборка из одного класса в другой, в то время как класс/объект не являются связанными. Вероятно, это ошибка ввода.

Warning: Class types «arg1» and «arg2» are not related

Выборка из одного класса в другой, в то время как класс/объект не являются связанными. Вероятно, это ошибка ввода.

Error: Class or interface type expected, but got «arg1»

Компилятор ожидал имя класса или интерфейса, но получил другой тип или идентификатор.

Error: Type «Сообщение» is not completely defined

Эта ошибка случается, если тип не завершён, например, тип pointer, который указывает на неопределённый тип.

Warning: String literal has more characters than short string length

Размер строки-константы, которая связана с shortstring, больше максимального размера для shortstring (255 символов).

Warning: Comparison is always false due to range of values

Это сравнение беззнакового значения и константы со знаком, которая меньше нуля. По причине преобразования оператор всегда будет возвращать FALSE. Выполните явное преобразование константы в правильный диапазон, чтобы избежать этой проблемы.

Warning: Comparison is always true due to range of values

Это сравнение беззнакового значения и константы со знаком, которая меньше нуля. По причине преобразования оператор всегда будет возвращать TRUE. Выполните явное преобразование константы в правильный диапазон, чтобы избежать этой проблемы.

Warning: Constructing a class «Сообщ1» with abstract method «Сообщ2»

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

Hint: The left operand of the IN operator should be byte sized

Левый операнд в операторе IN не является порядковым или перечислением, который помещается в 8 бит. Это может привести к ошибке проверки диапазона. На текущий момент оператор in поддерживает левый оператор только в пределах байта. В случае с перечислениями, размер элемента перечисления может изменяться опциями {$PACKENUM} или {$Zn}.

Warning: Type size mismatch, possible loss of data / range check error

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

Hint: Type size mismatch, possible loss of data / range check error

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

Error: The address of an abstract method can’t be taken

Не найдено тело абстрактного метода, поэтому адрес абстрактного метода не может быть назначен.

Error: Assignments to formal parameters and open arrays are not possible

Вы пытаетесь присвоить значение формальному параметру (нетипизированный var, const или out), или открытому массиву.

Error: Constant Expression expected

Компилятор ожидал выражение-константу, но получил выражение- переменную.

Error: Operation «Сообщ1» not supported for types «Сообщ2» and «Сообщ3»

Операция не допускается для указанных типов.

Error: Illegal type conversion: «Сообщ1» to «Сообщ2»

Когда выполняете преобразование типов, вы должны понимать, что размеры переменной и типа назначения одинаковы.

Hint: Conversion between ordinals and pointers is not portable

Если вы преобразуете тип pointer в longint (или наоборот), то код не будет компилироваться на машинах, использующих 64-разрядную адресацию.

Warning: Conversion between ordinals and pointers is not portable

Если вы преобразуете тип pointer в порядковый тип с другим размером (или наоборот), то могут возникнуть проблемы. Это предупреждение помогает в поиске 32-битного специального кода, где cardinal/longint используются для преобразования указателей в порядковые типы. Решением проблемы является использование вместо этого типов ptrint/ptruint.

Error: Can’t determine which overloaded function to call

Вы вызываете перегруженную функцию с параметром, который не связан с каким-либо объявленным списком параметров, например, когда вы имеете объявленную функцию с параметрами word и longint, а затем вызываете её с параметром типа integer.

Error: Illegal counter variable

Переменная для цикла for должна быть порядкового типа. Переменные циклов не могут быть вещественными числами или строками.

Warning: Converting constant real value to double for C variable argument, add explicit typecast to prevent this.

В C значения вещественных констант по умолчанию имеют тип double. Из этих соображений, когда вы передаёте вещественную константу в функцию С в качестве параметра, компилятор FPC по умолчанию преобразует её в тип double. Если вы хотите контролировать этот процесс, добавьте для константы явное преобразование в нужный тип.

Error: Class or COM interface type expected, but got «Сообщение»

Некоторые операторы, такие как AS, применяются только для классов или COM-интерфейсов.

Error: Constant packed arrays are not yet supported

Вы не можете объявить битовый (упакованный) массив как типизированную константу.

Error: Incompatible type for arg no. Сообщ1: Got «Сообщ2» expected «(Bit)Packed Array»

Компилятор ожидает битовый (упакованный) массив как указанный параметр.

Error: Incompatible type for Сообщение no. Сообщ1: Got «Сообщ2» expected «»(not packed) Array»

Компилятор ожидает регулярный (то есть НЕ упакованный) массив как указанный параметр.

Error: Elements of packed arrays cannot be of a type which need to be initialised

Поддержка упакованных массивов, которым необходима инициализация (таких как ansistrings, или записей, содержащих ansistrings), пока не реализована.

Error: Constant packed records and objects are not yet supported

Вы не можете объявить битовый (упакованный) массив как типизированную константу в данное время.

Warning: Arithmetic «Сообщение» on untyped pointer is unportable to {$T+}, suggest typecast

Сложение/вычитание из нетипизированных указателей может работать по разному в {$T+}. Используёте преобразование типов для типизированных указателей.

Error: Can’t take address of a subroutine marked as local

Нельзя получить адрес подпрограммы, помеченной как локальная.

Error: Can’t export subroutine marked as local from a unit

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

Error: Type is not automatable: «Сообщение»

Только byte, integer, longint, smallint, currency, single, double, ansistring, widestring, tdatetime, variant, olevariant, wordbool и все интерфейсы являются automatable.

Hint: Converting the operands to «Сообщение» before doing the add could prevent overflow errors.

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

Hint: Converting the operands to «Сообщение» before doing the subtract could prevent overflow errors.

Вычитание между двумя типами может вызвать ошибку переполнения. Обычно вы конвертируете результат в больший тип. Вы должны предотвращать такие ошибки, преобразуя операнды в этот тип перед вычитанием.

Hint: Converting the operands to «Сообщение» before doing the multiply could prevent overflow errors.

Умножение между двумя типами может вызвать ошибку переполнения. Обычно вы конвертируете результат в больший тип. Вы должны предотвращать такие ошибки, преобразуя операнды в этот тип перед умножением.

Warning: Converting pointers to signed integers may result in wrong comparison results and range errors, use an unsigned

Виртуальное адресное пространство на виртуальных машинах располагается от $00000000 до $ffffffff. Многие операционные системы позволяют выделять память с адресами выше $80000000. Например, как WINDOWS, так и LINUX, допускают использование указателей в диапазоне от $0000000 до $bfffffff. Если вы преобразуете типы со знаком, это может вызвать ошибки переполнения и проверки диапазона, но также $80000000 < $7fffffff. Это может вызвать случайную ошибку в коде, подобно этому: «if p>q».

Error: Interface type Сообщение has no valid GUID

Если применяется оператор as для интерфейса или класса, то интерфейс (то есть правый операнд оператора as) должен иметь правильный GUID.

Error: Invalid selector name

Селектор Objective-C не может быть пустым, он должен быть правильным идентификатором или одинарным двоеточием, а если он содержит менее одного двоеточия, он также должен быть завершён.

Error: Expected Objective-C method, but got Сообщение

Селектор может быть создан только для методов Objective-C, не для любых других процедур/функций/методов.

Error: Expected Objective-C method or constant method name

Селектор может быть создан только для методов Objective-C, при задании имени используются строковые константы или идентификатор метода Objective-C, который является видимым из текущей области видимости.

Error: No type info available for this type

Информация о типах не генерируется для некоторых типов, таких как перечисления с пропусками в их диапазоне значений (включая перечисления, нижняя граница которых отлична от нуля).

Error: Ordinal or string expression expected

The expression must be an ordinal or string type.

Error: String expression expected

The expression must be a string type.

Warning: Converting 0 to NIL

Use NIL rather than 0 when initialising a pointer.

Error: Objective-C protocol type expected, but got ”arg1”

The compiler expected a protocol type name, but found something else.

Error: The type ”arg1” is not supported for interaction with the Objective-C runtime

Objective-C makes extensive use of run time type information (RTTI). This format is defined by the maintainers of the run time and can therefore not be adapted to all possible Object Pascal types. In particular, types that depend on reference counting by the compiler (such as ansistrings and certain kinds of interfaces) cannot be used as fields of Objective-C classes, cannot be directly passed to Objective-C methods, and cannot be encoded using objc_encode.

Error: Class or objcclass type expected, but got ”arg1”

It is only possible to create class reference types of class and objcclass

Error: Objcclass type expected

The compiler expected an objcclass type

Warning: Coerced univ parameter type in procedural variable may cause crash or memory corruption: arg1 to arg2

univ parameters are implicitly compatible with all types of the same size, also in procedural variable definitions. That means that the following code is legal, because single and longint have the same size:

{$mode macpas}

Type

  TIntProc = procedure (l: univ longint);

  procedure test(s: single);

    begin

      writeln(s);

    end;

  var

    p: TIntProc;

  begin

    p:=test;

    p(4);

  end.

This code may however crash on platforms that pass integers in registers and floating point values on the stack, because then the stack will be unbalanced. Note that this warning will not flagg all potentially dangerous situations. when test returns.

Error: Type parameters of specializations of generics cannot reference the currently specialized type

Recursive specializations of generics like Type MyType = specialize MyGeneric<MyType>; are not possible.

Error: Type parameters are not allowed on non-generic class/record/object procedure or function

Type parameters are only allowed for methods of generic classes, records or objects

Error: Generic declaration of ”arg1” differs from previous declaration

Generic declaration does not match the previous declaration

Error: Helper type expected

The compiler expected a class helper type.

Error: Record type expected

The compiler expected a record type.

Error: Derived class helper must extend a subclass of ”arg1” or the class itself

If a class helper inherits from another class helper the extended class must extend either the same class as the parent class helper or a subclass of it

Error: Derived record helper must extend ”arg1”

If a record helper inherits from another record helper it must extend the same record that the parent record helper extended.

Hi, again.

Now I have a question about Incompatible Types message. I know what it means but idk why it appears in a program I have integers ONLY. Take a look please and explain me where the number becomes Extended and why? Thanks a lot.

Code (It may have more errors):
var
 ta,l,p,i,j,d2ta,d3ta,d2l,d3l,d2f,d3f,nf,nta,nl:integer;
 f,g:text;
begin
 assign(f,’daruri.in’);
 reset(f);
 read(f,ta);
 readln(f,l);
 close(f);
if frac(ta/2)=0 then inc(d2ta)
else if frac(ta/3)=0 then inc(d3ta)
 else for i:=4 to 32000 do
   if frac(ta/i)<>0 then continue
   else break;
if frac(l/2)=0 then inc(d2l)
else if frac(l/3)=0 then inc(d3l)
 else for j:=4 to 32000 do
   if frac(l/j)<>0 then continue
   else break;
if d2ta<=d2l then if d2ta=0 then d2f:=1 else d2ta:=d2f
 else d2l:=d2f;
if d3ta<=d3l then if d3ta=0 then d3f:=1 else d3ta:=d3f
 else d3l:=d3f;
if i<=j then i:=nf
 else j:=nf;
p:=d2f*d3f*nf;
nta:=ta/p;
nl:=l/p;
 assign(g,’daruri.out’);
 rewrite(g);
 writeln(g,p);
 write(g,nta);
 write(g,nl);
 close(g);
end.

Error message:
s(27,8)Error: Incompatible types: got «Extended» expected «SmallInt»
s(28,6)Error: Incompatible types: got «Extended» expected «SmallInt»
s(41)Fatal: There were 2 errors compiling module, stopping
s(0)Fatal: Compilation aborted
                                                                      Thanks again, nice community. HaVe A nIcE dAy :) :) :) :)

🏠 ⇢ Вопросы и ответы
⇢ Программирование
⇢ Другие языки и технологии

АС

Анастасия Ситникова

кто шарит в программе паскаль???

можете подсказать где тут ошибка?? ? в строке (10:25) он выдаёт Error: incopatible types: got «Real» expected «SmallInt»

  • программа
  • паскаль

В2

Волчара 2010

Попробуй объявить y как real, а не integer.

Елена Коннова

Елена Коннова

за деньги всё сделаем!

Николай

Николай

Y : integer!
у тебя функция возвращает real, а y — integer

Holod

Holod

Имя программы не совпадает с названием файла.

Похожие вопросы

Для того кто шарит в Паскале

Как зделать программу в паскале?

Нужна программа паскаль

программа на паскале

Программа на паскале.

Программа на паскаль!!

Программа на паскаль

кто шарит в ПАСКАЛЕ помогите

Программы на паскаль

Программа на паскале

avatar
h18

05 Oct 2014 в 18:28

h18

Пользователь

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

Сообщения: 122

Рейтинг: 70

h18

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

Сообщения: 122

Рейтинг: 70

Не могу разобраться с одним заданием, если разбираетесь в программке — кому не лень, помогите, пожалуйста.
Задание звучит: написать соответственно прогу, которая определяет кол-во твоих денег. Ты положил в банк N денег, под P процентов в год, на G лет. Ну и программка определяет кол-во твоих денег через G лет.
Заранее, кто решился отозваться —  большое спасибо. Можно в личку, можно прямо тут.

Sexy.Bamboe

Пользователь

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

Сообщения: 391

Рейтинг: 240

Sexy.Bamboe

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

Сообщения: 391

Рейтинг: 240

Я тебе просто формулу напишу, так как паскаль не знаю, а синтаксис лень гуглить:
N*(1+P/100.0)^G

h18

Пользователь

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

Сообщения: 122

Рейтинг: 70

h18

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

Сообщения: 122

Рейтинг: 70

Sexy.Bamboe сказал(а):↑

Я тебе просто формулу напишу, так как паскаль не знаю, а синтаксис лень гуглить:
N*(1+P/100.0)^G

Нажмите, чтобы раскрыть…

я формулу знал эту, подставлял как мог ее, не получилось, вот поэтому и решил написать, дескать кто-то сможет написать без ошибок. Если точнее, то он выдает got «extended» expected «smallint». ;D

Sexy.Bamboe

Пользователь

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

Сообщения: 391

Рейтинг: 240

Sexy.Bamboe

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

Сообщения: 391

Рейтинг: 240

h18 сказал(а):↑

я формулу знал эту, подставлял как мог ее, не получилось, вот поэтому и решил написать, дескать кто-то сможет написать без ошибок. Если точнее, то он выдает got «extended» expected «smallint». ;D

Нажмите, чтобы раскрыть…

лучше код скинь. где-то проблемы с типами

Селестия

Пользователь

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

Сообщения: 2079

Рейтинг: 3958

Селестия

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

Сообщения: 2079

Рейтинг: 3958

var n,p,g,x,y
readln(n,p,g);
x:=N/100*P*G;
y:=N+x;
writeln(y);
end.
Так??

Dockerok

Пользователь

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

Сообщения: 45

Рейтинг: 7

Dockerok

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

Сообщения: 45

Рейтинг: 7

Скинь код, а то последний раз в паскале работал лет 8 назад

Топ Булочка

Пользователь

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

Сообщения: 290

Рейтинг: 179

Топ Булочка

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

Сообщения: 290

Рейтинг: 179

FromTheBottom

Пользователь

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

Сообщения: 1384

Рейтинг: 965

FromTheBottom

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

Сообщения: 1384

Рейтинг: 965

Поменяй целочисленные переменные на вещественные. У тебя в этом ошибка

h18

Пользователь

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

Сообщения: 122

Рейтинг: 70

h18

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

Сообщения: 122

Рейтинг: 70

program ceturtaisuzd;
uses crt;
var a,b,n,p,g:integer;
       begin
       clrscr;
       writeln(‘Cik ir tavs sakuma kapitals?’);
       readln(n);
       writeln(‘Uz cik gadiem gribi atstat naudu?’);
       readln(g);
       writeln(‘Uz kadu procentu likmi gribi atstat?’);
       readln(p);
       a:=0;
       a:=n*(1+p/100);
       readln(a);
       writeln(‘Sanac ka tavs kapitals bus’ ,a);
       readln;
       end.

Dockerok

Пользователь

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

Сообщения: 45

Рейтинг: 7

Dockerok

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

Сообщения: 45

Рейтинг: 7

AngryShutty сказал(а):↑

var n,p,g,x,y
readln(n,p,g);
x:=N/100*P*G;
y:=N+x;
writeln(y);
end.
Так??

Нажмите, чтобы раскрыть…

явно не так, нет объявления типов данных

h18

Пользователь

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

Сообщения: 122

Рейтинг: 70

h18

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

Сообщения: 122

Рейтинг: 70

Sexy.Bamboe сказал(а):↑

лучше код скинь. где-то проблемы с типами

Нажмите, чтобы раскрыть…

В скобках там вопросы на другом языке, они значения не имеют)

Dockerok

Пользователь

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

Сообщения: 45

Рейтинг: 7

Dockerok

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

Сообщения: 45

Рейтинг: 7

h18 сказал(а):↑

program ceturtaisuzd;
uses crt;
var a,b,n,p,g:integer;
       begin
       clrscr;
       writeln(‘Cik ir tavs sakuma kapitals?’);
       readln(n);
       writeln(‘Uz cik gadiem gribi atstat naudu?’);
       readln(g);
       writeln(‘Uz kadu procentu likmi gribi atstat?’);
       readln(p);
       a:=0;
       a:=n*(1+p/100);
       readln(a);
       writeln(‘Sanac ka tavs kapitals bus’ ,a);
       readln;
       end.

Нажмите, чтобы раскрыть…

лол
у тебя же а — целочисленный, а ты присваеваешь дробь…
сделай a:real

да и вообще у тебя програ не правилоно написанная

TypickalRak

Пользователь

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

Сообщения: 113

Рейтинг: 64

TypickalRak

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

Сообщения: 113

Рейтинг: 64

h18 сказал(а):↑

program ceturtaisuzd;
uses crt;
var a,b,n,p,g:integer(целый тип данных); extended(дробный тип данных, он тебе нужен)
       begin
       clrscr;
       writeln(‘Cik ir tavs sakuma kapitals?’);
       readln(n);
       writeln(‘Uz cik gadiem gribi atstat naudu?’);
       readln(g);
       writeln(‘Uz kadu procentu likmi gribi atstat?’);
       readln(p);
       a:=0;
       a:=n*(1+p/100);
       readln(a);
       writeln(‘Sanac ka tavs kapitals bus’ ,a);
       readln;
       end.

Нажмите, чтобы раскрыть…

В паскале операция деления через / работает только для вещественных типов данных: extended, real… (они представляют числа в виде десятичных дробей)

TYZzzz

Пользователь

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

Сообщения: 941

Рейтинг: 401

TYZzzz

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

Сообщения: 941

Рейтинг: 401

h18 сказал(а):↑

program ceturtaisuzd;
uses crt;
var a,b,n,p,g:integer;
       begin
       clrscr;
       writeln(‘Cik ir tavs sakuma kapitals?’);
       readln(n);
       writeln(‘Uz cik gadiem gribi atstat naudu?’);
       readln(g);
       writeln(‘Uz kadu procentu likmi gribi atstat?’);
       readln(p);
       a:=0;
       a:=n*(1+p/100);
       readln(a);
       writeln(‘Sanac ka tavs kapitals bus’ ,a);
       readln;
       end.

Нажмите, чтобы раскрыть…

Последний readln(» «) поставь. И с clscr не всегда работает.

Sexy.Bamboe

Пользователь

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

Сообщения: 391

Рейтинг: 240

Sexy.Bamboe

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

Сообщения: 391

Рейтинг: 240

Да, короче для переменной, которая сумму всю хранить будет нужен вещественный тип. Для переменной которую на 100 делишь тоже или дели на 100.0

Dockerok

Пользователь

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

Сообщения: 45

Рейтинг: 7

Dockerok

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

Сообщения: 45

Рейтинг: 7

program ceturtaisuzd;
uses crt;
var a: real;
     count,b,n,p,g:integer;
begin
clrscr;
writeln(‘Cik ir tavs sakuma kapitals?’);
readln(n);
writeln(‘Uz cik gadiem gribi atstat naudu?’);
readln(g);
writeln(‘Uz kadu procentu likmi gribi atstat?’);
readln(p);
a:=n;
for count:=1 to g do
a:=a+(n*(1+p/100));

readln(a);
writeln(‘Sanac ka tavs kapitals bus’ ,a);
readln;
end.

в идеале как-то так должно быть

Helfer

Пользователь

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

Сообщения: 458

Рейтинг: 247

Helfer

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

Сообщения: 458

Рейтинг: 247

AngryShutty сказал(а):↑

var n,p,g,x,y
readln(n,p,g);
x:=N/100*P*G;
y:=N+x;
writeln(y);
end.
Так??

Нажмите, чтобы раскрыть…

x:=Power(N/100*P,G)
вродь возведение так делается

TYZzzz

Пользователь

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

Сообщения: 941

Рейтинг: 401

TYZzzz

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

Сообщения: 941

Рейтинг: 401

Helfer сказал(а):↑

x:=Power(N/100*P,G)
вродь возведение так делается

Нажмите, чтобы раскрыть…

Pow() вроде функция.

Helfer

Пользователь

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

Сообщения: 458

Рейтинг: 247

Helfer

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

Сообщения: 458

Рейтинг: 247

TYZzzz сказал(а):↑

Pow() вроде функция.

Нажмите, чтобы раскрыть…

Да я уже года 2 не кодил после универа) Вроде ты прав) у меня по этим языкам такая мешанина в голове: лисп, пролог, паскаль, С++… а толком то ничего и не выучил =)

noob.cfg

Пользователь

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

Сообщения: 55

Рейтинг: 64

noob.cfg

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

Сообщения: 55

Рейтинг: 64

лiл если ты элементарное не знаеш зачем ты учишься на программиста -_-
меняй вуз иди на дворника

Dockerok

Пользователь

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

Сообщения: 45

Рейтинг: 7

Dockerok

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

Сообщения: 45

Рейтинг: 7

noob.cfg сказал(а):↑

лiл если ты элементарное не знаеш зачем ты учишься на программиста -_-
меняй вуз иди на дворника

Нажмите, чтобы раскрыть…

он не обязательно учится на программиста. На специальности экономика-кибернетика тоже есть паскаль.

Hy6o_Hy6

Пользователь

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

Сообщения: 3531

Рейтинг: 2188

Hy6o_Hy6

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

Сообщения: 3531

Рейтинг: 2188

h18 сказал(а):↑

Не могу разобраться с одним заданием, если разбираетесь в программке — кому не лень, помогите, пожалуйста.
Задание звучит: написать соответственно прогу, которая определяет кол-во твоих денег. Ты положил в банк N денег, под P процентов в год, на G лет. Ну и программка определяет кол-во твоих денег через G лет.
Заранее, кто решился отозваться —  большое спасибо. Можно в личку, можно прямо тут.

Нажмите, чтобы раскрыть…

если ты это не можешь сам решить, то пора удалять доту, мозочки то с орешек.

Dahz

Пользователь

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

Сообщения: 1062

Рейтинг: 423

Dahz

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

Сообщения: 1062

Рейтинг: 423

noob.cfg сказал(а):↑

лiл если ты элементарное не знаеш зачем ты учишься на программиста -_-
меняй вуз иди на дворника

Нажмите, чтобы раскрыть…

Попробуй потоньше.

h18

Пользователь

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

Сообщения: 122

Рейтинг: 70

h18

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

Сообщения: 122

Рейтинг: 70

Dockerok сказал(а):↑

program ceturtaisuzd;
uses crt;
var a: real;
     count,b,n,p,g:integer;
begin
clrscr;
writeln(‘Cik ir tavs sakuma kapitals?’);
readln(n);
writeln(‘Uz cik gadiem gribi atstat naudu?’);
readln(g);
writeln(‘Uz kadu procentu likmi gribi atstat?’);
readln(p);
a:=n;
for count:=1 to g do
a:=a+(n*(1+p/100));

readln(a);
writeln(‘Sanac ka tavs kapitals bus’ ,a);
readln;
end.

в идеале как-то так должно быть

Нажмите, чтобы раскрыть…

Почти верно, но после того, как вводишь n,p,g в программу он не хочет считать дальше. а так compile работает все ок ;)

Sexy.Bamboe

Пользователь

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

Сообщения: 391

Рейтинг: 240

Sexy.Bamboe

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

Сообщения: 391

Рейтинг: 240

noob.cfg сказал(а):↑

лiл если ты элементарное не знаеш зачем ты учишься на программиста -_-
меняй вуз иди на дворника

Нажмите, чтобы раскрыть…

школьное же задание, лол, сам иди на дворника)

Тема закрыта

  • Заголовок

    Ответов Просмотров

    Последнее сообщение

  • ДомашнийМальчик

    Сообщений: 14
    09 Feb 2023 в 16:47

    Сообщений:14

    Просмотров:20

    ДомашнийМальчик

  • Tromboni

    Сообщений: 9
    09 Feb 2023 в 16:37

    Сообщений:9

    Просмотров:17

    Mandelli

  • Kujivunia

    Сообщений: 5
    09 Feb 2023 в 16:35

    Сообщений:5

    Просмотров:12

    Kujivunia

  • Adler34

    Сообщений: 10
    09 Feb 2023 в 16:10

    Сообщений:10

    Просмотров:25

    KeltZer

  • Никита Тимченко

    Сообщений: 7
    09 Feb 2023 в 16:10

    Сообщений:7

    Просмотров:19

    Mash1nka

Понравилась статья? Поделить с друзьями:
  • Error incompatible types got double expected longint
  • Error incompatible types got constant string expected char
  • Error incompatible types got boolean expected real
  • Error incompatible types got boolean expected longint
  • Error incompatible types got boolean expected int64