|
Вопрос # 2 740/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
В чем ошибка
; not allowed before 'else'
Приложение: Переключить в обычный режим- for k:= a to (e[2]) do
- begin
- x3[k] :=x3[k]+k;
- for n1:= a to (e[2]+e[1]) do
- begin
- begin
- if ((s[x3[k]+e[1]-z2[n1]])>0) then
- M[k,n1]:=(x3[k])+(C2[n1+a])+(s[x3[k]+e[1]-z2[n1]]);
- min:=M[k,0];
- begin
- if M[k,n1]<min then
- min:=M[k,n1]
- else;
- end;
-
- else;
- Writeln('M=',M[k,n1]);
- end;
-
- end;
-
-
- end;
 |
Вопрос задал: MaxWooD (статус: Посетитель)
Вопрос отправлен: 6 мая 2009, 21:26
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: min@y™
Ну всё правильно. Перед else точка с запятой не ставится, ибо if ... then ... else — это одна лексическая конструкция.
Я поглядел (правда, сначала переформатировал) твой код. Не знаю, что делает сей алгоритм, но полное незнание азов налицо. Попробовал переделать, не вдаваясь в сам алгоритм. Вот что получилось (сравни со своим):
for k:= a to e[2] do
begin
x3[k]:= x3[k] + k;
for n1:= a to e[2] + e[1] do
begin
if s[x3[k] + e[1] - z2[n1]] > 0
then begin
M[k, n1]:= (x3[k]) + (C2[n1 + a]) + (s[x3[k] + e[1] - z2[n1]]);
min:= M[k, 0];
if M[k, n1] < min
then min:= M[k, n1]
else; // <--- что тут быть-то должно?
end // then
else; // <--- что тут быть-то должно?
Writeln('M = ', M[k, n1]);
end; // for
end; // for
Если по ветке else у тебя ничего не запланировано, то и писать её не надо.
Согласись, что отформатированный мной код, выглядит гораздо читабельнее, несмотря на однобуквенные переменные. Это, конечно, не есть пример, как надо форматировать исходники, просто я ТАК пишу.
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 6 мая 2009, 22:39
|
Мини-форум вопроса
Всего сообщений: 20; последнее сообщение — 7 мая 2009, 22:48; участников в обсуждении: 4.
|
Паровоз (статус: 10-ый класс), 6 мая 2009, 22:30 [#1]:
Ошибка в том, в чем написано - перед else точка с запятой не ставится.
|
|
MaxWooD (статус: Посетитель), 6 мая 2009, 22:47 [#2]:
задача состоит чтобы из массива выбрать минимальное значение
По поводу читабельности всё исправлю, извеняйте-не профи!
|
|
MaxWooD (статус: Посетитель), 6 мая 2009, 22:56 [#3]:
program Project1;
{$APPTYPE CONSOLE}
var
a,b,n,n1,n2,k,k1,c,x1,x4,Y,y1,i,h,min:integer;
z1:array [0..100] of integer;
z2:array [0..100] of integer;
z3:array [0..100] of integer;
x2:array [0..100] of integer;
x3:array [0..100] of integer;
c2:array [0..100] of integer;
c3:array [0..100] of integer;
e:array [0..100] of integer;
s:array [0..100] of integer;
M:array [0..100,0..100] of integer;
{t:array [0..100] of integer;}
begin
Write('x1 ');Readln(x1);
Write('Chislo elementov En ');
Readln(k); // число элементов En
for n:=1 to k do
begin
write('Element#',n,' ');
readln(e[n-1]);
end;
z2[0]:=0;
x3[0]:=0;
a:=0{x1-e[0]};
y1:=0;
for y:=0 to k-1 do
begin
y1:=y1+(e[y]);
{ Writeln('y1=',y1); } //
end;
b:= y1-e[0];
{ Writeln('b=',b);} //конечный предел х2
for n:= a to b do //пределы z1,z2,x2,x3
begin
z1[n]:=n+(e[0]-x1); //считаем z1 !верно!
z2[n]:=n+a; //пределы z2 !верно!
Writeln('z2[n]=',z2[n]);
x2[n]:=(x1+z1[n]-e[0]); //считаем x2 !верно!
{ begin
if (x3[n]<=6)then
x3[n]:=n+a
else
x3[n]:=x3[n]; //считаем x3 !верно!
Writeln('x3[n]=',x3[n]);
end; }
begin
if (z1[n]>=0) and (z1[n]<=5) then
C:=10*z1[n]
else
begin //условие по функции C(z1)
if (z1[n]>=6) and (z1[n]<=15)then
C:=50+20*(z1[n]-5)
else Write('ne_v_prdelax')
end;
end;
s[n]:=C+x2[n]; // главная диагональ 1 !верно!
Writeln('s[n]=',s[n]);
{ Writeln('z2[n]=',z2[n])} // !верно!
begin
if (z2[n]>=0) and (z2[n]<=5) then
C2[n]:=10*z2[n]
else
begin //условие по функции C(z2)
if (z2[n]>=6) and (z2[n]<=15)then
C2[n]:=50+20*(z2[n]-5)
else Write('ne_v_prdelax');
end;
{ Writeln('C2=',c2[n]);} // !верно!
end;
end;
for k:= a to e[2] do
begin
x3[k]:= x3[k] + k;
for n1:= a to e[2] + e[1] do
begin
if s[x3[k] + e[1] - z2[n1]] > 0
then begin
M[k, n1]:= (x3[k]) + (C2[n1 + a]) + (s[x3[k] + e[1] - z2[n1]]);
min:= M[k,0];
if M[k, n1] < min
then min:= M[k, n1]
else; // <--- что тут быть-то должно?
end // then
else; // <--- что тут быть-то должно?
Writeln('M = ', M[k, n1]);
end; // for
end; // for
x4:=0;
for n:= a to (e[2]) do
begin z3[n]:=n+a;
begin
if (z3[n]>=0) and (z3[n]<=5) then
C3[n]:=10*z3[n]
else
begin //условие по функции C(z3)
if (z3[n]>=6) and (z3[n]<=15)then
C3[n]:=50+20*(z3[n]-5)
else Write('ne_v_prdelax')
end;
end;
h:=(C3[n1+a])+(M[k,n1]);
end;
{write ( 'x2= ',x2[n]:2,' z1= ',z1[n]:2,' sum= ',s[n]:4,' C(z1)= ',c,'t=',t,'c2=',c2[n],'X3=',x3[k]); //главнвя диаганаль матрицы или сумма
readln; }
readln;
end.
Если честно я его сам-то боюсь иногда, Если можете, то где про оформление можно почитать?
Не выбирает минимальное значение в массиве!
Дайте оценку моему коду, последний раз 3 года назад программировал, но теперь прийдется всегда писать.
|
|
min@y™ (статус: Доктор наук), 6 мая 2009, 22:58 [#4]:
Цитата:
чтобы из массива выбрать минимальное значение
Да я бы ни за что не поверил, что это поиск минимального элемента массива! На мой взгляд это ващще загадка американского хирурга + египетская надпись на пирамиде. От обилия переменных рябит в глазах.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 6 мая 2009, 23:01 [#5]:
Ойпля!... Какой ужос!
Распечатай этот исходник на мягкой бумаге формата А4,... ну а потом, я думаю, ты примешь правильное решение, как его применить.
А если серьёзно, дай хоть задание посмотреть.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
DNK (статус: Студент), 6 мая 2009, 23:04 [#6]:
Сдаётся мне, что else тут вообще не нужен. MaxWooD, не ставь их, если команд нет.
"Digital Networked Knight"
|
|
min@y™ (статус: Доктор наук), 6 мая 2009, 23:08 [#7]:
2 All:
У меня на работе старые тётки до сих пор так код свой форматируют, хотя пишут на С++. Когда я смотрю/редактирую их код, у меня волосы на жопе шевелятся.
Я пару лет назад им америку открыл, прикиньте, типа, что в С/С++ есть не только комментарии "/* текст */", но и "// текст". У меня были глаза, как у кота, которому наступили на яйца! Они по 20-30 лет работают с сишником и не знают про string-comment!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
MaxWooD (статус: Посетитель), 6 мая 2009, 23:10 [#8]:
for k:= a to e[2] do
begin
x3[k]:= x3[k] + k;
for n1:= a to e[2] + e[1] do
begin
if s[x3[k] + e[1] - z2[n1]] > 0
then begin
M[k, n1]:= (x3[k]) + (C2[n1 + a]) + (s[x3[k] + e[1] - z2[n1]]);
min:= M[k,0];
if M[k, n1] < min
then min:= M[k, n1]
else ; // <--- ничего быть не должно-я уберу
end // then
else; // <--- ничего быть не должно- я уберу
Writeln('M = ', M[k, n1]);
end; // for
end; // for
Вот в этом месте надо выбрать мин значение массива. На бумаге печатал-не помогает-поэтому к вам и обратился!
А переменных можно и по меньше сделать?
|
|
min@y™ (статус: Доктор наук), 6 мая 2009, 23:14 [#9]:
А, забыл привести пример. Выглядит это вот так:
/* ПРОГРАММА ВЫДАЧА ДАННЫХ В РЭМ1 БЕЗ РЕГИСТРАЦИИ ОТКАЗА
(ФАЙЛ j7vdm3.c,ФУНКЦИЯ j7vdm3) */
#include
j7vdm3(ak,ap,av,reg,abuf,n)
unsigned int ak; /* адрес контроллера ISA-КСС */
int ap; /* адрес РЭМ1 на прием */
int av; /* адрес РЭМ1 на выдачу */
int reg; /* адрес регистра РЭМ1 */
char *abuf; /* адрес буфера данных для РЭМ1 */
int n; /* число байтов данных для РЭМ1 */
{
extern FILE *j4df;
extern int j1otladka;
extern int j4zbuf;
extern int j1kolpov;
extern int j1npov1;
extern char j7rskss;
extern char j7rsb;
char sb[2];
int d,d1,i;
if(j4zbuf&&j1otladka)
{
j4zfp();
fprintf(j4df," Выдача данных в РЭМ с КР с инкрементом адреса регистра\n");
}
/* Формирование служебных данных */
sb[0]=0x16; /* КОП выдать байты с КР с инкрементом адреса регистра */
sb[1]=reg; /* адрес регистра */
/* Цикл обмена с повтором при отказах */
for(i=0;i
{
j7rskss=0; j7rsb=0;
d1=0;
/* определение числа повторов */
if(i) j1npov1++;
/* адресация РЭМ1 на прием */
d=j4adr(ak,ap); if(d) break;
/* выдача служебных данных */
if(j4zbuf&&j1otladka)
{
j4zfp();
fprintf(j4df,"Служебные байты: КОП, адрес регистра \n");
}
d=j4out(014,sb,2);
if(d==0)
{
/* выдача данных в РЭМ1 */
if(j4zbuf&&j1otladka)
{
j4zfp();
fprintf(j4df,"Байты данных \n");
}
d=j4out(015,abuf,n);
/* kонтроль обмена */
if(d==0)
{
d1=j7kossm(ak,ap,av);
if(d1==0) break;
}
}
}
/* Разадресация */
if(d==0) d=j4radr(ak);
if(d) return d;
if(d1) return d1;
return 0;
}
Тоже не особо напрягаются на счёт имён переменных. ))))) Хорошо хоть комменты ставят, и то спасибо. Пришлось скачать утилиту автоформатирования С++ кода. Помогло.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 6 мая 2009, 23:18 [#10]:
Цитата:
А переменных можно и по меньше сделать?
Ну ясен пень! Надо оформить поиск минимального элемента массива простой функцией, которая и будет возвращать индекс этого элемента. Я не буду твой исходник читать, это приведёт к раку мозгов. А они мне ещё нужны (у меня семья, двое детей и вообще, я ещё молод, чтобы умирать).
Просто напиши, что там в задании.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
MaxWooD (статус: Посетитель), 6 мая 2009, 23:19 [#11]:
Спасибо за пример, но как же мне быть с выбором минимального значения из массива в цикле?
|
|
min@y™ (статус: Доктор наук), 6 мая 2009, 23:27 [#12]:
Так, начнём пытать: что за массив? Какой размерности?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 6 мая 2009, 23:33 [#13]:
// Пример
const
N = 100; // Размер массива
type
TMyArray = array[0..N - 1] of Integer;
// Функция, возвращающая номер первого минимального элемента массива
function GetMinElement(const M: TMyArray): Integer;
var
Index, Min: Integer;
begin
Min:= 2147483647;
Result:= Low(TMyArray);
for Index:= Low(TMyArray) to High(TMyArray) do
if Min > M[Index]
then begin
Min:= M[Index];
Result:= Index;
end;
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
MaxWooD (статус: Посетитель), 6 мая 2009, 23:38 [#14]:
Массив M[k, n1]. размерность(не пойму что такое) числовой целый integer
k от а до e[2]; n1 от a до e[2] + e[1]
Сначало считаем M[1, 1] M[1, 2] M[1, 3]-> min
M[2, 1] M[2, 2] M[2, 3]-> min
Показать min M[1, ?] M[2, ?]
Надеюсь изложил правильно!
|
|
min@y™ (статус: Доктор наук), 6 мая 2009, 23:52 [#15]:
Цитата:
Надеюсь изложил правильно!
Сам-то понял? Я - нет.
Пример правильно поставленной задачи.
-------------------------------------
Дан массив из 100 случайных целых чисел. Найти среди них первый минимальный элемент и вывести этот элемент и его индекс на экран.
-------------------------------------
Заметь, никаких упоминаний о переменных. Попробуй по этому примеру сформулировать свою задачу.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 6 мая 2009, 23:53 [#16]:
Я спать пошёл. Не знаю, как там у тебя, а у меня 23:52, а завтра праздник. Надо выспаться.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
MaxWooD (статус: Посетитель), 6 мая 2009, 23:56 [#17]:
Массив представляет собой матрицу состоящюю из строк и столбцов например 100 на 100 M[№ столбца,№строки]
|
|
min@y™ (статус: Доктор наук), 7 мая 2009, 08:15 [#18]:
Цитата:
Массив представляет собой матрицу состоящюю из строк и столбцов например 100 на 100 M[№ столбца,№строки]
Ну и что с этой матрицей делать? Найти минимальный элемент?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
MaxWooD (статус: Посетитель), 7 мая 2009, 14:37 [#19]:
begin
for k:= a to e[2] do //считаем массив столбец
begin
x3[k]:= x3[k] + k;
min:= 1000;
for n1:= a to e[2] + e[1] do // считаем массив строка
begin
if ((s[x3[k]+e[1]-z2[n1]])>0) then
M[k, n1]:= (x3[k]) + (C2[n1 + a]) + (s[x3[k] + e[1] - z2[n1]]); // значения в строке
{Writeln('M = ', M[k, n1]);}
if ((s[x3[k]+e[1]-z2[n1]])>0) then
if min > M[k, n1]
then ((min:= M[k, n1])and (t[n1]:=M[k, n1]));
t[n1]:=min;
end; // then
Writeln('x3= ':3, x3[k],'S2= ':7, Min:3,'t= ':7, t[n1]:3{,'z2*= ':7, z2[n]{,'z2*= ':7, z2[n]}); // минимальное значение в строке
end; // for
end; // then
writeln ( ' '); // разделитель
x4:=0;
for n:= a to (e[2]) do
begin z3[n]:=n+a;
begin
if (z3[n]>=0) and (z3[n]<=5) then
C3[n]:=10*z3[n]
else
begin //условие по функции C(z3)
if (z3[n]>=6) and (z3[n]<=15)then
C3[n]:=50+20*(z3[n]-5)
else Write('ne_v_prdelax')
end;
h[n]:=(C3[n+a])+z3[n]+(t[n1]);
writeln ( 'z3= ',z3[n],'c3= ':7,c3[n]:2,'S3= ':7,h[n]{,' C(z1)= ',c,'t=',t,'c2=',c2[n],'X3=',x3[k]}); //главнвя диаганаль матрицы или сумма
end;
end;
нужно (t[n1]) присвоить мин значение массива
|
|
min@y™ (статус: Доктор наук), 7 мая 2009, 22:48 [#20]:
ДА НЕ БУДУ Я ЧИТАТЬ ТВОЙ ЖУТКИЙ ИСХОДНИК!!!! Ну сформулируй ты вопрос по-человечески! Без переменных, просто абстрактно сформулируй: дано вот это, надо найти вон то и всё.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|