• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Я надеюсь на вас.

  • Автор темы Автор темы Justinn
  • Дата начала Дата начала

Justinn

Новые
Регистрация
12 Янв 2010
Сообщения
15
Реакции
0
Баллы
0
Я надеюсь на вас.

Однажды мне очень сильно помогли на этом форуме за что я ещё раз вас всех благодарю;)так вот мне на днях позвонил одногруппник и просил очень помочь ему с этими заданиями поскольку он сейчас здаёт на права то очень много пропускает:( я ему сказал что я не шпарю в паскале но знаю один форум где очень хорошие люди помогли мне:)и я надеюсь на вашу помощь и в этих задачах:
1
В целочисленном массиве найти максимальный элемент и вывести его индекс. Если он встречается несколько раз, вывести все соответствующие индексы и подсчитать количество вхождений максимума в массив
2
Вычислите значения функции x^3-x^2+16x-43 для x изменяющегося в диапазоне от -4 до 4 с шагом 0,5
 
ну так задачи же элементарные.. пробуйте сами, а мы уже подскажем, что исправить
 
Бы ли бы они для нас элементарные я бы навряд ли бы к вам обратился;),но за совет спасибо:)хоть у меня и наврядли получиться им воспользоваться я в самом описание темы уже объяснял на коком у меня уровень знания в турбо паскале:(
 
ээхх.. сейчас сделаю
 
Спасибо за понимание
 
1.
Код:
uses crt;
var n,i,max,nmax,kmax:integer;
    a:array [1..50] of integer;
begin clrscr;
      write ('Vvedi kol-vo elementov: ');
      readln (n);
      writeln ('Vvodi massiv: ');
      for i:=1 to n do
       read (a[i]);
      max:=a[1];
      nmax:=1;
      for i:=2 to n do
       if a[i]>max then begin
        max:=a[i];
        nmax:=i;
       end;
      for i:=1 to n do
       if a[i]=max then
        inc(kmax,1);
      writeln ('max=', max, '; kolichestvo=', kmax);
      readkey;
end.
 
2.
Код:
uses crt;
var x,y:real;
begin clrscr;
      x:=-4;
      writeln ('  x     y');
      repeat
       x:=x+0.5;
       y:=x*sqr(x)-sqr(x)+16*x-43;
       writeln (x:4:1, y:8:2);
      until x=4;
      readkey;
end.
 
Я очень благодарю вас за оказанною вами помощь для меня и моего друга. как я уже говорил вы ребята делаете людей счастливыми;)
 
разбирайтесь
 
Окей вот это уже в наших силах.Ещё раз спасибо:)
 
Всегда пожалуйста
 
Попробовал вот тоже решить вторую задачу. Только с помощью функции. Но выдает ошибку Floating point overflow. Господа, можете ткнуть пальцем где у меня ошибка ? Уж, не могу сам дойти.

Код:
program funckcija;
         uses crt;
var x:real;

function func(xs:real):real;
begin
func:=x*sqr(x)-sqr(x)+16*x-43;
end;

begin
clrscr;
x:=-4;
repeat
x:=x+0.5*x;
writeln(func(x):8:2);
until x=4;
readln
end.
 
У вас в функции описана переменная xs, а используется х. Попробуйте исправить
 
Ох, точно, не заметил. Но, к сожалению, выдает всё ту же ошибку.
 
Последнее редактирование:
x:=x+0.5*x;
-зачем умножать? написано же, с шагом 0.5:
x:=x+0.5;
И да, смените Real на Double.
 
И да, смените Real на Double.
Это я как-то не очень понимаю - зачем бы? Вроде нигде там особо больших чисел не образуется. У меня, например, проходит без проблем так:
Код:
program funckcija;
uses crt;
var x:real;

function func(xs:real):real;
begin
 func:=xs*sqr(xs)-sqr(xs)+16*xs-43;
end;

begin
 clrscr;
 x:=-4;
 repeat
  x:=x+0.5;
  writeln(x:4:1,func(x):10:2);
 until x=4;
 readln
end.

А вообще я бы, на свой вкус, решал эту задачку так:
Код:
var
 i:integer;
begin
 For i:=-8 to 8 do
  WriteLn(0.5*i:4:1, (0.125*i*i*i-0.25*i+8*i-43):10:2);
 readln;
end.
 
Как я понял, там требуется сосчитать 6 знаков после запятой, а у real точность 5 знаков. Запас по арифметической точности должен быть не менее 5 знаков.
Вообще, при математических расчетах, применять real нужно с осторожностью - точность низкая.

вот тут будут проблемы:
var
i:integer;
begin
For i:=-8 to 8 do
WriteLn(0.5*i:4:1, (0.125*i*i*i-0.25*i+8*i-43):10:2);
readln;
end.

0.5* integer или integer*integer(integer*0.125 - это что? double, extendent или real?
умножение числа с плавающей запятой на целое может создать огромные проблемы новичкам при отладке.
 
Последнее редактирование:
Не согласен ни с одним пунктом.
Как я понял, там требуется сосчитать 6 знаков после запятой
Где Вы это взяли? Еще раз пересмотрел всю ветку - не нашел. А у MrStep'a и Linka и вовсе поставлен формат с двумя знаками.
а у real точность 5 знаков. Запас по арифметической точности должен быть не менее 5 знаков.
Вообще, при математических расчетах, применять real нужно с осторожностью - точность низкая.
Ну очень странно. Формат Real имеет следующие параметры:
Диапазон: -2.9е-39..1.7е38
Количество значащих цифр: 11-12
Количество байтов: 6
И это в очень старой версии Турбо-Паскаля.
И куда тут большая точность?
вот тут будут проблемы:


0.5* integer или integer*integer(integer*0.125 - это что? double, extendent или real?
умножение числа с плавающей запятой на целое может создать огромные проблемы новичкам при отладке.
Да ни малейших проблем тут нет и не будет. Во-первых, я без проверки (трансляции и запуска) сюда, как правило, ничего не выкладываю. Во-вторых, проблем при умножении числа с плавающей запятой на целое не возникает в принципе. Они могут возникнуть при обратной последовательности, каковой в моей программе, как видите, нет. Я избегаю конструкций типа b=i*a, где а и b - вещественные, i - целое. В крайнем случае ставлю доп. множитель: b=1.0*i*a. А что до того, какой формат - это зависит от того, что в данной реализации принято по умолчанию. Обычно, если я не ошибаюсь, Double. Но IMHO в данном случае и Real сойдет.
 
Сложите в два числа типа real
1000000 и 0.01;
теперь аналогично сложите два числа типа double.

Проблема в том, например, что вы знаете, что нужно избегать конструкций вида b=i*a, где а и b - вещественные, i - целое, а те, кто будет писать свой код на основе этого - не знают.
 
Сложите в два числа типа real
1000000 и 0.01;
теперь аналогично сложите два числа типа double.
Сложил. Как и ожидалось, никакой разницы - в обоих случаях 1000000.01. Проблемы возникают только, если применить формат Single - а вот этого, конечно, делать не следует. Вы, вероятно, держите в уме Си-шные форматы.

Проблема в том, например, что вы знаете, что нужно избегать конструкций вида b=i*a, где а и b - вещественные, i - целое, а те, кто будет писать свой код на основе этого - не знают.
Так еще раз повторяю - мой код такой конструкции и не содержит. Между прочим, для проверки переставил в своем коде сомножители так, что i впереди - и тоже проходит. Поэтому и говорю, что проблемы в принципе могут возникнуть. Но не обязательно возникнут.

P.S. А вообще - не IMHO не стОит особенно сокрушаться, что у новичков возникнут такого рода проблемы. Если сумеет их локализовать и преодолеть - то программист и получится!:tehnari_ru_889:
 
Назад
Сверху