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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2015, 15:17   #1
Niv
Пользователь
 
Регистрация: 18.06.2015
Сообщений: 24
По умолчанию PascalABC.NET - Рассмотреть класс геометрических фигур, квадрат, круг, треугольник

ИЛИ ПРОСТО ОПИШИТЕ КЛАСС ГЕОМЕТРИЧЕСКИЕ ФИГУРЫ, КАК ПОСЧИТАЕТЕ НУЖНЫМ.


Помогите пожалуйста. В программирование не силен.
Как работать с классами не знаю.

Нужно, что бы выглядело так:

Меню программы:
1. Треугольник
2. Круг
3. Квадрат
Выбираем нужную геометрическую фигуру (вводим с клавиатуры например 2).
Программа просит, задать размер фигуры, в даном случае размер круга (его радиус).
Вводим с клавиатуры например 7.
Программа просит выбрать цвет фигуры.
1. Красный
2. Оранжевый
3. Желтый
4. Зеленый
5. Голубой
6. Синий
7. Фиолетовый
Выбираем нужный цвет например 4.
Программа выводит графическое окно, в которой нарисован зеленый круг радиусом 7.
И для всего этого добра нужно рассмотреть класс геометрических фигур.

Есть мой код выглядит так, его надо доделывать сильно.

Код:
Program classfigur;
Uses graphabc;
Var
  n: Byte;
 
procedure krug;
begin
Circle(500,200,100);
FLOODFILL(500,200,clred);
end;
 
procedure kvadr;
begin
line(200,1,440,1);
line(440,1,440,240);
line(440,240,200,240);
line(200,240,200,1);
FLOODFILL(240,200,clblue);
end;
 
procedure treug;
begin
line(300,100,500,300);
line(500,300,100,300);
line(100,300,300,100);
FLOODFILL(300,200,clgreen);
end;
 
begin
  repeat
  WriteLn('1-Круг');
  WriteLn('2-Квадрат');
  WriteLn('3-Треугольник');
  WriteLn('4-Выход');
  Write('5-Следующая фигура: ');
  ReadLn(n);
  Case n of
    1: krug;
    2: kvadr;
    3: treug;
  end;
  until n <> 0;
end.
Предусмотреть методы для создания объектов, изменения размеров и цвета.
Спасибо.

еще нужно что бы выводил данные о фигурах(место расположение и размер)

Нашел такой код, но он на с++, пожалуйста сделайте на паскаль абс, без вращения.

Код:
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include<conio.h>
#include<stdio.h>
class PGF{
double a[4][2], n, ax, ay, axn,ayn,axn1,axn2,ayn1,ayn2, cx, cy,  i;
double r;
int nf;
public:
void Vibor();
void Vvod();
void Perem();
void Izm_raz();
void Vrash();
void Vivod();
};
void main()
{ PGF a;
clrscr();
a.Vibor();
a.Vvod();
a.Vivod();
a.Perem();
a.Vivod();
a.Izm_raz();
a.Vivod();
a.Vrash();
a.Vivod();
}
//выбор фигуры
void PGF::Vibor()
{
cout<<endl;
cout<<"Выберите фигуру: круг-1, квадрат-2, прямоугольник-3";
cout<<endl;
cin>>nf;
}
//создание
void PGF::Vvod()
{
if (nf==1)
{ cout<<endl;cout<<"Введите параметры круга \n";
cout<<" cx=";cin>>cx;cout<<" cy=";cin>>cy;cout<<" r=";cin>>r;
cout<<endl;
}
if (nf==2)
{
cout<<endl;cout<<"Введите параметры квадрата ";cout<<endl;
cout<<"Координаты центра:\n cx=";cin>>cx;
cout<<" cy=";cin>>cy;
cout<<"Вектор от центра до вершины:\n";
cout<<" ax=";cin>>ax;cout<<" ay=";cin>>ay;
}
if (nf==3)
{
cout<<endl;cout<<"Введите параметры прямоугольника";cout<<endl;
cout<<"Координаты центра:\n cx=";cin>>cx;
cout<<" cy=";cin>>cy;
cout<<"Вектор от центра до вершины:\n";
cout<<" ax=";cin>>ax;cout<<" ay=";cin>>ay;
}
}
//вывод
void PGF::Vivod()
{
cout<<"Параметры фигуры";
cout<<endl;
if (nf==1)
{cout<<endl;cout<<"cx="<<cx<<" cy="<<cy<<" r="<<r;
cout<<endl;
}
if (nf==2)
{
cout<<endl;
cout<<"cx="<<cx<<" cy="<<cy<<" ax="<<ax<<" ay="<<ay;
cout<<endl;cout<<endl;
}
if (nf==3)
{
cout<<endl;
cout<<"cx="<<cx<<" cy="<<cy<<" ax="<<ax<<" ay="<<ay;
cout<<endl;
}
}
//перемещение на плоскости
void PGF::Perem()
{ int sx,sy;
cout<<"Введите координаты смещения фигуры ";
cout <<endl;
cout<<"Смещение по X= ";cin>>sx;
cout<<"Смещение по Y= ";cin>>sy;
cx=cx+sx;cy=cy+sy;
ax=ax+sx;ay=ay+sy;
}
//изменение размеров
void PGF::Izm_raz()
{
double s,Ax,Ay,Bx,By,Cx,Cy,k,d,AB,BC;
if (nf==1)
{
cout<<"Коэффициент изменения радиуса круга= ";
cout<<endl;
cin>>k;
r=r*k;
}
if (nf==2)
{
cout<<"Коэффициент изменения расстояния до вершины квадрата= ";
cout<<endl;
cin>>k;
ax=ax-cx;
ay=ay-cy;
ax=ax*k;
ay=ay*k;
ax=ax+cx;
ay=ay+cy;
}
if (nf==3)
{
cout<<"Коэффициент изменения расстояния до вершины прямоугольника= ";
cout<<endl;
cin>>k;
ax=ax-cx;
ay=ay-cy;
ax=ax*k;
ay=ay*k;
ax=ax+cx;
ay=ay+cy;
}
}
void PGF::Vrash()
{ double f,co,si;
cout<<"Угол поворота фигуры ";
cin>>f;
f=f*M_PI/180;
if(nf==2 || nf==3)
{
ax=ax-cx;
ay=ay-cy;
co=cos(f);
si=sin(f);
axn1=ax*co;
axn2=ay*si;
axn=axn1-axn2;
ayn1=ax*si;
ayn2=ay*co;
ayn=ayn1+ayn2;
ax=axn+cx;
ay=ayn+cy;
}
}

Последний раз редактировалось Niv; 18.06.2015 в 16:44.
Niv вне форума Ответить с цитированием
Старый 18.06.2015, 23:28   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

почему именно паскакаль-абц?
как мне надоела эта зараза! как когда-то всех задолбал "центр американского английского" - напомнило. старые пердуны, типа меня, помнят, к чему это привело.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 19.06.2015, 07:41   #3
Niv
Пользователь
 
Регистрация: 18.06.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
почему именно паскакаль-абц?
как мне надоела эта зараза! как когда-то всех задолбал "центр американского английского" - напомнило. старые пердуны, типа меня, помнят, к чему это привело.
В принципе можно и на турбо паскале. В этом нет ничего страшного.
Для паскаля АБС нет я уже нашел что-то на подобие заготовок фигур с классом штамп
http://pascalabc.net/stati-po-pascal...lassy-shtampov
(особо не важно какие фигуры будут в программе)
круг треугольник и квадрат я привел как самые обычные и базовые фигуры геометрии.
Niv вне форума Ответить с цитированием
Старый 19.06.2015, 10:15   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
В принципе можно и на турбо паскале. В этом нет ничего страшного.
ты меня не понял. Я имел в виду "почему не delphi/lazarus?".
Цитата:
Для паскаля АБС нет я уже нашел что-то на подобие заготовок фигур с классом штамп
http://pascalabc.net/stati-po-pascal...lassy-shtampov
(особо не важно какие фигуры будут в программе)
Да не надо ничего искать, тут с нуля написать вместе с отрисовкой - час времени.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 19.06.2015, 11:32   #5
Niv
Пользователь
 
Регистрация: 18.06.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
ты меня не понял. Я имел в виду "почему не delphi/lazarus?".

Да не надо ничего искать, тут с нуля написать вместе с отрисовкой - час времени.
Потомучто мы проходим великий и могучий паскаль, мы пытались уговорить препода на другой язык но не там то было, в колледже с # учил.
Короче нужно на паскале, поможешь написать?
Niv вне форума Ответить с цитированием
Старый 19.06.2015, 17:51   #6
Niv
Пользователь
 
Регистрация: 18.06.2015
Сообщений: 24
По умолчанию

И так, мне на одном из форумов помогли с вопросом, как увеличить размер фигуры с клавиатуры.
Код:
uses GraphAbc;
var
  i,j:integer;
begin
  repeat
    write('1-квадрат,2-круг:');
    readln(i);
    ClearWindow;
  until i in [1,2];
  case i of 
    1:begin
      write('Сторона:');
      readln(j);
      ClearWindow;
      Rectangle(WindowWidth div 2-j div 2,WindowHeight div 2-j div 2,WindowWidth div 2+j div 2,WindowHeight div 2+ j div 2);
    end;
    2:begin
      write('радиус:');
      readln(j);
      ClearWindow;
      Circle(WindowWidth div 2,WindowHeight div 2,j);
     end;
   end;
 end.
Если не сложно. то сделайте пожалуйста, задачку так как я ее описал в теле темы.
Niv вне форума Ответить с цитированием
Старый 19.06.2015, 18:18   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Потомучто мы проходим великий и могучий паскаль
проходите, не задерживайтесь.
обрати внимание, что нужна работа с классами.
ты, хоть, знаешь, что это такое? наследование, полиморфизм, инкапсуляция...
Цитата:
Короче нужно на паскале, поможешь написать?
Могу попытаться. Но только не АБЦ, я тя умоляю.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 19.06.2015, 18:56   #8
Niv
Пользователь
 
Регистрация: 18.06.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
проходите, не задерживайтесь.
обрати внимание, что нужна работа с классами.
ты, хоть, знаешь, что это такое? наследование, полиморфизм, инкапсуляция...

Могу попытаться. Но только не АБЦ, я тя умоляю.
Нет не знаю, поэтому и прошу помощи. Главное на, что бы она была на паскале. И лучше всего именно на АБЦ. в любом случае я буду рад любым советам и схожим примерам.
Niv вне форума Ответить с цитированием
Старый 19.06.2015, 19:07   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Код:
// Наследование. Полиморфизм и виртуальные функции
type 
  Person = class
  private
    name: string;
    age: integer;
  public
    constructor (n: string; a: integer);
    begin
      name := n; age := a;
    end;
    procedure Print; virtual; // Виртуальная функция. Переопределяется в классах-потомках
    begin
      var s := GetType.ToString;
      write('Тип: ',Copy(s,pos('.',s)+1,Length(s)):7,'   Имя: ',name,'   Возраст: ',age);
    end;
    procedure Println;
    begin
      Print;
      writeln;
    end;
  end;
  
  Pupil = class(Person) // Pupil - наследник Person
  private
    clas: integer;
  public
    constructor (n: string; a,c: integer);
    begin
      inherited Create(n,a); // Вызов унаследованного конструктора
      clas := c;
    end;
    procedure Print; override;
    begin
      inherited Print;
      write('   Класс: ',clas);
    end;
  end;
  
  Teacher = class(Person)
  private
    predm: string;
  public
    constructor (n: string; a: integer; p: string);
    begin
      inherited Create(n,a); // Вызов унаследованного конструктора
      predm := p;
    end;
    procedure Print; override;
    begin
      inherited Print;
      write('   Предмет: ',predm);
    end;
  end;
  
var a: array of Person := new Person[4]; // Полиморфный контейнер - контейнер объектов базового класса. Может содержать объекты производных классов

begin
  a[0] := new Pupil('Вова',11,5);
  a[1] := new Teacher('Марья Ивановна',30,'Информатика');
  a[2] := new Person('Иванов',65);
  a[3] := new Pupil('Вася',12,6);
  
  for var i:=0 to a.Length-1 do
    a[i].Println;
end.
Этот пример и многие другие распространяются в дистрибутиве pascalabc.net.
оттуда и скопировал.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 19.06.2015, 19:24   #10
Niv
Пользователь
 
Регистрация: 18.06.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Код:
// Наследование. Полиморфизм и виртуальные функции
type 
  Person = class
  private
    name: string;
    age: integer;
  public
    constructor (n: string; a: integer);
    begin
      name := n; age := a;
    end;
    procedure Print; virtual; // Виртуальная функция. Переопределяется в классах-потомках
    begin
      var s := GetType.ToString;
      write('Тип: ',Copy(s,pos('.',s)+1,Length(s)):7,'   Имя: ',name,'   Возраст: ',age);
    end;
    procedure Println;
    begin
      Print;
      writeln;
    end;
  end;
  
  Pupil = class(Person) // Pupil - наследник Person
  private
    clas: integer;
  public
    constructor (n: string; a,c: integer);
    begin
      inherited Create(n,a); // Вызов унаследованного конструктора
      clas := c;
    end;
    procedure Print; override;
    begin
      inherited Print;
      write('   Класс: ',clas);
    end;
  end;
  
  Teacher = class(Person)
  private
    predm: string;
  public
    constructor (n: string; a: integer; p: string);
    begin
      inherited Create(n,a); // Вызов унаследованного конструктора
      predm := p;
    end;
    procedure Print; override;
    begin
      inherited Print;
      write('   Предмет: ',predm);
    end;
  end;
  
var a: array of Person := new Person[4]; // Полиморфный контейнер - контейнер объектов базового класса. Может содержать объекты производных классов

begin
  a[0] := new Pupil('Вова',11,5);
  a[1] := new Teacher('Марья Ивановна',30,'Информатика');
  a[2] := new Person('Иванов',65);
  a[3] := new Pupil('Вася',12,6);
  
  for var i:=0 to a.Length-1 do
    a[i].Println;
end.
Этот пример и многие другие распространяются в дистрибутиве pascalabc.net.
оттуда и скопировал.
Спасибо пойду посмотрю может там есть и примеры с графикой и классами
Niv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PascalABC.NET - Рассмотреть класс геометрических фигур, квадрат, круг, треугольник Niv Паскаль, Turbo Pascal, PascalABC.NET 0 18.06.2015 14:12
Построение геометрических фигур Антон08 Помощь студентам 3 16.05.2012 17:00
Вывод на экран геометрических фигур KrL^^ Помощь студентам 1 10.05.2009 23:15
Задача - Определить, какая из двух фигур – круг или квадрат – имеет большую площадь. Incognitoal Microsoft Office Excel 7 05.03.2009 11:36
Распознавание простейших геометрических фигур DropYourWeapon Паскаль, Turbo Pascal, PascalABC.NET 0 10.01.2009 22:32