pascal Урок 13.1 задание 10 Вопрос по решению
Primary tabs
При решении задания 10 из урока 13.1:
Модифицируйте предыдущую задачу так, чтобы в каждой чётной (той, у которой номер чётный) строке выводилось N символов, а в каждой нечетной N/2 символов (сделайте проверку того, что N/2 больше нуля)
возникла проблема, а именно -- Не могу вывести правильно нечетную строку.
var a, i,j,m,n:integer;
begin
writeln('vvedite chislo m:');
readln(m);
writeln('vvedite chislo n:');
readln(n);
a := n mod 2;
for i:=1 to m do
begin // начало тела внешнего цикл
for j:=1 to n do // (вложенный цикл) выводим все числа до n
if ((i mod 2) = 1) then
write(j, ' ');
if ((i mod 2) = 0) then
write(a, ' ');
if (n/2 < 0) then
write(' oshibka');
writeln(); // перенос строки
end;
readln();
end.
- Log in to post comments
- 15907 reads
vedro-compota
Mon, 02/10/2020 - 15:01
Permalink
оформление
_____________
матфак вгу и остальная классика =)
vedro-compota
Mon, 02/10/2020 - 16:56
Permalink
форматирование
Начнем того, что неправильно отформатирован блок:
for i:=1 to m do begin // начало тела внешнего цикл for j:=1 to n do // (вложенный цикл) выводим все числа до n if ((i mod 2) = 1) then write(j, ' '); if ((i mod 2) = 0) then write(a, ' '); if (n/2 < 0) then write(' oshibka'); writeln(); // перенос строки end;- begin должен быть под end,
также неправильно отформатирован блок:
for j:=1 to n do // (вложенный цикл) выводим все числа до n if ((i mod 2) = 1) then write(j, ' '); if ((i mod 2) = 0) then write(a, ' '); if (n/2 < 0) then write(' oshibka');-- почему if-ы идут один по одним? Вы считаете, что они относятся к внутреннему циклу?
Если вы хотите чтобы они относились к внутреннему циклу, ставьте
. В данный момент не все из них относятся к внутреннему,
а значит форматирование должно быть другим.
_____________
матфак вгу и остальная классика =)
pakot
Thu, 02/13/2020 - 09:27
Permalink
Переделал скрипт, не
Переделал скрипт, не получается нечетную строку уменьшить в 2-а раза.
var a, i,j,m,n:integer; begin writeln('vvedite chislo m:'); readln(m); writeln('vvedite chislo n:'); readln(n); for i:=1 to m do // цилк выводим числа до m begin // начало тела внешнего цикл for j:=1 to n do // (вложенный цикл) выводим все числа до n begin // начало тела внутреннего цикл a := j mod 2; // задаем переменную а if ((j mod 2) < 0) then // действие проверки что n/2 больше 0 write( 'oshibka '); // вывод сообщения об ошибке if ((i mod 2) = 1) then // действие которое выводит нечетные строки write(j, ' '); // вывод переменной j if ((i mod 2) = 0) then // действие которое выводит четные строки write(a, ' ') ; // выводим переменную а end; writeln(); // перенос строки end; readln(); end.vedro-compota
Wed, 02/12/2020 - 20:11
Permalink
что за что
напишите за что отвечает внутренний цикл, за что внешний?
Зачем почему вообще вы пытаетесь решить вложенными циклами?
_____________
матфак вгу и остальная классика =)
pakot
Wed, 02/12/2020 - 20:52
Permalink
Внешний цикл отвечает за m
Внешний цикл отвечает за m повторений в столбик, внутренний отвечает за n повторений в строку. Используя первое действие if я определяю нечетные строки во внутреннем цикле и вывожу их. Используя второе действие if я определяю четные строки во внутреннем цикле и вывожу их.
Пытаюсь вывести в четной строке n/2. Но что-то не работает.
vedro-compota
Wed, 02/12/2020 - 22:42
Permalink
Внешний цикл отвечает за m
предположим, хотя и не очень точно сформулировано.
это не точно, вы можете вывести после проверки лишь очередной элемент строки, а не всю строку
аналогично, строку так не выведешь, только очередной символ
_____________
матфак вгу и остальная классика =)
vedro-compota
Wed, 02/12/2020 - 22:46
Permalink
замечания
Посмотрим на код:
a := j mod 2; // задаем переменную а //write(j, ' ') ; if ((i mod 2) = 1) then // цикл который выводит нечетные строки write(j, ' ') else if(n/2 < 0)then write( 'oshibka '); if ((i mod 2) = 0) then // цикл который выводит четные строки write(a, ' ') else if(n/2 < 0)then write(' oshibka');Что тут не так, как минум:
-- это итак понятно, скорее надо написать ДЛЯ ЧЕГО эта переменная
-- комментарий не корректен, это не цикл
else if(n/2 < 0)then write(' oshibka');-- что за сообщения об ошибках? Как они вообще связаны с условием?
Если n надо проверить почему это не сделано заранее, до начала цикла, там где значение уже известно?
_____________
матфак вгу и остальная классика =)
pakot
Fri, 02/14/2020 - 22:20
Permalink
Исправил проверку n/2
Исправил проверку
var a, i,j,m,n:integer; begin writeln('vvedite chislo m:'); readln(m); writeln('vvedite chislo n:'); readln(n); for i:=1 to m do // цилк будет выполняться до m begin // начало тела внешнего цикл for j:=1 to n do // (вложенный цикл) выполняется до n begin // начало тела внутреннего цикл a := j mod 2; // задаем переменную а if ((j mod 2) < 0) then // действие проверки что n/2 больше 0 write( 'oshibka '); // вывод сообщения об ошибке if ((i mod 2) = 1) then // действие которое проверяет нечетные строки write(j, ' '); // вывод переменной j if ((i mod 2) = 0) then // действие которое проверяет четные строки write(a, ' ') ; // выводим переменную а end; writeln(); // перенос строки end; readln(); end.vedro-compota
Thu, 02/13/2020 - 12:19
Permalink
Объясните назначение проверки
Объясните назначение проверки:
if ((j mod 2) < 0) then // действие проверки что n/2 больше 0 write( 'oshibka '); // вывод сообщения об ошибкекогда этот код вообще выполнится?
-- это неверный комментарий, этот цикл вообще ничего сам не выводит, что он делает?
_____________
матфак вгу и остальная классика =)
pakot
Fri, 02/14/2020 - 22:19
Permalink
Проверка должна проверить что
Проверка должна проверить число которое получилось при делении, и что оно больше "0", выполниться код когда j/2 меньше "0"
pakot
Fri, 02/14/2020 - 23:00
Permalink
Переделал
var a, i,j,m,n:integer; begin writeln('vvedite chislo m:'); readln(m); writeln('vvedite chislo n:'); readln(n); for i:=1 to m do // цилк выводим числа до m begin // начало тела внешнего цикл for j:=1 to n do // (вложенный цикл) выводим все числа до n begin // начало тела внутреннего цикл if ((j mod 2) < 0) then // действие проверки что n/2 больше 0 write( 'oshibka '); // вывод сообщения об ошибке if ((i mod 2) = 1) then // действие которое проверяет нечетные строки write(j, ' '); // вывод переменной j if ((i mod 2) = 0) then // действие которое проверяет четные строки write(j - n / 2, ' ') ; // выводим решение в четной строке end; writeln(); // перенос строки end; readln(); end.vedro-compota
Sat, 02/15/2020 - 00:06
Permalink
еще раз уточню
ответьте на вопросы:
_____________
матфак вгу и остальная классика =)
pakot
Mon, 02/17/2020 - 17:55
Permalink
При отрицательном значении.
При отрицательном значении. Нет не может.