| 
| 
 | Вопрос # 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. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |