![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 10.01.2010
Сообщений: 3
|
![]()
Думаю название темы теперь подходит если нет подскажи как еще назвать, а то фантазия у меня бедная и больная...
Помогите немного курсовую переделать, а то сроки поджимают надо вторую делать по С++ Сейчас она имеет вид: (0- пузырь) % % 0 0 % % 0 0 , , А надо сделать так: 0 % 0 , % 0 % , 0 % 0 , % 0 % , Тоесть надо выводить их не в столбик, а в строчку и проценты чередовать, то сверху то снизу... Кому это легко подскажите что и где исправить... Буду очень благодарен Текст программы // //Курсавая работа //Программа Рисования Пузырьковой Процентной Диаграммы uses GraphABC,Events; var masd,masp:array[1..100]of real; //Массив данных,Массив процентов mascolor:array[1..200]of integer;//Массив цветов i,ic,j,kd,xmax,ymax:integer; //Переменные циклов,счетчики,размеры окна для урезания окна sd:real; //Сумма данных f:text; //Файловая Переменная c:char; //Символьная переменная необходимая для считывания данных с файла st:string; //Строковая переменная необходимая для считывания данных с файла { Функция FlagDraw это функция проверки возможности рисования Входные данные: x,y,rc - координаты центра окружности и радиус этой окружности Выходные данные: Логическое значение True - возможность нарисовать окружность False - не возможность ресования } function FlagDraw(x,y,rc:integer):boolean; var xi,yi,r,di,lim,s,ss:integer; label 1,2,3,4,5,6,7; begin result:=true; r:=rc; xi:=0; yi:=r; di:=2*(1-r); lim:=0; 1: if (getPixel(xi+x,yi+y)<>clwhite)then result:=false; if (getPixel(xi+x,-yi+y)<>clwhite)then result:=false; if (getPixel(-xi+x,yi+y)<>clwhite)then result:=false; if (getPixel(-xi+x,-yi+y)<>clwhite)then result:=false; if yi<lim then goto 4; if di<0then goto 2; if di>0then goto 3; if di=0 then goto 6; 2: s:=2*di+2*yi-1; if s<=0then goto 5; if s>0then goto 6; 3: s:=2*di+2*xi-1; if s<=0then goto 6; if s>0then goto 7; 5:xi:=xi+1; di:=di+2*xi+1; goto 1; 6:xi:=xi+1; yi:=yi-1; di:=di+2*xi-2*yi+2; goto 1; 7:yi:=yi-1; di:=di-2*yi+1; goto 1; 4: end; procedure DrawCircle(var xd,yd,rd:integer);forward;//Объявление что процедура DrawCircle будет описанна позже { Процедура HelpDrawCircle вызывает процедуру рисования DrawCircle Входные данные: arrpr,n - Массив процентов,Размер массива процентов } procedure HelpDrawCircle(var arrpr:array[1..100]of real;n:integer); var x,y,r,rt,winx,winy:integer; begin for i:=1 to n do begin winx:=windowwidth; winy:=windowheight; if (winy*2)>(winx) then rt:=round(winx/6) else rt:=round(winy/3); r:=round((round(arrpr[i]))+rt/5);//Определение радиуса окружности x:=r; y:=r+20; DrawCircle(x,y,r); { Вызов процедуры Рисования Окружности с параметрами x,y,r - Центр окружности и её радиус } end; SetWindowWidth(xmax+r+20); SetWindowHeight(ymax+r+20); { Установка размеров окна xmax и ymax - Переменные хронящие максимальные значения координаты Центра окружности,вычисляемые при рисовании окружностей } end; { Процедура Redraw сробатывает при изменении размера окна Процедура очищяет окно,обнуляет щетные переменные И вызывает процедуру HelpDrawCircle с параметрами masp,kd - Глобальный Массив процентов,Глабальная переменная хранящая число данных } procedure Redraw; begin if ((WindowWidth>400)and(WindowHeight> 150))then begin clearwindow; ic:=1;xmax:=0;ymax:=0; HelpDrawCircle(masp,kd); end; end; { Процедура DrawCircle это процедура рисования окружностей Входные данные: xd,yd,rd - Центр окружности и её радиус Результат работы процедуры Одна Окружность нарисованная в графическом окне В свободном месте } procedure DrawCircle(var xd,yd,rd:integer); var s:string; rt,winx,winy:integer; flag:boolean; begin s:=''; flag:=true; s:=inttostr(round(masp[i]))+'%';// s - Строка в которой хранится |
![]() |
![]() |
![]() |
#2 |
Регистрация: 10.01.2010
Сообщений: 3
|
![]()
Процентное значение для каждого данного
while flag do begin if (FlagDraw(xd,yd,rd)=true)and(FlagDr aw(xd,yd,rd+20)=true)and(FlagDraw(x d,yd,rd+10)=true) then { Наиважнейшее условие рисование окружности Вызов функции проверки возможности рисования FlagDraw с парамитрами xd,yd,rd Центр окружности и её радиус Также проверяется rd+20,rd+10 радиус окружности больше на 10 и 20 пикселей Для возможности вывода Информации о процентнах } begin circle(xd,yd,rd); //Рисование Окружности floodfill(xd,yd,mascolor[ic]); //Заливка окружности цветом из Глобального Массива Цветов textout(xd-10,yd-rd-17,s); //вывод Информации о Процентном значении flag:=false; ic:=ic+1; end else begin yd:=yd+20; if (xd>=WindowWidth)and(yd>=WindowHeig ht)then begin xd:=0;yd:=0; rd:=round((round(masd[i]))-rt/5); ClearWindow; HelpDrawCircle(masp,kd); flag:=false; end; if (yd>=WindowHeight)then begin xd:=xd+10; yd:=0; end; end; end; if (xd>xmax)then xmax:=xd; if (yd>ymax)then ymax:=yd; end; {ОСНОВНАЯ ПРОГРАММА} Begin setwindowsize(400,300); //Установка Размеров окна CenterWindow; //Центрирование Окна st:=''; j:=1; xmax:=0;ymax:=0; Assign(f,'fd.txt'); //Связь файловой переменной с Файлом на диске //====Проверка Сушествования файла на диске=== if (FileExists('fd.txt')=false) then begin textout(round(WindowHeight/2)-30,130,'Фаил с Данными на диске не найден!'); halt; end else reset(f);//Открытие файла //====Проверка формата файла============= while not(eof(f)) do begin read(f,c); if ((c<>' ')and(c<>'.')and ((ord(c)<48)or(ord(c)>57)))then begin textout(round(WindowHeight/2)-30,130,'Фаил имеет не правильный формат!'); close(f); halt; end; end; close(f); //Закрытие файла reset(f); //Открытие файла //=====Опроделение кол-ва данных== while c<>' ' do begin read(f,c); if c<>' ' then st:=st+c; end; kd:=strtoint(st); st:=''; c:=#0; //======Создание Массива Цветов== for ic:=1 to kd do mascolor[ic]:=rgb(random(255),random(255),rando m(255)); { Генерация Случайного Значения кода цвета для процедуры rgb() Запись кода цвета возвращяемого процедурой rgb() в Глобальный Массив Цветов } ic:=1; //=====Создание Массива Данных== while not(eof(f)) do begin while c=' ' do read(f,c); c:=#0; while not(eof(f))and (c<>' ') do begin read(f,c); st:=st+c; end; if st<>' ' then begin masd[j]:=strtofloat(st); j:=j+1; end; st:=''; c:=#0; end; //====Подсчет суммы данных== for i:=1 to j-1 do sd:=sd+masd[i]; //====Создание массива процентов== for i:=1 to j-1 do begin masp[i]:=(masd[i]*100)/sd; end; HelpDrawCircle(masp,kd); //Вызов процедуры HelpDrawCircle OnResize:=redraw; //Событие срабатывающие при изменениях окна close(f); //Закрытие файла end. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 10.01.2010
Сообщений: 3
|
![]()
Что нет умных что ли...
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
скрипт выводит в столбик а надо в строчку | zander | PHP | 2 | 04.01.2010 21:53 |
Как сделать так, чтобы в корректно отображались русские буквы(С) | Александр Елис | Помощь студентам | 0 | 06.11.2009 19:39 |
Подскажите! как сделать так что бы при выборе какого либо наименования в раскрывающемся списке в соседней | xниколай | Microsoft Office Excel | 1 | 14.10.2009 17:10 |
Как сделать так,чтобы в StatusBar-е отображались некоторые сведения из БД???? | Alexij | БД в Delphi | 1 | 16.06.2008 07:53 |
Как сделать так, чтобы в TLabel отображались текущее системное время? | Bill Gates | Общие вопросы Delphi | 3 | 03.01.2008 01:12 |