Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вывод треугольника Паскаля  (Прочитано 13131 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ЛюдMila
Гость
« : 11-06-2009 13:42 » 

задание: вывести треугольник паскаля с заданным количеством строк. массив для треугольника расситан. но вот как его вывести - возникает проблема. максимум что придумала - такой код
//Вывод результата
for I:= 1 to N do
 begin
 S:='';
for J:= 1 to I do
s:=' '+s+ ' '+ floattostr(a[I, J])+' ';
memo1.Lines.add(s);

в memo отображается (пробелы сохранены):
  1
   1  1
    1  2  1
     1  3  3  1
      1  4  6  4  1
       1  5  10  10  5  1

как изменить код чтобы числа выводились в виде треугольника (чтобы число отступов уменьшалось сверху-вниз)?

Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 11-06-2009 14:06 » 

Для этого тебе надо знать ширину основания

т.е. строишь треугольник
он получается у тебя прямоуголный
затем определяешь длину основания и от него пляшешь

или попытаться построить треугольник не с вершины, а с основания
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 11-06-2009 14:08 » 

а если сделать так?
Код:
for I:= 1 to N do
 begin
 S:='';
for J:= 1 to I do
s:=+s+ ' '+ floattostr(a[I, J])+' ';
memo1.Lines.add(s);
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 11-06-2009 14:11 » 

или
Код:
or I:= 1 to N do
 begin
 S:='';
for J:= N downto I do
s:=' '+s+ ' '+ floattostr(a[I, J])+' ';
memo1.Lines.add(s);

зы код не проверял
но судя по всему что треугольник уже находится в массиве, то получится перевернутый треуголник
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
ЛюдMila
Гость
« Ответ #4 : 14-06-2009 00:52 » 

а если сделать так?
Код:

for I:= 1 to N do
 begin
 S:='';
for J:= 1 to I do
s:=' '+s+ ' '+ floattostr(a[I, J])+' ';
memo1.Lines.add(s);'

выводит
  1
   1  1
    1  2  1
     1  3  3  1
      1  4  6  4  1
а если

or I:= 1 to N do
 begin
 S:='';
for J:= N downto I do
s:=' '+s+ ' '+ floattostr(a[I, J])+' ';
memo1.Lines.add(s);

то получается
      0  0  0  0  1
     0  0  0  1
    0  0  1
   0  1
  1

как бы перед первым элементом (1)указать количество пробелов (отступов) равно кол-ву строк т.е. =I, которое задается непосредственно при выполнении программы (расчет треугольника паскаля) но s – это строковый тип, нельзя изначально задать  i*s (при s=’ ‘)…как же поступить?...
Записан
zubr
Гость
« Ответ #5 : 14-06-2009 06:42 » 

2 варианта:
1.
Код:
function ProbelCounter(const prNumber: Integer): string;
var
  i: Integer;
begin
  Result := '';
  for i := 1 to prNumber do
  Result := Result + ' ';
end;
2.
Код:
function ProbelCounter(const prNumber: Integer): string;
var
  s: string;
begin
  SetLength(s, prNumber);
  FillChar(s[1], prNumber, 32);
  Result := s;
end;
Затем применительно к твоей задаче:
Код:
var
  k: Integer;
k := N - 1;
for I:= 1 to N do
begin
  S:=ProbelCounter(k);
  for J:= 1 to N do
  s:= s+  floattostr(a[I, J]);
  memo1.Lines.add(s);
  Dec(k);
end;
2-й вариант функции ProbelCounter будет работать быстрее, хотя возможно для данной задачи это не актуально...
Записан
ЛюдMila
Гость
« Ответ #6 : 18-06-2009 07:58 » new

Спасибо большое, вопросов больше нет.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines