Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
114 / 22 / 14
Регистрация: 13.04.2012
Сообщений: 421
1

Встречено 'i', а ожидалось ';'

06.03.2019, 23:22. Просмотров 3299. Ответов 45
Метки нет (Все метки)


во всех строках типа
Pascal
1
writeln('введите координаты X Y Z 'i'й точки:');
не хочет добавлять цифру "i", выдавая ошибку (Встречено 'i', а ожидалось ';')....

вот например 2 примера одной программы:

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
program structure;
 type point=record
  x,y,z: integer;
  r,g,b: integer;
 end;
var
  n: array[1..10] of point;
  i,t:integer;
begin
  writeln ('введите кол-во точек от 1 до 10:' );
  readln(t);
  for i:=1 to t do with n[i] do
 begin
    writeln('введите координаты X Y Z 'i'й точки:');
    read(x,y,z);
 end;
   for i:=1 to t do with n[i] do
    begin
      writeln('введите цвета R G B 'i'й точки:');
      read(r,g,b); 
    end;
writeln('|точка| координаты |   цвет    |');
for i:=1 to t do
Writeln('|  i  |x='x[i]' y='y[i]' z='z[i]' |r='r[i]' g='g[i]' b='b[i]'|');
end.

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


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
program structure;
Const
  R=10;
 type point=record
  x,y,z: integer;
  r,g,b: integer;
    end;
  TInd=1..R;
  TElem=Integer;
  TMas=Array [TInd] Of TElem;
var
  n: array[1..10] of point;
  t:integer;
  i:TInd;
begin
  writeln ('введите кол-во точек от 1 до 10:' );
  readln(t);
  for i:=1 to t do with n[i] do
 begin
    writeln('введите координаты X Y Z 'i'й точки:');
    read(x[i],y[i],z[i]);
 end;
   for i:=1 to t do with n[i] do
    begin
      writeln('введите цвета R G B 'i'й точки:');
      read(r,g,b); 
    end;
writeln('|точка| координаты |   цвет    |');
for i:=1 to t do
Writeln('|  i  |x='x[i]' y='y[i]' z='z[i]' |r='[i]' g='g[i]' b='b[i]'|');
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.03.2019, 23:22
Ответы с готовыми решениями:

Встречено 'else', а ожидалось ';'
var a,b,c,D, x1, x2: real; begin writeln('Дано уравнение вида ax^2+bx+c=0'); writeln...

Встречено '.', а ожидалось ';'
Привет, форум. Не могу найти ошибку, поможете? function Chr(arg : integer) : char; function...

Встречено ';', а ожидалось ')'
Program2.pas(19) : Str (r:integer; buf:string); ошибка Встречено ';', а ожидалось ')'

Встречено 'else', а ожидалось ';'
program Nikita; var A, B, N, x : integer; d, F :real; Function Cos(X : integer): Real;...

__________________
Помогаю в написании курсовых работ и дипломов здесь.
45
1533 / 869 / 371
Регистрация: 07.04.2017
Сообщений: 3,494
07.03.2019, 00:13 2
С чего вы решили что так будет работать? Сложение на этапе компиляции работает только для строк и символов, и только для константных:
'abc'#13#10'def'

А если надо так вставить число в строку - есть несколько способов. Лучший (самый быстрый и красивый) это через форматную строку:
$'введите координаты X Y Z {i}-й точки:'

Если поставить перед строкой $ - в ней можно будет указывать в {} любые выражения (то есть не только переменные).

Компилятор разворачивает такую строку в следующий код:
string.Format('введите координаты X Y Z {0}-й точки:', i)

Из альтернативных методов - проставить запятый, чтоб writeln вывело 3 отдельных выражения, что медленнее чем 1 большой строкой. Так же можно проставить плюсы, чтоб сработало сложение строк (и числа), но это и ещё медленнее.
1
Singleberry
1 / 1 / 0
Регистрация: 10.12.2017
Сообщений: 107
07.03.2019, 08:22 3
Pascal
1
writeln('введите координаты X Y Z "i"й точки:');
Или

Pascal
1
writeln('введите координаты X Y Z ', chr(39), i, chr(39), 'й точки:');
1
114 / 22 / 14
Регистрация: 13.04.2012
Сообщений: 421
07.03.2019, 17:10  [ТС] 4
Цитата Сообщение от Sun Serega Посмотреть сообщение
Если поставить перед строкой $ - в ней можно будет указывать в {} любые выражения (то есть не только переменные).
а как с этой строчкой быть
Pascal
1
Writeln('$|  i  |x='{x[i]}'
пишет : Две литеральные строковые константы не могут стоять подряд,
х ведь как бы с индексом i,
0
1533 / 869 / 371
Регистрация: 07.04.2017
Сообщений: 3,494
07.03.2019, 17:12 5
А зачем вы поставили там внутри лишний ' ?
1
114 / 22 / 14
Регистрация: 13.04.2012
Сообщений: 421
07.03.2019, 17:19  [ТС] 6
Цитата Сообщение от Николянус Посмотреть сообщение
writeln('введите координаты X Y Z ', chr(39), i, chr(39), 'й точки:');
не знал что и так можно, на это гемноно по моему, и проще с доларом

Добавлено через 1 минуту
Цитата Сообщение от Sun Serega Посмотреть сообщение
А зачем вы поставили там внутри лишний ' ?
что где?
Pascal
1
Writeln('|  i  |x='x[i]' y='y[i]' z='z[i]' |r='r[i]' g='g[i]' b='b[i]'|');
вот целая строка, ничего лишнего,, как бы тут заставить его выразить итые переменные

Добавлено через 1 минуту
а всё понял мой косяк
Pascal
1
Writeln($'|  i  |x={x[i]} y={y[i]} z={z[i]} |r={r[i]} g={g[i]} b={b[i]}|');
0
1533 / 869 / 371
Регистрация: 07.04.2017
Сообщений: 3,494
07.03.2019, 17:21 7
У вас: Writeln('$| i |x='{x[i]}'
Надо : Writeln('$| i |x={x[i]}'

Если вы используете форматную строку - у вас кавычки должны быть в начале и конце.
А если ну так уж прямо надо поставить кавычку внутри строки - поставьте их 2, тогда 1 из них экранируется (её будет считать именно символом а не концом строки), а другая исчезнет:
$'Строка в которой есть символ ковычки тут >>> '' <<<'
0
114 / 22 / 14
Регистрация: 13.04.2012
Сообщений: 421
07.03.2019, 17:24  [ТС] 8
если так
Pascal
1
Writeln($'|  i  |x={x[i]} y={y[i]} z={z[i]} |r={r[i]} g={g[i]} b={b[i]}|');
оставить, то он пишет неизвестное имя Х.....
$'Строка в которой есть символ ковычки тут >>> '' <<<'
Pascal
1
($'|  i  |x='{x[i]}'
так что-ли?
0
1533 / 869 / 371
Регистрация: 07.04.2017
Сообщений: 3,494
07.03.2019, 17:27 9
Цитата Сообщение от ololo111 Посмотреть сообщение
так что-ли?
Вы точно такое же как раньше скинули.
Pascal
1
$'|  i  |x=''{x[i]}'
Но это только если вам надо чтоб в готовой строке был символ кавычки.

Цитата Сообщение от ololo111 Посмотреть сообщение
пишет неизвестное имя Х.....
Весь код скиньте.
0
114 / 22 / 14
Регистрация: 13.04.2012
Сообщений: 421
07.03.2019, 17:30  [ТС] 10
Цитата Сообщение от Sun Serega Посмотреть сообщение
Весь код скиньте.
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
program structure;
 type point=record
  x,y,z: integer;
  r,g,b: integer;
 end;
var
  n: array[1..10] of point;
  i,t:integer;
begin
  writeln ('введите кол-во точек от 1 до 10:' );
  readln(t);
  for i:=1 to t do with n[i] do
 begin
    writeln($'введите координаты X Y Z {i}й точки:');
    read(x,y,z);
 end;
   for i:=1 to t do with n[i] do
    begin
      writeln($'введите цвета R G B {i}й точки:');
      read(r,g,b); 
    end;
writeln('|точка| координаты |   цвет    |');
for i:=1 to t do
Writeln($'|  {i}  |x={x[i]} y={y[i]} z={z[i]} |r={r[i]} g={g[i]} b={b[i]}|');
end.

вот одновременно и 2й вариант таже программа но с имитацией массива,
Кликните здесь для просмотра всего текста
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
program structure;
Const
  R=10;
 type point=record
  x,y,z: integer;
  r,g,b: integer;
    end;
  TInd=1..R;
  TElem=Integer;
  TMas=Array [TInd] Of TElem;
var
  n: array[1..10] of point;
  t:integer;
  i:TInd;
begin
  writeln ('введите кол-во точек от 1 до 10:' );
  readln(t);
  for i:=1 to t do with n[i] do
 begin
    writeln($'введите координаты X Y Z {i}й точки:');
    read(x[i],y[i],z[i]);
 end;
   for i:=1 to t do with n[i] do
    begin
      writeln($'введите цвета R G B {i}й точки:');
      read(r,g,b); 
    end;
writeln('|точка| координаты |   цвет    |');
for i:=1 to t do
Writeln('|  i  |x='x[i]' y='y[i]' z='z[i]' |r='[i]' g='g[i]' b='b[i]'|');
end.
0
1533 / 869 / 371
Регистрация: 07.04.2017
Сообщений: 3,494
07.03.2019, 17:32 11
Ну так правильно, нет там X. Есть только n[i].x .
0
114 / 22 / 14
Регистрация: 13.04.2012
Сообщений: 421
07.03.2019, 17:51  [ТС] 12
Цитата Сообщение от Sun Serega Посмотреть сообщение
Ну так правильно, нет там X. Есть только n[i].x .
Pascal
1
read(x[i],y[i],z[i]);
ааааа, я так и думал

Добавлено через 51 секунду
а нет, не так, у меня вообще паскаль ошибку выдал и отрубился

Добавлено через 3 минуты
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
program structure;
Const
  R=10;
 type point=record
  x,y,z: integer;
  r,g,b: integer;
    end;
  TInd=1..R;
  TElem=Integer;
  TMas=Array [TInd] Of TElem;
var
  n: array[1..10] of point;
  t:integer;
  i:TInd;
begin
  writeln ('введите кол-во точек от 1 до 10:' );
  readln(t);
  for i:=1 to t do with n[i] do
 begin
    writeln($'введите координаты X Y Z {i}й точки:');
    read(x[i],y[i],z[i]);
 end;
   for i:=1 to t do with n[i] do
    begin
      writeln($'введите цвета R G B {i}й точки:');
      read(r[i],g[i],b[i]); 
    end;
writeln('|точка| координаты |   цвет    |');
for i:=1 to t do
Writeln($'|  {i}  |x={x[i]} y={y[i]} z={z[i]} |r={r[i]} g={g[i]} b={b[i]}|');
end.
Program2.pas(21) : Нет индексного свойства по умолчанию для типа integer
почему?

Добавлено через 3 минуты
погуглю....

Добавлено через 7 минут
вообщем переписал из integer в string,
Pascal
1
2
  x,y,z: string;
  r,g,b: string;
но всёравно пока не разобрался с предпоследней строкой
Pascal
1
Writeln($'|  {i}  |x={x[i]} y={y[i]} z={z[i]} |r={r[i]} g={g[i]} b={b[i]}|');
как не ввиду, ошибка всёравно
0
1533 / 869 / 371
Регистрация: 07.04.2017
Сообщений: 3,494
07.03.2019, 20:02 13
Цитата Сообщение от ololo111 Посмотреть сообщение
Нет индексного свойства по умолчанию для типа integer
А это в каком коде?
0
114 / 22 / 14
Регистрация: 13.04.2012
Сообщений: 421
07.03.2019, 22:55  [ТС] 14
Цитата Сообщение от Sun Serega Посмотреть сообщение
А это в каком коде?
в 1м, там же нет массива, там же у меня i как integer
0
1533 / 869 / 371
Регистрация: 07.04.2017
Сообщений: 3,494
08.03.2019, 00:39 15
Нет, там ошибку не такую выводит. Что вы изменили чтоб получить "Нет индексного свойства" - не представляю. Много чего сделать можно было.

Дайте код дающий именно эту ошибку - смогу сказать что не так.

А вообще - я вам уже сказал. x[i] надо заменить на n[i].x .

[] - можно вызывать только для массивов. А x - это не какое то имя которое видно отовсюду. Это поле записи point, поэтому его видно только по точке для веременных типа point.
А после with у вас без точки работает, и выглядит как будто x видно отовсюду - потому что компилятор сам дополняет ваш код, увидев оператор with.
Но - лучше не используйте его. Вы не только усложняете себе этим жизнь - это ещё и устаревшая конструкция. Разработчики не ставят в приоритет фикс багов связаных с with, и более новые конструкции с ними не поддерживаются.
1
114 / 22 / 14
Регистрация: 13.04.2012
Сообщений: 421
08.03.2019, 19:11  [ТС] 16
Цитата Сообщение от Sun Serega Посмотреть сообщение
Нет, там ошибку не такую выводит. Что вы изменили чтоб получить "Нет индексного свойства" - не представляю. Много чего сделать можно было.
Дайте код дающий именно эту ошибку - смогу сказать что не так.
А вообще - я вам уже сказал. x[i] надо заменить на n[i].x .
[] - можно вызывать только для массивов. А x - это не какое то имя которое видно отовсюду. Это поле записи point, поэтому его видно только по точке для веременных типа point.
А после with у вас без точки работает, и выглядит как будто x видно отовсюду - потому что компилятор сам дополняет ваш код, увидев оператор with.
Но - лучше не используйте его. Вы не только усложняете себе этим жизнь - это ещё и устаревшая конструкция. Разработчики не ставят в приоритет фикс багов связаных с with, и более новые конструкции с ними не поддерживаются


вообщем я переделал под тип типа
Pascal
1
n[i].x .
и в итоге вот что получилось в целом:

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
program structure;
Const
  R=10;
 type point=record
  x,y,z: string;
  r,g,b: string;
    end;
  TInd=1..R;
  TElem=Integer;
  TMas=Array [TInd] Of TElem;
var
  n: array[1..10] of point;
  t:integer;
  i:TInd;
begin
  writeln ('введите кол-во точек от 1 до 10:' );
  readln(t);
  for i:=1 to t do with n[i] do
 begin
    writeln($'введите координаты X Y Z {i}й точки:');
    read(x[i],y[i],z[i]);
 end;
   for i:=1 to t do with n[i] do
    begin
      writeln($'введите цвета R G B {i}й точки:');
      read(r[i],g[i],b[i]); 
    end;
writeln('|точка| координаты |   цвет    |');
for i:=1 to t do
Writeln($'|  {i}  |x={n[i].x} y={n[i].y} z={n[i].z} |r={n[i].r} g={n[i].g} b={n[i].b}|');
end.
но теперь после ввода количества точек он выдаёт ошибку:
Ошибка времени выполнения: System.IndexOutOfRangeException: Индекс находился вне границ массива.
Стек:
в structure.structure.$Main() в C:\Users\User\Desktop\Program2.pas:строка 21
в Program2.Program.Main()


попробую поковыряться ещё

Добавлено через 5 минут
мда, а если так сделать
Pascal
1
    read(n[i].x,n[i].y,n[i].z);
то какая-то херня получается

Добавлено через 4 минуты
а вроде разобрался, поменял со стринг на интегер
Pascal
1
2
  x,y,z: Integer;
  r,g,b: Integer;
Добавлено через 1 минуту
---------------------------------------------------
ребя, а как сделать чтоб вводилось в строчку а не в столбик
например вот так
введите координаты X Y Z 1й точки:
1 2 3
а не так
введите координаты X Y Z 1й точки:
1
2
3 ?

пока погуглю...
0
1533 / 869 / 371
Регистрация: 07.04.2017
Сообщений: 3,494
08.03.2019, 19:16 17
Цитата Сообщение от ololo111 Посмотреть сообщение
with n[i] do
Цитата Сообщение от ololo111 Посмотреть сообщение
x[i],y[i],z[i]
Что то вы не всё доправили. По крайней мере в программе, которую скинули.

Раз вы получили ошибку времени выполнения - я так понимаю вы скинули снова не ту программу.

Цитата Сообщение от ololo111 Посмотреть сообщение
мда, а если так сделать
Pascal
1
    read(n[i].x,n[i].y,n[i].z);
то какая-то херня получается
Объясняйте нормально, и без ругательств, пока у меня ещё осталось желание вам помогать. Что именно "получается"?

Добавлено через 57 секунд
Цитата Сообщение от ololo111 Посмотреть сообщение
как сделать чтоб вводилось в строчку а не в столбик
А в чём проблема? Просто вводите через пробел.
1
114 / 22 / 14
Регистрация: 13.04.2012
Сообщений: 421
08.03.2019, 19:27  [ТС] 18
Цитата Сообщение от Sun Serega Посмотреть сообщение
Объясняйте нормально, и без ругательств, пока у меня ещё осталось желание вам помогать. Что именно "получается"?
у меня просто x,y,z: string; было, по этому и какая-то "херня" получилась,, я на integer поменял....

вот конечный вариант
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
program structure;
Const
  R=10;
 type point=record
  x,y,z: integer;
  r,g,b: integer;
    end;
  TInd=1..R;
  TElem=Integer;
  TMas=Array [TInd] Of TElem;
var
  n: array[1..10] of point;
  t:integer;
  i:TInd;
begin
  writeln ('введите кол-во точек от 1 до 10:' );
  readln(t);
  for i:=1 to t do with n[i] do
 begin
    writeln($'введите координаты X Y Z {i}й точки:');
    read(n[i].x,n[i].y,n[i].z);
 end;
   for i:=1 to t do with n[i] do
    begin
      writeln($'введите цвета R G B {i}й точки:');
      read(n[i].r,n[i].g,n[i].b); 
    end;
writeln('|точка| координаты |   цвет    |');
for i:=1 to t do
Writeln($'|  {i}  |x={n[i].x} y={n[i].y} z={n[i].z} |r={n[i].r} g={n[i].g} b={n[i].b}|');
end.
и вот как выдаётся всё:
Кликните здесь для просмотра всего текста
введите кол-во точек от 1 до 10:
3
введите координаты X Y Z 1й точки:
1 2 3
введите координаты X Y Z 2й точки:
3 2 1
введите координаты X Y Z 3й точки:
2 3 4
введите цвета R G B 1й точки:
1 2 3
введите цвета R G B 2й точки:
1 3 2
введите цвета R G B 3й точки:
3 1 2
|точка| координаты | цвет |
| 1 |x=1 y=2 z=3 |r=1 g=2 b=3|
| 2 |x=3 y=2 z=1 |r=1 g=3 b=2|
| 3 |x=2 y=3 z=4 |r=3 g=1 b=2|


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

Добавлено через 4 минуты
а это счичается как многослойная структура данных?
0
1533 / 869 / 371
Регистрация: 07.04.2017
Сообщений: 3,494
08.03.2019, 19:46 19
Цитата Сообщение от ololo111 Посмотреть сообщение
вот конечный вариант
with все уберите, они вам теперь не нужны.

Цитата Сообщение от ololo111 Посмотреть сообщение
многослойная структура данных?
Первый раз слышу это понятие. Киньте ссыль куда то типа википедии.
0
114 / 22 / 14
Регистрация: 13.04.2012
Сообщений: 421
09.03.2019, 00:54  [ТС] 20
Цитата Сообщение от Sun Serega Посмотреть сообщение
Первый раз слышу это понятие. Киньте ссыль куда то типа википедии.
ну это мне по заданию надо многослойную структуру record изобрести, типа:
структура 1 – точка, содержит в себе 2 поля – координаты и цвет;
структура 2 – координаты, содержит 3 поля – координаты X, Y и Z;
структура 3 – цвет, содержит 3 поля – значения каналов R, G, B.
вот я и пытаюсь что-то подобное сделать
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.03.2019, 00:54

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Встречено 'until', а ожидалось ';'
Program calculator; //v1.1 var a,b,rez:real;oper,calc:string;flag_start:boolean; Begin...

Встречено else, а ожидалось ';'
var a1,b1,a,b: real; begin Writeln('Введите А'); readln(a); Writeln('Введите B'); readln(b);...

Встречено '.', а ожидалось ';'
На 169 строке возникает ошибка &quot;Встречено '.', а ожидалось ';'&quot;. Помогите, пожалуйста, решить ее. ...

Встречено 'else', а ожидалось ';'
program lol; uses crt; const nmax = 20; type matr = array of integer;


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.