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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2011, 07:08   #11
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Rin Посмотреть сообщение
Только после того, как Ты поправил меня, я увидел, что не так понял задачу.
Мне почудилось, что нужно вывести не индексы полных квадратов, а числа в массиве, такие как :4, 9, 16, 25,..., 256 или 625, а если таких чисел в массиве нет, то ничего не будет на экране.
Вот я лошара))).
Да ладно тебе )), ерунда какая. Я вот тоже не посмотрел внимательно, _что_именно_ ты проверяешь )).
Цитата:
А это как?
Допустим, a и b получены в результате вычислений, в которых могла накопиться ошибка. Тогда, если даже в теории они должны совпадать, на практике они могут отличаться. Если вычисления проводились правильно (то есть по возможности избегались ситуации с большой потерей точности), то отличие будет не очень велико. Тогда вместо
if a=b then ...
нужно писать
if Abs(a-b)<Eps then ...
Тут Eps - это некоторый малый параметр, который в общем случае зависит от масштаба чисел, то есть его невозможно указать заранее для всех случаев. Если задавались числа порядка единицы и с ними проводились вычисления типа теоремы Пифагора (ну, например)), то можно положить Eps равным грубо говоря десятикратной точности представления числа. Например, при использовании (в Pascal) типа double точность равна примерно 1e-16. Тогда можно выбрать Eps равным 1e-15.
Это все приблизительно, в каждом случае надо думать заново. Но факт тот, что простое равенство работать не будет.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 19.09.2011, 10:09   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Rin,
вставлю и свои "5 копеек" по поводу действительных чисел.

если непонятно, что выдаст вот такой кусочек кода:
Цитата:
Код:
var R:Single;
 begin
  R:=0.1;
  if R=0.1 then
   Label1.Caption:='Равно'
  else
   Label1.Caption:='Не равно'
 end;
тогда,
для понимания происходящих процессов обычно (в очередной раз) рекомендую ознакомиться с:

статья Антона Григорьева "Неочевидные особенности вещественных чисел"

и статья Загадки округления
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.09.2011, 14:41   #13
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

For TinMan
Давно уж забыл я матан из универа и вспоминаю с диким ужасом, т.к. преподаватель был не ахти. Но формулу |альфа - бэта|< эпсилон почему-то запала мне в душу, по видать не так сильно, потому что я её не додумался применять в программировании и забыл про неё.
For Serge_Bliznykov
Статья Антона Григорьева "Неочевидные особенности вещественных чисел" попадалась на глаза ранее и я дико угарел с этих косяков.
А вот по поводу статьи "Загадки округления" есть один вопрос:
Цитата:
Возникает вопрос: неужели в Borland не знают об этой ошибке? Оказывается, знают еще с августа 2003 года. Соответствущие Public Reports в Quality Central на Borland Developer Network: 5486, 8070, 8143. Кстати, первый же комментарий под заявкой таков: "Кто-нибудь может объяснить, почему они присвоили этой ошибке такой низкий рейтинг?...". Я не могу.

К счастью, нашелся неравнодушный человек по имени John Herbster, который предложил собственную реализацию функций округления, и выложил ее для всеобщего использования. Взять их можно там же, на Borland Developer Network (ссылки под упомянутыми Public Reports, регистрация на BDN бесплатная). В моих тестах они не дали ни одной ошибки, так что всячески рекомендую.
Вырезка из статьи.
Так вот. Не осталось ли у Вас,Serge_Bliznykov ,кода John'a Herbster'a , ибо линк Quality Central на Borland Developer Network не пашет.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 20.09.2011, 21:51   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Так вот. Не осталось ли у Вас,Serge_Bliznykov ,кода John'a Herbster'a ,
нет, к сожалению...

Если моя вера в Borland/Emabarcadero оправдана, то я думаю, что это уже неактуально - в новых версиях Delphi это учтено (подчёркиваю - я лично не проверял!).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.09.2011, 17:13   #15
абвгд
Пользователь
 
Регистрация: 04.09.2011
Сообщений: 19
По умолчанию

Объясните пожалуйста элемент кода, что там делается?:
Код:
if ((i<=k)and(j>k-i)and(j<=k+i-1)) 
    or((i>k)and(j>=i-k+1)and(j<=n-i+k)) then
Код:
uses crt;
const nmax=15;
var a:array[1..nmax,1..nmax] of integer;
    n,i,j,k,dl,dp:byte;
    sm:integer;
begin
clrscr;
randomize;
repeat
write('Размер матрицы, нечетное число от 3 до ',nmax,' n=');
readln(n);
until (n in [3..nmax])and(n mod 2<>0);
k:=n div 2+1;
sm:=0;
writeln('Исходная матрица:');
for i:=1 to n do
 begin
  for j:=1 to n do
   begin
    a[i,j]:=random(20);
    if ((i<=k)and(j>k-i)and(j<=k+i-1))
    or((i>k)and(j>=i-k+1)and(j<=n-i+k)) then
     begin
      textcolor(12);
      sm:=sm+a[i,j];
     end
    else textcolor(15);
    write(a[i,j]:4);
   end;
  writeln;
 end;
writeln;
write('Сумма=',sm);
readln
end.

Последний раз редактировалось Serge_Bliznykov; 29.09.2011 в 18:13.
абвгд вне форума Ответить с цитированием
Старый 29.09.2011, 17:21   #16
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Определяется, что элемент находится в нужном месте (ну чтобы ромб получился в матрице или что там рисуется).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 29.09.2011, 17:53   #17
абвгд
Пользователь
 
Регистрация: 04.09.2011
Сообщений: 19
По умолчанию

Не, ну понятно, что это и есть основное действие. Просто я не понимаю что происходит внутри дословно.
И для чего присваиваем k:=n div 2+1? k - это вообще искомые элементы матрицы?
абвгд вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задачки (Массивы) Pandemona18 Паскаль, Turbo Pascal, PascalABC.NET 3 08.03.2011 12:44
2 Задачки на массивы в Паскале Nikolai17 Помощь студентам 6 19.11.2009 17:26
задачки на массивы в Си Defa4ka Помощь студентам 2 25.10.2009 18:03
Задачки на массивы Маськ@ Паскаль, Turbo Pascal, PascalABC.NET 4 20.12.2008 15:26