Таблица умножения на Паскале

Задача: 

Достаточно часто требуется построить на экране какую-нибудь двумерную таблицу. Это можно реализовать с помощью двух циклов for. При этом один цикл должен быть вложен в другой.

Допустим, нам требуется вывести на экран таблицу умножения.

Алгоритм решения задачи: 

Внешний цикл for отвечает за формирование строк. Всего их будет 10, значит количество итераций цикла должно быть равно 10.

Внутренний цикл for формирует каждое значение в строке. Всего значений в строке 10. Значит и число его итераций должно быть 10.

В теле вложенного цикла for происходит формирование конкретного значения путем умножения текущего значения счетчика внешнего цикла на текущее значение счетчика внутреннего цикла. Поскольку на протяжении десяти итераций внутреннего цикла, значение счетчика внешнего цикла не меняется, то получается строка, где числа от 1 до 10 умножаются на одно и то же число.

После выхода из внутреннего цикла, перед следующей итерацией внешнего цикла требуется осуществить переход на новую строку. Иначе все значения будут записаны не в виде таблицы, а в виде одной строки.

Комментарии

Решение с красивым выводом

uses crt;
var a:array[0..50,0..50]of integer;
    i,j,n:integer;
begin
readln(n);
for i:=1 to n do
begin
 a[i,0]:=i;
 a[0,i]:=i;
end;
for i:=1 to n do
 for j:=1 to n do
 begin
  a[i,j]:=i*j;
 end;
 
for i:=0 to n do
begin
 for j:=0 to n do
 begin
  if (i=0) or (j=0) then
   textcolor(lightgreen)
  else
   textcolor(white);
   write(a[i,j]:4);
 end;
 writeln;
end;
end;

vari,j,k:integer;beginfor

var 
i,j,k:integer; 
begin 
for i:=1 to 10 do 
begin 
for j:=1 to 10 do 
begin 
k:=i*j; 
writeln(i,'X',j,'=',k); 
writeln; 
end; 
end; 
 
end.

ОШИБКИ

ПРОГРАММА ПРИ ЗАПУСК Е ПОКАЗЫВАЕТ ОШИБКИ...КАКОВО...

program

program multiplication_table;
uses crt;
var i,j,n,k: integer;
begin
writeln('vvedite chislo');
readln(n);
for i:=1 to n do begin
for j:=1 to n do begin
k:=j*i;
writeln(i, '*', j, '=',k);
end;
writeln;
end;
end.

Тадааам

с украшениями

uses crt;
var a:array[0..50,0..50]of integer;
    i,j,n:integer;
begin
readln(n);
for i:=1 to n do
begin
 a[i,0]:=i;
 a[0,i]:=i;
end;
for i:=1 to n do
 for j:=1 to n do
 begin
  a[i,j]:=i*j;
 end;
 
for i:=0 to n do
begin
 for j:=0 to n do
 begin
  if (i=0) or (j=0) then
   textcolor(lightgreen)
  else
   textcolor(white);
   write(a[i,j]:4);
 end;
 writeln;
end;
readln;
end.

Решение

Такое решение будет верным?

var
i,b:integer;
BEGIN
for i:=1 to 10 do
begin
writeln('Таблица умножения числа ', i);
for b:=1 to 10 do
writeln(i*b);
writeln(' ');
end;
END.

Это будет получше

var
i,b:integer;
BEGIN
for i:=2 to 10 do
begin
writeln('Таблица умножения числа ', i);
for b:=2 to 10 do
writeln(i,'*', b , '=', i*b, ' ');
write(' ');
end;
END.

uses wincrt; var

uses
  wincrt;
var
  x,y:0..10;
  s:integer;
begin
  for x:= 0 to 10 do
    for y:= 0 to 10 do
      begin
        s:=(x+1)*(y+1);
        write(s:5);
      end;
   writeln;
end.

как то так

таблица умножения

в таком виде таблица получается до 11, и последний writeln не принадлежит первому циклу, от того и не переносит строку, после завершения второго.

Модуль WINCRT

А что это за модуль, WINCRT?

наверное он имел в виду uses

наверное он имел в виду
uses
Crt;