простенькое программирование

avatar AndreyChu

1415

35

ReNu

Пользователь

Регистрация: 08.04.2014

Сообщения: 336

Рейтинг: 149

Нарушения: 115

ReNu

Регистрация: 08.04.2014

Сообщения: 336

Рейтинг: 149

Нарушения: 115

Матричные массивы и все вытекающие формулы к ним изи решаются в экселе )

drafff

Пользователь

Регистрация: 26.06.2013

Сообщения: 8261

Рейтинг: 3093

drafff

Регистрация: 26.06.2013

Сообщения: 8261

Рейтинг: 3093

Забыл добавить, числа нужны только положительные.

ITWispa

Пользователь

Регистрация: 30.07.2014

Сообщения: 1060

Рейтинг: 452

ITWispa

Регистрация: 30.07.2014

Сообщения: 1060

Рейтинг: 452

AndreyChu сказал(а):
Всем привет. Прошу Вас помочь с простой задачей по программированию, которую нам задали в школе. Собственно что нужно сделать:
На вход подается одно натуральное число, которое обозначает кол-во строк.
Далее на каждой строке вводится число с клавиатуры, ввод чисел заканчивается после ввода нуля. Для каждого числа программа должна построить квадратную матрицу по типу как на примере.
(Программа нужна желательно на языке C)
Нажмите, чтобы раскрыть...


В общем, готово, но получилось грубо: много циклов. Неприлично много циклов. На уровне идеи.
Я сделал пару тестов в пределах 10. Кажется, работает.
Спойлер:


program project1;
var n, k:integer;
i, j:integer;
m:array[1..5, 1..10] of byte; //Сделай массив [1..(n+1)div 2, 1..n]

begin
// Readln (n);
n:=4;
k:=(n+1)div 2;
For i:=1 to k do begin

m[k,i]:=i;

m[k,n-i+1]:=i; //Заполняем центральную строку
end;

If k>1 then begin

For i:=1 to k-1 do begin

For j:=1 to n do

m[i,j]:=m[k,j]; //Заполняем строки в начале

end;
end;

For i:=1 to (n+1) div 2 do begin

For j:=1 to n do

If m[i,j]>i then m[i,j]:=i; //Приравниваем сильно большие цифры циклу итерации
end;

For i:=1 to k do begin

For j:=1 to n do

write (m[i,j]);//Выводим первую половину квадрата

writeln;
end;

If (n mod 2 = 0) then begin for i:=1 to n do write(m[k,i]); writeln; end;
//Если основание квадрата четное - дублируем центральную строку

For i:=(k-1) downto 1 do begin

For j:=1 to n do

write (m[i,j]); //Выводим вторую половину квадрата

writeln;
end;
readln;
end.

AndreyChu

Пользователь

Регистрация: 24.05.2014

Сообщения: 179

Рейтинг: 142

AndreyChu

Регистрация: 24.05.2014

Сообщения: 179

Рейтинг: 142

Цитата:
В общем, готово, но получилось грубо: много циклов. Неприлично много циклов. На уровне идеи.
Я сделал пару тестов в пределах 10. Кажется, работает.
Нажмите, чтобы раскрыть...

Большое спасибо тебе за твои старания и потраченное время. Я рад, что на этом форуме есть хорошие ребята.
:)

drafff

Пользователь

Регистрация: 26.06.2013

Сообщения: 8261

Рейтинг: 3093

drafff

Регистрация: 26.06.2013

Сообщения: 8261

Рейтинг: 3093

ITWispa сказал(а):
В общем, готово, но получилось грубо: много циклов. Неприлично много циклов. На уровне идеи.
Я сделал пару тестов в пределах 10. Кажется, работает.
Спойлер:


program project1;
var n, k:integer;
i, j:integer;
m:array[1..5, 1..10] of byte; //Сделай динамический массив [1..(n+1)div 2, 1..n]

begin
// Readln (n);
n:=4;
k:=(n+1)div 2;
For i:=1 to k do begin

m[k,i]:=i;

m[k,n-i+1]:=i; //Заполняем центральную строку
end;

If k>1 then begin

For i:=1 to k-1 do begin

For j:=1 to n do

m[i,j]:=m[k,j]; //Заполняем строки в начале

end;
end;

For i:=1 to (n+1) div 2 do begin

For j:=1 to n do

If m[i,j]>i then m[i,j]:=i; //Приравниваем сильно большие цифры циклу итерации
end;

For i:=1 to k do begin

For j:=1 to n do

write (m[i,j]);//Выводим первую половину квадрата

writeln;
end;

If (n mod 2 = 0) then begin for i:=1 to n do write(m[k,i]); writeln; end;
//Если основание квадрата четное - дублируем центральную строку

For i:=(k-1) downto 1 do begin

For j:=1 to n do

write (m[i,j]); //Выводим вторую половину квадрата

writeln;
end;
readln;
end.

Нажмите, чтобы раскрыть...

Посмотри лучше мой комментарий и напиши в один цикл.

ITWispa

Пользователь

Регистрация: 30.07.2014

Сообщения: 1060

Рейтинг: 452

ITWispa

Регистрация: 30.07.2014

Сообщения: 1060

Рейтинг: 452

drafff сказал(а):
Посмотри лучше мой комментарий и напиши в один цикл.
Нажмите, чтобы раскрыть...

Уже посмотрел. Я не спорю, что мое решение хуже - решал в лоб.

drafff

Пользователь

Регистрация: 26.06.2013

Сообщения: 8261

Рейтинг: 3093

drafff

Регистрация: 26.06.2013

Сообщения: 8261

Рейтинг: 3093

ITWispa сказал(а):
Уже посмотрел. Я не спорю, что мое решение хуже - решал в лоб.
Нажмите, чтобы раскрыть...

Просто тебе нужно поесть шоколадного мороженного, оно очень помогает программировать.

ITWispa

Пользователь

Регистрация: 30.07.2014

Сообщения: 1060

Рейтинг: 452

ITWispa

Регистрация: 30.07.2014

Сообщения: 1060

Рейтинг: 452

drafff сказал(а):
Посмотри лучше мой комментарий и напиши в один цикл.
Нажмите, чтобы раскрыть...

В 2 цикла. Нужны же столбцы и строки.

ITWispa

Пользователь

Регистрация: 30.07.2014

Сообщения: 1060

Рейтинг: 452

ITWispa

Регистрация: 30.07.2014

Сообщения: 1060

Рейтинг: 452

drafff сказал(а):
Просто тебе нужно поесть шоколадного мороженного, оно очень помогает программировать.
Нажмите, чтобы раскрыть...

Не надо меня дразнить, я о мороженом только мечтаю.

ITWispa

Пользователь

Регистрация: 30.07.2014

Сообщения: 1060

Рейтинг: 452

ITWispa

Регистрация: 30.07.2014

Сообщения: 1060

Рейтинг: 452

drafff сказал(а):
Посмотри лучше мой комментарий и напиши в один цикл.
Нажмите, чтобы раскрыть...

Спойлер:


program project1;
uses math;
var
n:integer;
i, j:integer;
s:string;

begin
For i:=1 to n do begin

For j:=1 to n do begin

str((min(min(i, j),min(n-i, n-j)),s);

write (s);

end;

writeln;
end;
readln;
end.



AndreyChu

Пользователь

Регистрация: 24.05.2014

Сообщения: 179

Рейтинг: 142

AndreyChu

Регистрация: 24.05.2014

Сообщения: 179

Рейтинг: 142

Благодарю всех за ответы. Буду пробовать двумя способами