С Новым годом! Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
29 / 23 / 7
Регистрация: 28.07.2016
Сообщений: 866
1

Error 3: "Unknown identifier". Почему?

15.01.2022, 02:01. Показов 1406. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Набрал я программу "Виртуальное пианино" в Turbo Pascal-е. А оно пишет:

"Error 3: Unknown identifier."
Почему так?

P.S.: выложить код?

Эта ошибка появляется на строке, там где:

Pascal
1
get_mouse_status(button, x, y);
Добавлено через 11 минут
Может стоит выложить программу? не знаю
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.01.2022, 02:01
Ответы с готовыми решениями:

Компилятор выдает ошибку "error 3 unknown identifier"
уважаемые форумчане, не могу понять почему компилятор выдает ошибку в строке 6 error 3 unknown...

Unknown identifier
Помогите исправить прогу, выдаёт ошибку "unknown identifier" uses crt; type...

Ошибка Unknown identifier
Мне при компиляции выбивает ошибку. Вот скрин. Что делать?

Error3: unknown identifier
program Project1; uses SysUtils; const y=20; var a:arrayof Integer; i,j,x,Found:Integer;...

10
5087 / 2658 / 2350
Регистрация: 10.12.2014
Сообщений: 10,052
15.01.2022, 09:26 2
Ну, судя по приведённому коду, у меня всего пять основных предположений:
— может вы не описали процедуру get_mouse_status
— может вы не присоединили модуль, в котором описана get_mouse_status
— может вы не описали переменную button
— может вы не описали переменную x
— может вы не описали переменную y
Плюс ещё возможные комбинации…
2
29 / 23 / 7
Регистрация: 28.07.2016
Сообщений: 866
16.01.2022, 00:49  [ТС] 3
вот код с Pastebin-а по ссылке (Ссылка на сторонний ресурс удалена):
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
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
program virtualpiano;
uses crt, speaker, dos, mouse, graph, graphs;
const
   masks : array[0..1,0..15] of word = (
      ($E1FF, $EDFF, $EDFF, $EDFF,
       $EDFF, $EC00, $EDB6, $EDB6,
       $0DB6, $6FFE, $6FFE, $6FFE,
       $7FFE, $7FFE, $7FFE, $0000),
       ($1E00, $1200, $1200, $1200,
       $1200, $13FF, $1249, $1249,
       $F249, $9001, $9001, $9001,
       $8001, $8001, $8001, $FFFF));
 
const
   width = 18;
   x1 = 35 * width;
   y1 = 160;
   black_key_low = 100;
   half_black_width = width div 3;
   quit_x = 500;
   quit_y = 400;
var
   frequency : array[0..4, 0..11] of real;
   white_freq : array[0..4, 0..6] of real;
   black_freq : array[0..4, 0..6] of real;
   mouse_OK : boolean;
   x, y : word;
   button : byte;
 
procedure init_frequency;
const
   white_map : array[0..6] of word = (0, 2, 4, 5, 7, 9, 11);
   black_map : array[0..6] of word = (0, 1, 3, 0, 6, 8, 10);
var
   x, semitone_ratio : real;
   i, j : word;
begin
   semitone_ratio := exp(ln(2.0) / 12.0);
   frequency[1, 9] := 440.0;
   x := 440.0;
   for j := 8 downto 0 do
   begin
      x := x / semitone_ratio;
      frequency[1, j] := x;
   end;
   x := 440.0;
   for j := 10 to 11 do
   begin
      x := x * semitone_ratio;
      frequency[1, j] := x;
   end;
   for j := 0 to 11 do
   begin
      frequency[0, j] := 0.5 * frequency[1, j];
      frequency[2, j] := 2.0 * frequency[1, j];
      frequency[3, j] := 4.0 * frequency[1, j];
      frequency[4, j] := 8.0 * frequency[1, j];
   end;
   for i := 0 to 4 do
   begin
      for j := 0 to 6 do
      begin
         white_freq[i, j] := frequency[i, white_map[j]];
         black_freq[i, j] := frequency[i, black_map[j]];
      end;
   end;
end;
procedure draw_keyboard;
const
   black : array[1..5] of integer = (-3, 16, 52, 70, 87);
var
   pp, z, p : integer;
begin
   x := 0;
   y := 10;
   for pp := 1 to 5 do
   begin
      for p := 1 to 8 do
      begin
         setcolor(11);
         for z := y to y + 150 do
             line(x, z, x + 15, z);
         putpixel(x, y + 150, 0);
         putpixel(x + 15, y + 150, 0);
         inc(x, 18);
      end;
      dec(x, 131);
      for p := 1 to 5 do
      begin
         setcolor(8);
         for z := y to y + 80 do
             line(x + black[p], z, x + black[p] + 11, z);
         setcolor(0);
         rectangle(x + black[p] + 1, y, x + black[p] + 12, y + 80);
         setcolor(7);
         for z := y + 77 to y + 79 do
             line(x + black[p] + 2, z, x + black[p] + 11, z);
      end;
      inc(x, 114);
   end;
   rectangle(quit_x, quit_y, 639, 479);
   outtextxy(quit_x + 40, quit_y + 35, 'Quit');
end;
 
procedure poll;
begin
   repeat
      get_mouse_status(button, x, y);
      if button and $01 <> 0 then
         exit
      else
         no_sound;
   until false;
end;
 
procedure play;
var
   key, octave : word;
   z, w : integer;
begin
   key := x div width;
   octave := key div 7;
   z := x mod (7 * width);
   w := round(z / width);
   if (y <= black_key_low) and
      (abs(width * w - z) <= half_black_width) and
      (w in [1, 2, 4..6]) then
         sound(black_freq[octave, w])
   else
      sound(white_freq[octave, key mod 7]);
   repeat
      get_mouse_status(button, x, y);
   until button and $01 = $00;
   no_sound;
end;
 
begin
   init_frequency;
   reset_mouse(mouse_OK, button);
   if not mouse_OK then
      halt;
   open_graph;
   reset_mouse(mouse_OK, button);
   set_graph_cursor_shape(7, 0, @masks);
   show_cursor;
   mouse_gotoXY(320, 300);
   draw_keyboard;
   repeat
      poll;
      if (x = 0) or (y = 0) then
      begin
         no_sound;
         poll;
      end;
      if (x <= x1) and (y <= y1) then
         play
      else
         if (x >= quit_x) and (y >= quit_y) then
           break;
      no_sound;
   until false;
   close_graph;
end.
Добавлено через 3 часа 24 минуты
Ну раз уж выложили код (напрямую), то Просьба (большая просьба) не тырить код!

Потому что всё-таки я! его набирал уважайте мой труд, хорошо??

Добавлено через 1 час 14 минут
А ! Тут получается, что в программе 2 таких строчки.
Так вот оно выдаёт мою Ошибку там, где строка №108!
0
Модератор
10067 / 5408 / 3354
Регистрация: 17.08.2012
Сообщений: 16,555
16.01.2022, 07:08 4

Не по теме:

Я сразу не понял, что это за Pastebin такой. Получается, Вы вручную откуда-то перепечатали этот код и выложили его на файлопомойку?

Ссылка на файлопомойку удалена. Правило форума:

4.11. Картинки и любые другие файлы загружайте на форум, во избежание их удаления или потери на сторонних ресурсах. По этой же причине коды программ также должны находиться на форуме.
Ссылка на правила есть на любой странице форума.


Не волнуйтесь. Этот код конца четвертичного периода Кайнозойской эры уже не нужен вообще никому, в том числе, и Вам. На кой чёрт его тырить-то? Даже если кто-либо сойдёт с ума и решит украсть этот код, то какая Вам разница, откуда украдут НЕ ВАШ код: с киберфорума или с пастбайна?

В комплект поставки Borland / Turbo Pascal в разные версии входили следующие модули: Crt, Dos, Graph, Overlay, Printer, Strings, System, WinAPI, WinCrt, WinDOS, WinPrn, WinProcs, WinTypes, и, после версии Turbo Pascal 3.0, ещё и Graph3 и Turbo3 для совместимости со старыми версиями. Были и ещё какие-то модули, но модулей speaker, mouse и graphs точно не было. Иными словами, эти модули создавались не ныне почившей в бозе фирмой Borland, а сторонними разработчиками.

Можно, конечно, откуда-то взять файлы speaker.tpu, mouse.tpu и graphs.tpu и положить их в подкаталог units Вашего Turbo Pascal, после чего молиться, что эти модули подойдут, или создать эти модули самому, с нужным для Вашей программы функционалом. Но, скорее всего, это никак не поможет: современные операционки не очень-то позволяют работать с системным динамиком (PC Speaker) напрямую. Да и этот самый PC Speaker на 64-разрядных материнских платах вообще не предусмотрен.

Создавать программы в Turbo Pascal с последующим запуском их в эмуляторах наподобие DOSBox - занятие изначально бессмысленное. Ну, учебные программы - это ещё куда ни шло, поскольку оно дело подневольное, и то, на кой ляд это надо, непонятно. Зачем вообще писать программу для операционной системы, которая давным-давно не используется, и запускать эту самую программу через танцы с бубном на современной операционной системе? Где обычная человеческая логика? Умерла, что ли? Или у Вас на столе компьютер из прошлого века с MS-DOS на борту?

Удастся ли уговорить эту программу издать хоть какой-нибудь звук на современном компьютере - ещё тот вопрос. Вот на антикварном - это (почти что) запросто.

Рекомендую Вам вместо Turbo Pascal выбрать другой диалект паскаля, не столь архаичный.
2
5087 / 2658 / 2350
Регистрация: 10.12.2014
Сообщений: 10,052
16.01.2022, 09:56 5
Я очень далёк от музыки. (Медведь не просто наступил, а долго топтался… ;–)
Но написать на PascalABC.NET, как говориться „с нуля“, программу на одну октаву заняло целых 15 минут!
И я не боюсь, что его „стырят“.
Тырьте себе на здоровье!
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
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
uses GraphABC;
 
const duration = 500;
 
type
  tKeyPiano = record
    freguency : Integer;
    coords : array of Point;
    black : Boolean;
    
    constructor (f : Integer; clr : Boolean; c : array of Point);
    begin
      freguency := f;
      coords := c;
      black := clr;
    end;
    
    procedure draw;
    begin
      pen.Color := clBlack;
      brush.Color := black ? clBlack : clWhite;
      Rectangle(coords[0].x, coords[0].y, coords[1].x, coords[1].y);
    end;
    
    procedure sound := System.Console.Beep(freguency, duration);
    
    function down(x, y : Integer) : Boolean;
    begin
      Result := x.InRange(coords[0].X, coords[1].X) and y.InRange(coords[0].Y, coords[1].Y);
      if Result then sound;
    end;
  end;
  
var
  bKeysPiano, wKeysPiano : array of tKeyPiano;
  
procedure Init;
begin
  Window.Clear(rgb(92,92,100));
 
  SetLength(wKeysPiano, 7);
  wKeysPiano[0] := New tKeyPiano(261, false, arr(pnt( 10, 10), pnt( 60, 300)));
  wKeysPiano[1] := New tKeyPiano(293, false, arr(pnt( 60, 10), pnt(110, 300)));
  wKeysPiano[2] := New tKeyPiano(329, false, arr(pnt(110, 10), pnt(160, 300)));
  wKeysPiano[3] := New tKeyPiano(349, false, arr(pnt(160, 10), pnt(210, 300)));
  wKeysPiano[4] := New tKeyPiano(392, false, arr(pnt(210, 10), pnt(260, 300)));
  wKeysPiano[5] := New tKeyPiano(440, false, arr(pnt(260, 10), pnt(310, 300)));
  wKeysPiano[6] := New tKeyPiano(494, false, arr(pnt(310, 10), pnt(360, 300)));
  
  SetLength(bKeysPiano, 5);
  bKeysPiano[0] := New tKeyPiano(277, true, arr(pnt( 40, 10), pnt( 80, 200)));
  bKeysPiano[1] := New tKeyPiano(311, true, arr(pnt( 90, 10), pnt(130, 200)));
  bKeysPiano[2] := New tKeyPiano(370, true, arr(pnt(190, 10), pnt(230, 200)));
  bKeysPiano[3] := New tKeyPiano(415, true, arr(pnt(240, 10), pnt(280, 200)));
  bKeysPiano[4] := New tKeyPiano(466, true, arr(pnt(290, 10), pnt(330, 200)));
end;
 
procedure Draw;
begin
  foreach var key in wKeysPiano do key.draw;
  foreach var key in bKeysPiano do key.draw;
end;
 
procedure downMouse(x, y, mb : Integer);
begin
  foreach var key in bKeysPiano do
    if key.Down(x, y) then Exit;
  foreach var key in wKeysPiano do
    if key.Down(x, y) then Exit;
end;
 
begin
  Init;
  Draw;
  OnMouseDown := downMouse;
end.
0
29 / 23 / 7
Регистрация: 28.07.2016
Сообщений: 866
16.01.2022, 18:20  [ТС] 6
Так а почему старая программа не работает? Где ответ?
0
5087 / 2658 / 2350
Регистрация: 10.12.2014
Сообщений: 10,052
16.01.2022, 19:54 7
Вот здесь, вестимо: https://www.cyberforum.ru/post16002188.html
0
3048 / 1668 / 656
Регистрация: 19.03.2019
Сообщений: 5,373
17.01.2022, 10:32 8
Цитата Сообщение от Yakunin_Yura Посмотреть сообщение
Так а почему старая программа не работает
не "не работает", а - "НЕ КОМПИЛИРУЕТСЯ". Это очень разные вещи.

тебе уже выше ответил Cyborg Drone. Развёрнуто. Если лень читать много букв, то я отвечу короче.
Нужных файлов у тебя не хватает!

вот тут
Цитата Сообщение от Yakunin_Yura Посмотреть сообщение
Pascal
2
uses crt, speaker, dos, mouse, graph, graphs;
в программе подключаются дополнительные модули (библиотеки).
И, если crt, dos, graph - это стандартные,
то speaker, mouse, graphs - не стандартные.
положи в каталог рядом со своим <vpiano>.PAS файлы speaker.pas, mouse.pas, graphs.pas

впрочем, зачем тебе этот древний копролит понадобился - непонятно.

Добавлено через 20 минут
Цитата Сообщение от Yakunin_Yura Посмотреть сообщение
Ну раз уж выложили код (напрямую), то Просьба (большая просьба) не тырить код!
код, который ты взял из интернета?!
Точнее из книжки С.А.Немнюгин - "Turbo Pascal"

например, вот https://kph.ffs.npu.edu.ua/!e-... 60137.html

вот PDF полностью книжки С.А.Немнюгин - "Turbo Pascal" СПб: Издательство "Питер", 2000
там на странице 184 приведён код модуля MOUSE.PAS
на странице 202 - приведён код модуля GRAPHS.PAS
на странице 336 - листинг модуля SPEAKER.PAS

ну и сам код виртуального пианино на странице 337

разбирайся, если тебе это зачем то нужно.
1
Модератор
10067 / 5408 / 3354
Регистрация: 17.08.2012
Сообщений: 16,555
17.01.2022, 13:26 9
Yakunin_Yura, и ещё, на всякий случай. Достаточно сложные программы пишутся с учётом диалекта языка. Каждый диалект языка имеет свои особенности. Если компилировать программу, написанную с учётом одного диалекта, вовсе не обязательно, что программа скомпилируется в другом диалекте. Так что, если Вы компилитуете "Вашу" программу не в Turbo Pascal, то для того, чтобы хотя бы скомпилировать программу без ошибок, не говоря уже о том, чтобы заставить её работать правильно, Вам потребуются долгое камлание.
0
29 / 23 / 7
Регистрация: 28.07.2016
Сообщений: 866
18.01.2022, 18:46  [ТС] 10
я не печатал а сам набирал с книжки - бумажной книжки.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7797 / 4620 / 2831
Регистрация: 22.11.2013
Сообщений: 13,117
Записей в блоге: 1
18.01.2022, 19:29 11
Цитата Сообщение от Yakunin_Yura Посмотреть сообщение
не печатал а сам набирал с книжки
А в чем разница?
Именно это и называется "перепечатал".
0
18.01.2022, 19:29
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.01.2022, 19:29
Помогаю со студенческими работами здесь

Ошибка в коде unknown identifier
Пишет ошибку в коде unknown identifier и показывает строчку m: martix; В чем ошибка? program...

Исправьте ошибку Unknown identifier
const nmax=100; type mas=array of integer; procedure max(a:mas;n:integer;var mx:integer); var...

Turbo Vision и ошибка 'Unknown identifier'
Недавно я начал изучать Turbo Vision. Дошел до StatusLine, пишу код: uses App, Objects, Drivers,...

При описании функции по выделению N-го слова выдаётся ошибка "Unknown identifier"
При описании функции по выделению N-го слова выдаётся ошибка &quot;Unknown identifier&quot; там, где слово...

При использовании функции log (x) при компиляции выводится ошибка "unknown identifier"
Добрый день, при использовании функции log(x) при компиляции выводится ошибка &quot;unknown...

Ошибка: syntax error identifier expected
Program UIS; Uses CRT; Type TSotr = Record Fam: String; Pol:...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Как программировать под HCL Notes и создавать свои продукты на ее основе
InfoMaster 11.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой мощную платформу для разработки корпоративных приложений, которая сочетает в себе функции электронной почты, календаря,. . .
Как работать с SVN (Subversion)
InfoMaster 11.01.2025
Введение Система контроля версий является неотъемлемой частью современного процесса разработки программного обеспечения. Она обеспечивает управление изменениями в коде, позволяет отслеживать. . .
Использование GraphQL в JavaScript
InfoMaster 11.01.2025
Введение в GraphQL и его преимущества В современной разработке веб-приложений эффективный обмен данными между клиентом и сервером играет ключевую роль. GraphQL представляет собой язык запросов и. . .
Администрирован­­­­ие Git, продвинутые техники работы с Git
InfoMaster 11.01.2025
Основы управления репозиторием Эффективное управление Git-репозиторием требует глубокого понимания механизмов контроля доступа и инструментов администрирования. Рассмотрим ключевые аспекты. . .
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru