Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2016, 10:00   #1
andy95
Новичок
Джуниор
 
Регистрация: 01.07.2016
Сообщений: 5
По умолчанию [Delphi] объяснить почему так

тема избитая конечно, но все таки. Задали мне кароче задание на паскале, я его сделал, расчет делает, но высчитывает были немного отличны от истины или вообще не совпадали. Решил обратиться за помощью в наш всеми любимы гугл. После 5 часовой ходьбе по просторам интернета наткнулся наконец- то на то что искал. Но появилась ещё одна небольшая проблема. Та часть которую я написал не правильно в скаченной программе работает но КАК? собственно моя просьба объясните мне как это все работает.
Код:
Repeat
    inc(k); (-что это и как оно работает)
     if k <> 1 then
       for i:=1 to n do
         x_prev[i]:=x_tmp[i];
    for i:=1 to n do
      begin
         sum1:=0;
        for j:=1 to i-1 do
          sum1:=sum1 + a[i,j] * x_prev[j];
          sum2:=0;
        for j:=i+1 to n do
          sum2:=sum2 + a[i,j] * x_prev[j];
          x_cor[i]:=(b[i] - sum1 - sum2)/a[i,i];
      end;
    for i:=1 to n do
      x_tmp[i]:=x_cor[i];
      max:=1;
    for i:=1 to n-1 do
      if abs(x_cor[max]-x_prev[max]) < abs(x_cor[i+1]-x_prev[i+1]) then
         max:=i+1;
  Until  abs(x_cor[max]-x_prev[max]) < e; (- что такое abs?я думаю что модуль но ведь и могу ошибаться)

Последний раз редактировалось Аватар; 02.07.2016 в 14:03.
andy95 вне форума Ответить с цитированием
Старый 02.07.2016, 10:12   #2
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Если у вас TurboPascal, установите курсор на непонятное слово и нажмите Ctrl-F1.
FPaul вне форума Ответить с цитированием
Старый 02.07.2016, 12:22   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Как звучит оригинал задания?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 02.07.2016, 13:21   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

По вопросам:
1. inc(k); (-что это и как оно работает)
Это
Код:
k := k + 1;
В общем случае это:
Код:
inc(k,N);    {k := k + N;}
2.
Код:
Until abs(x_cor[max]-x_prev[max]) < e; (- что такое abs?я думаю что модуль но ведь и могу ошибаться)
Правильно думаешь. Поскольку разность может быть как положительной, так и отрицательной, то для сравнения с положительным числом, в этом случае, следует брать модуль разности.

PS: Код легче читается, если его форматировать и заключать в специальные скобки. Выдели код и нажми символ # , который есть на панели окна редактора.

Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 02.07.2016, 13:28   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
PS: Код легче читается, если его форматировать и заключать в специальные скобки.
код лучше читается, когда пишешь и отлаживаешь его сам.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 02.07.2016, 13:33   #6
andy95
Новичок
Джуниор
 
Регистрация: 01.07.2016
Сообщений: 5
По умолчанию

ViktorR Спасибо огромное
andy95 вне форума Ответить с цитированием
Старый 02.07.2016, 13:36   #7
andy95
Новичок
Джуниор
 
Регистрация: 01.07.2016
Сообщений: 5
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
код лучше читается, когда пишешь и отлаживаешь его сам.
это да, просто я же говорил насчет того что написанная мной программа высчитывает с погрешностью с большой погрешностью поэтому мне пришлось воспользоваться программой которую написал другой человек.
Не надо судить строго.
andy95 вне форума Ответить с цитированием
Старый 02.07.2016, 13:53   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Не надо судить строго.
Да мне пофиг ваще. Я имел в виду, что чужой код ковырять сложнее, чем свой. И всё.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 02.07.2016, 14:58   #9
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

По поводу inc(a, b).

По действию/результату кажется, что эта операция эквивалентна a:=a + b (для целых чисел). На самом деле здесь есть некоторые особенности.

1. Согласно информации, прочитанной ещё в институте (поскольку это было методическое пособие с заданиями на курсовое проектирование, её можно считать достоверной), операция инкремента (inc) работает быстрее, чем сложение через "плюс".

2. В достоверности того, о чём сейчас буду говорить, убедился на собственном опыте.
Я не знаю, как обстоят дела в turboPascal, но в Delphi (по крайней мере версия 7.0) есть сущность, имеющая вроде бы как тип Integer, для которой результаты работы inc(a, b) и a:=a+b - различаются между собой. Это свойство визуального компонента stringGrid rowCount.
Так, код
Код:
StringGrid1.RowCount:=2;
StringGrid1.RowCount:=StringGrid1.RowCount + 2;
компилируется и даёт вполне ожидаемый результат, в то время как такой код:

Код:
StringGrid1.RowCount:=2;
inc(StringGrid1.RowCount, 2);
не компилируется и приводит к ошибке:
Цитата:
[Error]: Left side cannot be assigned to
.
Курсор встаёт на красную строку.
Вадим Мошев вне форума Ответить с цитированием
Старый 02.07.2016, 15:11   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
1. Согласно информации, прочитанной ещё в институте (поскольку это было методическое пособие с заданиями на курсовое проектирование, её можно считать достоверной), операция инкремента (inc) работает быстрее, чем сложение через "плюс".
зависит от компайлера, его настроек и оптимизации.
Цитата:
Курсор встаёт на красную строку.
вадик, ты белены обкурился? Это ж не переменная и не поле, а свойство! Ясен пень, его нельзя передавать, как var-параметр!

ну ваще!...
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему все так не любят Delphi adkomissarov Общие вопросы Delphi 130 30.04.2015 07:28
прошу объяснить почему не работает регуляр frommars PHP 2 07.05.2012 11:12
Кто нибудь может объяснить почему это так? Fedor111 Общие вопросы C/C++ 1 24.09.2011 20:12
кто может объяснить,почему на моем компе программа работает на других нет?код в Delphi Symba Общие вопросы Delphi 1 24.03.2011 01:03