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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2017, 11:24   #11
Мария34
Пользователь
 
Регистрация: 30.04.2017
Сообщений: 40
По умолчанию

Меня просто в метадичке сбила эта формула

Спасибо сейчас попробую доделать найти мин и мах

Так скажите правильно ли я использовала для нахождения min и max вот такую часть кода?
Код:
min:=1;
   for i:=2 to NMAS do if x[i]<x[min] then min:=i;
   writeln('min element is: x[',min,']=',x[min]);
Код:
max:=1;
   for i:=2 to NMAS do if x[i]<x[max] then max:=i;
   writeln('max element is: x[',max,']=',x[max]);
И такой вопрос, а как быть с построение гистограммы? Код который в методичке подойдет?

От модератора: Пожалуйста, пользуйтесь кнопкой "Правка", чтобы дописать что-либо к своему последнему сообщению, а не создавайте новое.

Последний раз редактировалось Вадим Мошев; 21.05.2017 в 12:00.
Мария34 вне форума Ответить с цитированием
Старый 22.05.2017, 09:48   #12
Мария34
Пользователь
 
Регистрация: 30.04.2017
Сообщений: 40
По умолчанию

Ну кто-нибудь ответе
Мария34 вне форума Ответить с цитированием
Старый 22.05.2017, 11:20   #13
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

Правильно. Только мин. и макс. можно искать в одном и том же цикле. В макс эту хреновину < в другу сторону развернуть надо. И надо помнить, что при таком коде в min,max будут не сами минимум и максимум, а их индексы в массиве. Насчет гистограммы - надо разметить N участков на интервале от 1 до 3 и подсчитать число элементов, попадающих внутрь каждого участка. Для этого хорошо подходит case Затем визуализировать - длина столбика пропорциональна числу этих элементов. Как отображать - графикой, псевдографикой или как - на вкус и цвет все фломастеры разные. Простейший вариант :
|***
|******
|********
|***
Только рассматривать этот вариант - надо монитор (или бошку) на 90гр. поворачивать. Можно и не поворачивать, но код чуть-чуть посложнее будет
*
* * *
* * * *
* * * *
* * * * *
--------------
Ну вот, в этом форуме движок убирает лишние пробелы, получается не гистограмма, а бред собачий. А имелось в виду вот что:
Изображения
Тип файла: jpg Hist.JPG (2.2 Кб, 74 просмотров)

Последний раз редактировалось digitalis; 22.05.2017 в 14:56.
digitalis вне форума Ответить с цитированием
Старый 22.05.2017, 15:12   #14
Мария34
Пользователь
 
Регистрация: 30.04.2017
Сообщений: 40
По умолчанию

Так а мне нужно поидее что бы сам Х мин и мах читался.

А про гистограмму так у меня массив поидеи идет. БЛин я опять запуталась, фух ладно щас попробую разобраться.
Мария34 вне форума Ответить с цитированием
Старый 23.05.2017, 10:30   #15
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

Я бы сделал так :
Код:
var  MaxVal,MinVal : real ;

   MaxVal := x[i] ;
   MinVal := x[i] ; 
   for i:=2 to NMAS do 
     begin 
       if x[i] < MinVal  then  MinVal = x[i] ;
       if x[i] > MaxVal  then  MaxVal = x[i]
    end ;
   writeln ('Min element is: ', MinVal, ' Max element is: ', MaxVal);
Насчет гистограммы не понял : если есть массив, значит, уже и гистограмма готова ?
Фигушки. Нужно сделать другой, целочисленный массив (назовем его hist[0..9]), обнулить его, и затем, прошерстив исходный массив, инкрементировать тот элемент массива hist, который соответствует интервалу, куда попадает элемент исходного массива.
Сложно словами... В коде проще:
Код:
   for i:=2 to NMAS do 
     begin
       if (x[i] >= 2) and (x[i] < 2.1) then Inc (hist[0]) ;
.......................
     end ;
Конечно, так тупо кучей if никто не делает, для этого существует case. Как оно работает - об этом узнаешь, прочитав соотв. страничку учебника.

Последний раз редактировалось digitalis; 23.05.2017 в 10:33.
digitalis вне форума Ответить с цитированием
Старый 23.05.2017, 11:01   #16
Мария34
Пользователь
 
Регистрация: 30.04.2017
Сообщений: 40
По умолчанию

То есть что-то типо этого не подойдет?

Вот:
Код:
Procedure Histogr(const Data: array [1..MaxK] of 
                  extended);
Var
  mx,my,x0,y0,x,hgt,wdt,i,Step:word;
  MaxX,Sc:extended;
  s:string;
Begin { Histogr }
  mx:=GetMaxX; { размер экрана по горизонтали }
  my:=GetMaxY; { размер экрана по вертикали }
  x0:=16;      { Начало координат }
  y0:=my-16;
  wdt:=mx-2*16;{ Ширина гистограммы по горизонтали}
  hgt:=my-2*16;{ Ширина гистограммы по вертикали }
  MaxX:=Data[1]; { Определяем масштабный коэффициент }
  For i:=2 to MaxK do
    If Data[i]>MaxX 
      then MaxX:=Data[i];
  Sc:=hgt/MaxX;
  Step:=Trunc(wdt/MaxK);
  ClearDevice;     { Рисуем гистограмму }
  SetColor(White);
  SetFillStyle(SolidFill,Blue);
  SetTextStyle(DefaultFont,VertDir,1);
  x:=x0;
  For i:=1 to MaxK do begin
    mx:=x+Step;
    my:=Trunc(Sc*Data[i]);
    Rectangle(x,y0,mx,y0-my);
    Bar(x+1,y0-1,mx-1,y0-my+1);
    Str(Data[i]:5:3,s);
    If my>7*8 
      then OutTextXY(x+12,y0-my+4,s)
      else OutTextXY(x+12,y0-my-6*8,s);
    x:=mx
  end;
  ReadLn { Пауза }
End; { Histogr }

Последний раз редактировалось Мария34; 23.05.2017 в 12:23.
Мария34 вне форума Ответить с цитированием
Старый 23.05.2017, 12:51   #17
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

Это процедура визуализации гистограммы, да к тому же с автомасштабированием - чересчур жирно. Предварительно ее (гистограмму) надо cформировать (рассчитать) .
Код:
    for i :=0 to 9 do hist[i] := 0 ;
    for i:=1 to NMAS do 
     begin
       n := Trunc((x[i]-2.0)*10.0) ;
       Inc (hist[i])
     end ;
Вот, глистограмма сформирована (и без case, подумавши, обошлись). Визуализировать в Дельфи легко, там это выглядит вроде как (см. рис.), а на Паскале я никогда этой ерундой (графикой) не занимался. Как нарисовать 10 прямоугольников фикс. ширины с длиной, пропорциональной заданному числу - товарищи подскажут. Вот первое попавшееся на глаза о графике в Паскале:
http://znatok.grodno.by/Grafika_Pascal/index2.htm Мне разбираться лень, да и кота пора кормить.
А кроме искать в инете и приспособить под свои нужды - никак ? Попробовать самой написать, не вышло - исправить, попробовать снова. Это и есть учеба.
Изображения
Тип файла: jpg Hist1.JPG (7.5 Кб, 73 просмотров)

Последний раз редактировалось digitalis; 23.05.2017 в 13:56.
digitalis вне форума Ответить с цитированием
Старый 23.05.2017, 15:20   #18
Мария34
Пользователь
 
Регистрация: 30.04.2017
Сообщений: 40
По умолчанию

Не много подправила ваш код
Код:
var  MaxVal,MinVal : real;

   MaxVal := x[i];
   MinVal := x[i]; 
   for i:=2 to NMAS do 
     begin 
       if x[i] < MinVal  then  MinVal := x[i];
       if x[i] > MaxVal  then  MaxVal := x[i];
    end ;
   writeln ('Min element is: ', MinVal, ' Max element is: ', MaxVal);
Иначе он у меня не хотел работать.
И вставила в основной код.
Код:
program Lab1;

const NMAS=1000;
type tMass=array[1..NMAS] of Extended;

Procedure Otcenki(const x: tMass;var Mx,Dx:Real);
Var
  i:integer;
Begin
  Mx:=0; Dx:=0;
  For i:=1 to NMAS do Mx:=Mx+x[i];
  Mx:=Mx/NMAS;
  For i:=1 to NMAS do Dx:=Dx+Sqr(x[i]-Mx);
  Dx:=Dx/NMAS;
end;

Var
  Mx,Dx,a,b,r:real;
  x:tMass;
  i :word;
  MaxVal,MinVal : real;
Begin
  Write('a  b:   ');
  ReadLn(a,b);
  Randomize;
  For i:=1 to NMAS do
   begin
    r:=Random;
    x[i]:=a+r*(b-a);
   end;
   MaxVal := x[i];
   MinVal := x[i]; 
   for i:=2 to NMAS do 
     begin 
       if x[i] < MinVal  then  MinVal := x[i];
       if x[i] > MaxVal  then  MaxVal := x[i];
     end;
  Otcenki(x,Mx,Dx);
  Writeln ('Min element is: ', MinVal, ' Max element is: ', MaxVal);
  WriteLn(Mx,Dx,Sqrt(Dx));
  ReadLn;
End.
Но теперь не могу понять как подключить вот этот ваш фрагмент?
Код:
 for i :=0 to 9 do hist[i] := 0 ;
    for i:=1 to NMAS do 
     begin
       n := Trunc((x[i]-2.0)*10.0) ;
       Inc (hist[i])
     end ;
Мария34 вне форума Ответить с цитированием
Старый 23.05.2017, 15:49   #19
Мария34
Пользователь
 
Регистрация: 30.04.2017
Сообщений: 40
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Это процедура визуализации гистограммы, да к тому же с автомасштабированием - чересчур жирно.
Да мне на данный момент без разницы. Самое главновное что бы рисовалась гистограмма.
Мария34 вне форума Ответить с цитированием
Старый 23.05.2017, 19:53   #20
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

Да очень просто : в var добавить hist[0..9], в тело программы, перед последним end'ом - этот фрагмент кода. Насчет визуализации не могу подсказать - у меня древний ТурбоПаскаль, графика в нем не работает (почему - не знаю, он у меня валяется так, на всяк случай, решить простые лабы студеням), а из Дельфи графика, думаю, мало что поможет. Можно псевдографикой, символами, но это чересчур по школярски.
Пусть Неверов нарисует

Последний раз редактировалось digitalis; 23.05.2017 в 19:56.
digitalis вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти значение случайной величины по методу Монте-Карло Вероника99 Помощь студентам 0 13.07.2016 19:41
математическое ожидание для дискретной случайной величины Делфи 7 программирование Помощь студентам 2 10.10.2013 21:39
Нормальный (Гауссовский) закон распределения VOVA-74 C++ Builder 0 19.02.2013 18:33
закон распределения Эрланга. Lenr88 Паскаль, Turbo Pascal, PascalABC.NET 0 13.02.2012 12:56