Программирование

Давайте здесь устроим поле для обсуждения неясных моментов программирования на Паскале

Валерий Шахамболетович

А в моем исправленном решении так и присутствует ошибка? Если да, то подскажите пожалуйста какого рода: синтаксическая или логическая?

program Chislo; var i:

  1. program Chislo;
  2. var i: integer;
  3. begin
  4. read(i);
  5.   if (i<100) and (i>1) and ((i mod 2)=1) then writeln (i);
  6. end.<\pre> если так..но это через If ..и всё равно 3 оп.

Андрей, "По поводу "рельефа" кода."

в твоём случае должно быть так:

  1. program Chislo;
  2. var i:integer;
  3. begin
  4.  for i:=1 to 100 do begin
  5.     if odd(i) then writeln(i,', ');
  6.  end;
  7. end.

Виктория

begin и end — это операторные скобочки)) Между ними заключена операторная последовательность. В связи с этим перефразируй пожалуйста вопрос, а то я недопонял о чём ты.

Ксюша, так она будет выводить

Ксюша, так она будет выводить число, которое ты введешь

Вика оно вводится с

Вика оно вводится с клавиатуры и является первой цифрой

поняла, Сурен)

поняла, Сурен)

да? как? ведь по идее

да? как? ведь по идее ,например 4 ,не должно выводится..не пройдет проверку

Никита

Там вообще можно вот так:

  1. program Chislo;
  2. begin
  3. for i:=1 to 100 do
  4.    if odd(i) then writeln(i,', ');
  5. end.

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

Нет, Андрей.Я учу Вас так,

Нет, Андрей.
Я учу Вас так, как показала Зуева Вика:

  1. program Chislo;
  2.     var i:integer;
  3. begin
  4.     for i:=1 to 100 do begin
  5.          if odd(i) then begin
  6.               writeln(i,', ');
  7.          end;  // of if
  8.     end; // of for
  9. end.

Принцип прост.
1. Каждый сложный оператор (If, For, repeat и т.п.) имеет явно обозначенную "полость", "карман", куда вкладываются управляемые им операторы (тело). Если по синтаксису ТП, такой полости нет ((If, For? while), то ма её создаём сами, добавив составной оператор begin ... end.
2. Все вложенности показываются отступами.

Валерий Шахамболетович,

Валерий Шахамболетович, поясните как понять что все цифры уже введены (из типа Word ясно что из не более 5) задача 5?

Вот задача N5 program

Вот задача N5

  1. program fv;
  2. uses crt;
  3. var
  4.     c: char;
  5.     i: integer;
  6.     a: word;
  7. begin
  8.     for i := 1 to 4 do begin
  9.         readln(c);
  10.         a := a * 10 + ord(c) - ord('0');
  11.     end;
  12.     writeln(a);
  13. end.
  14. Каждый символ надо вводить на новой строке.

Валерий Шахамболетович

Я могу оставить за собой право оформлять код так, как мне нравится? Например задача 1, код которой я опубликовал, оформлена в нечитаемом виде, мне нужно пересмотреть свой способ оформления кода программ?

Поздравляю, Роман!

Поздравляю, Роман!
Не прошло и двух месяцев, освоили набор кода в постах.
А теперь поздравление без иронии. С решением задачи уже горячо!
Осталось учесть, что разрядность вводимого числа не обязательно 4. Ведь сказано же в условии - N.

согласен с зариной это

согласен с зариной это конструкция не верна

Всем спокойной ночи и спасибо

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

Право и не знаю, Андрей, как

Право и не знаю, Андрей, как Вам ответить по поводу Вашего права. Может быть оно и "дело вкуса", но я того мнения, что вкусы прививаются воспитанием (или отсутствием оного).
Я пытаюсь говорить о научно обоснованных принципах правильного стиля программирования (прочитав за свою жизнь немало толстых книг в том числе, и на эту тему), а Вы о привычках и вкусах ...

Валерий Шахамболетович,

Валерий Шахамболетович, поясните как понять что все цифры уже введены (из типа Word ясно что из не более 5) задача 5?

Вас на сайте всё ещё 11

Вас на сайте всё ещё 11 человек. Предлагаю на сегодня разойтись. Завтра можно будет всё завершить и подвести итоги. Спасибо за активность и доброй ночи!

Валерий Шахамболетович

Скажите пожалуйста, в этом моем решении задачи 3 также содержится ошибка?

3.Дано 2 натуральных числа M и N. Вывести в порядке убывания все их общие делители.

  1. Program deliteli;
  2.    var i:integer; m,del,n:Word;
  3. begin
  4.    readln(n,m);
  5.    if n>m then begin
  6.       for i:=n downto 1 do begin
  7.          if ((n mod i)=0) and ((m mod i)=0) then begin
  8.              del:=i;
  9.              writeln(del);
  10.          end;
  11.       end
  12.    end
  13.    else begin
  14.          for i:=m downto 1 do begin
  15.            if ((n mod i)=0) and ((m mod i)=0) then begin
  16.              del:=i;
  17.              writeln(del)
  18.            end
  19.          end
  20.    end
  21. end.

Сурен, разве там так

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

Спокойной ночи)

Спокойной ночи)

Нет, Вика, не содержится! Всё

Нет, Вика, не содержится! Всё у Вас уже впорядке. Я просто забыл, что об этом Вам не сообщил. Вы задачу-таки закрыли ...

Задача 2

program:odd;

var i:integer;

begin
for i:=0 to 100 do begin
if i mod 2<>0 then begin
writeln(i);
end;
end;
readln(i);

end.

Задача 2

  1. program two;
  2. var N:integer;
  3. begin
  4.  for N:=1 to 100 do begin
  5.   if N mod 2 = 1 then write(N, ', ') //выводим само число N, отделяем его запятой и делаем пробел для следующего N
  6.  end;
  7. end

Сделал код красивым

Валерий Шахамболетович

Ура :) Просто я поторопилась с решением и не учла всех вариантов введенных чисел. Доброй ночи :)

доброй ночи всем)))))))))

доброй ночи всем)))))))))

Умеджон

Нужно поставить перед текстом задачи < pre> после текста < /pre> (только без пробелов в <>) для "красивого кода" :)

Дмитрий

Быстро исправился :)

Виктория

Стараюсь)

Сурен, вот условие: Ввести N

Сурен, вот условие:
Ввести N десятичных цифр (знаков) и образовать из них соответствующее значение A типа Word (Например, введя 4 цифры: ‘3’,’0’,’5’,’2’, мы должны сформировать значение A=3052)

Где Вы видите слова о том, "что все цифры уже введены"? Неужели не понятно, что можно ввести и один знак (цифру), и три и пять. Число вводимых знаков (значность числа ) заранее не фиксирована, а задаётся предварительным вводом в переменную N<6 (после чего вводим уже сами знаки).

Задача 2

  1. program zd2;
  2.   var i:Byte;
  3. begin
  4.   for i:=1 to 50 do begin
  5.      writeln(2*i -1)
  6.   end
  7. end.

Задача 5

  1. program five;
  2. var N, I, K, C:integer;
  3.     A:word;
  4. begin
  5. A:=0; //обнуляем нашу сумму
  6. read(N); //считываем количество знаков нашего числа
  7.  for I:=N downto 1 do begin //запускаем счетчик на убывание
  8.   C:=N-1; //задаем степень для десятки из N
  9.   read(K); //считываем число
  10.   A:=A+K*(10^C) //складываем полученное число с прошлым
  11.  end;
  12. write(A) //выводим наш результат
  13. end.

Задача 5

  1. program zadacha5;
  2. var i, n: Integer;
  3.      a, b, c: Word;
  4. begin
  5. c := 0;
  6. b := 1;
  7. Writeln('Vvedite kol-vo cifr');
  8. Readln(n);
  9.   for i := 2  to n do
  10.      b := b * 10;
  11. Writeln('Vvedite chisla');
  12.   for i := 1 to n do begin
  13.     Readln(a);
  14.     c := c + (a * b);
  15.     b := b div 10;
  16.   end;
  17. Writeln(c);
  18. Readln
  19. end.

Доброй ночи всем))

Доброй ночи всем))

Виктория

понятно Виктория я не знал спасибо что подсказала я запомню!

Вот исправил  program

Вот исправил

  1.  program fv;
  2. uses crt;
  3. var
  4.      c: char;
  5.      i: integer;
  6.      a,n: word;
  7.  
  8. begin
  9.   writeln('kolichestvo cifr');
  10.     readln(n);
  11.        for i := 1 to n do begin
  12.          readln(c);
  13.          a := a * 10 + ord(c) - ord('0');
  14.          end;
  15.         writeln(a);
  16.       end.

Задача5 закрыта Мгоевым Р.

Поздравляю, Роман, но ...

Андрей, Роман (!!!):
Рельефный рисунок, например

  1. ...
  2. readln(n);
  3.     for i := ...
  4. ...

визуально выражает то, что оператор FOR вложен в оператор readln, т.е. является его частью. Что, конечно, ошибка, т.к. Readln простой оператор и никакие другие операторы не могут быть в него вложены.

Есть простой рецепт. Увидев в любой строке текста пограммы отступ относительно предыдущей строки, спросите себя: Зачем он здесь?.
Всего возможны три ситуации:

  1. // Первая (B является частью оператора, начинающегося с A):
  2. ...
  3. A;
  4.    B;
  5. ...
  6. // Вторая (A является частью оператора, завершающегося строкой B)
  7. ...
  8.     A;
  9. B;
  10. ...
  11. // Третья (А и В независимые, последовательно выполняемые друг за другом операторы)
  12. ...
  13. A;
  14. B;
  15. ...

5 задача

я так понял, мое решение неверно, в чем я ошибся?

А Вы разберитесь с решением

А Вы разберитесь с решением Романа, Дмитрий ( и почитайте условие внимательней).

А на счет задачи №4 что вы

А на счет задачи №3 и №4 что вы можете сказать?

решение Романа

мы там не обнуляем переменную а, не знаю, что там получится в итоге
и зачем мы вычитаем из а ord('0') ?

Продолжу рельефах.

Продолжу о рельефах. Если строго следовать трём указанным выше правилам, то никогда не образуется рисунков вида:

  1. ...
  2. begin
  3. Read ...
  4. ...
  5. вместо правильного
  6. begin
  7.     Read ...
  8. ...

  1. ...
  2. begin
  3. begin ...
  4. ...
  5. вместо правильного
  6. ...
  7. begin
  8.     begin ...
  9. ...

  1. ...
  2. End
  3. End
  4. ...
  5. вместо правильного
  6. ...
  7.     End
  8. End
  9. ...

и т.п.

По задаче 5.

1. У Романа действительно ошибка (но я склонен считать её опиской и рассмотрю чуть ниже).

Но Роман сделал главное - он показал, что различает понятия цифра (знак, ASCII-cимвол, значение типа Char, изображаемый в одиночных кавычках (что явно показано было в примере!)) и понятие значение цифры (число). На лекции я особо подчёркивал различие объектов 2 и '2', например. До многих, видимо, факт этого различия не донёс.

2. По Вашему "решению". Оно неверно уже на уровне синтаксиса. 10^N в ТП не бывает, это не Бейсик.
А Ваша (т.е. неправильно понятая моя) задача реализована Ведлером А. (см. чуть выше), а идеальным образом (один цикл, вместо двух у Андрея и у Вас) и раньше всех - Давтяном С.

Задача 2.

  1. program r;
  2. var i: integer;
  3. begin
  4.   for i:=1 to 99 do write ( i*(i mod 2), ',')
  5. end.

Программа выводит через запетую "эн"- ное нечетное число, затем через запятую ноль, затем "эн+1" нечетное число, затем опять ноль и так далее по циклу...

На счет ошибок...

понял, большое спасибо за разъяснения!

Хоть и не совершенное, но

Хоть и не совершенное, но оригинальное решение, БОГДАН! Готов воздать должное Вашей фантазии.
Правильное решение с минимумом операторов (как и у Вас, только 2) у Новокрещенова А. (см. выше). Ваше решение уступает ему как по форме выдачи результата, так и по числу повторений цикла.

Задачу 2 так же считаю закрытой. Ниже проведу "разбор полётов" и подведу итоги.

Срочные дела. Итоги придётся

Срочные дела. Итоги придётся отложить до вечера.

Гостев Богдан!

Эта похвала (Сб, 27/10/2012 - 11:32 — VTlyusten) относится к Вам. Простите, что переназвал Вас. Уже исправил.

задача 1.

  1. program zadasha1;
  2. var N:word;
  3.     S,i:integer;
  4. Begin
  5. S:=0;
  6. readln(N);
  7.   for i:=1 to 5 do
  8.     begin N:=N div 10; S:=S+1;
  9.       if N=0 then break
  10.        end;
  11. writeln(S);
  12. end.

Программа верно работает при любом значении N типа word.