Кому порешать задачи - пишите сюда

TerehAndr

New Member
Ребята, нужно сделать прогу с БД на языке ПРОЛОГ. Пишите пожалуйста в ЛС, кто может помочь с этим вопросом. Еще нужно написать макрос под Word & Excel на VBA. Кто сможет помочь и с этим пожалуйста пишите.
 

LaCOSt1k

New Member
помогите пожалуста с 2 задачами.

паскаль:

Знайти мінімальний і максимальний елементи масиву A[1..10, 1..5] і поміняти їх місцями.


В двовимірному масиві А[1..5,1..5] знайти найменший елемент побічної діагоналі.
 

Пух

كنت بلهاء
Модератор
Код:
program graphics;
uses crt,graph;
TYPE Func=Function(i:real):Real;
CONST k=200;
VAR cx,cy: integer;
    Fnx,Fny:Func;
    x,y: longint;

procedure Init;  {инициализация графики}
var gd,gm:integer;
 begin
  gd:=detect;
  InitGraph(gd,gm,'');
end;

procedure ekran;  {рисуем оси координат}
 var i:integer; s:string;   
  begin
   cx:=GetMaxX div 2; cy:=GetMaxY div 2;
   line(cx,0,cx,2*cy); line(0,cy,cx*2,cy);
   line(cx*2-15,cy-4,cx*2,cy); line(cx*2-15,cy+4,cx*2,cy);
   line(cx-4,15,cx,0); line(cx+4,15,cx,0);
end;

procedure POSTR(Fnx,Fny:Func);  {строим график точками}
var i:real;
 begin
  i:=0;
  repeat
	i:=i+0.001;
  x:=round(Fnx(i)*k);
  y:=round(Fny(i)*k);
	PutPixel(cx+x,cy-y,red);
	until i>1;
  readkey;
 end;

 {$F+}

 Function Dlrx(i:real):Real;
 begin
   Dlrx:=i;
 end;

 Function Dlry(i:real):Real;  {y=29.27*0.7^x}
 begin
  Dlry1:=29.27*exp(i*ln(0.7));
  end;


{$F-}

  begin
  textbackground(1);
  clrscr;
  Init;
  ekran;
  POSTR(Dlrx,Dlry);
  CloseGraph;
  readkey;
 end.
Делал когда-то на паскале. Помогите переписать под С. Процедуры Init, ekran уже написал, а вот с процедурой POSTR проблемы. Проблема в масштабировании функции. Си в полноэкранном режиме получилось запустить с помощью VirtualBox, но всё равно криво как-то.
round менял на floor(int x), но правильно выбрать масштаб не смог :(
 

dreamer

Member
Делал когда-то на паскале. Помогите переписать под С. Процедуры Init, ekran уже написал, а вот с процедурой POSTR проблемы. Проблема в масштабировании функции. Си в полноэкранном режиме получилось запустить с помощью VirtualBox, но всё равно криво как-то.
round менял на floor(int x), но правильно выбрать масштаб не смог :(
Ты бы хоть скриншот присобачил, а то не понятно, что именно у тебя не получается.
И свой код на С тоже пригодился бы.
 

Пух

كنت بلهاء
Модератор
Ты бы хоть скриншот присобачил, а то не понятно, что именно у тебя не получается.
И свой код на С тоже пригодился бы.
ну вот как график выглядит на Паскале. Меня такое изображение устраивает.

Код:
#include <graphics.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <conio.h>

int main(void){
 
   int gdriver = DETECT, gmode, errorcode;
   int x,y,xasp, yasp, cx, cy;
   float i;

     initgraph(&gdriver, &gmode, "");
  
   errorcode = graphresult();
   if (errorcode != grOk)    {
      printf("Graphics error: %s\n", grapherrormsg(errorcode));
      printf("Press any key to halt:");
      getch();
      exit(1); 
   }

   cx = getmaxx() / 2;
   cy = getmaxy() / 2;
   setcolor(getmaxcolor());

   getaspectratio(&xasp, &yasp);
/* рисуем оси координат */
   line(cx,0,cx,2*cy); line(0,cy,cx*2,cy);
   line(cx*2-15,cy-4,cx*2,cy); line(cx*2-15,cy+4,cx*2,cy);
   line(cx-4,15,cx,0); line(cx+4,15,cx,0);
   /* пытаемся рисовать график */
    i=0;
/* ну вообщем, в этом цикле все проблемы. отказывается нормально рисовать... Возможно, все проблемы из-за кривой настройки VirtualBox*/
    while (i<20.0/yasp){   
      x=floor(i*xasp);
      y=floor(29.27*pow(0.7,i)*yasp/2);
      putpixel(cx+x,cy-y,3);
      i+=0.00001;
     }
    getch();
   closegraph();
   return 0;
}
если не получится ничего, то в пятницу в универе буду подбирать коэффициенты.
 

Вкладення

  • 28.4 КБ Перегляди: 260
Останнє редагування:

Пух

كنت بلهاء
Модератор
получилось запустить через DosBox, там всё сделал.
 

Storm_10

Member
нужна помощь...
ЯЗЫК: Паскаль
ЗАДАЧА: Відомо довжини сторін трьох трикутників. Знайти трикутник з максимальною площею.

Ось що в мене є

program p1;
uses crt;
var a,b,c,S:array[1..3] of real; i:integer;
function geron (x,y,z:real):real;
var p:real;
begin
p:=(x+y+z)/2;
geron:=sqrt(p*(p-x)*(p-y)*(p-z));
end;
procedure maz (x,y,z:real);
begin
if(x>y) and (x>z) then writeln ('s1 bolshe')
else if (y>x) and (y>z) then writeln ('s2 bolshe')
else writeln('s3 bolshe')
end;

begin
writeln('++ Vvedite storonu triygolnika a ++');
for i:=1 to 3 do
begin
write (i,'trukytnuka');
readln(a);
end;
writeln('++ Vvedite storonu triygolnika b ++');
for i:=1 to 3 do
begin
write (i,'trukytnuka');
readln(b);
end;
writeln('++ Vvedite storonu triygolnika c ++');
for i:=1 to 3 do
begin
write (i,'trukytnuka');
readln(c);
end;


а вот дальше не соберу раму как подключить блок чтоб правильно площадь посчитало и сравнило какая больше =(.

Обязательно нужно использовать блок функция и процедура!

Пух ,большое спасибо =)
 
Останнє редагування:

Пух

كنت بلهاء
Модератор
нужна помощь...
ЯЗЫК: Паскаль
ЗАДАЧА: Відомо довжини сторін трьох трикутників. Знайти трикутник з максимальною площею.
дописать в конце проги
Код:
S[1]=geron(a[1],a[2],a[3]);
S[2]=geron(b[1],b[2],b[3]);
S[3]=geron(c[1],c[2],c[3]);
maz(S[1],S[2],S[3]);
readln; 
end.
 

Storm_10

Member
нужно проверить и исправить =)
язык: Паскаль
Задача: протабулировать функцию на разных промежутках чтобы к каждому промежутку выводило по 8 значений 'x' и 'y',
1) от [-2,0)
2) от [0,2)
3) от [2,4]
шаг 0.05....

проблема в том что у меня на экран выводит только 8 значений для 1 промежутка =(

program fynkci9;
uses crt;
var Xmin,Xmax,deltaX,x,y:real; i:integer;
begin
clrscr;
writeln ('Vvedite Xmin, Xmax, deltaX');
readln (Xmin,Xmax,deltaX);
x:=Xmin;
if (x>=-2) and (x<0) then
while (x<=xmax) and (i<8) do begin
y:=x/(-2);
i:=i+1;
writeln('x=',x:2:2,' y=',y:2:2);
x:=x+deltax; end else begin

if (x>=0) and (x<2) then
while (x<=xmax) and (i<8) do begin
y:=x-2;
i:=i+1;
writeln('x=',x:2:2,' y=',y:2:2);
x:=x+deltax; end else begin

if (x>=2) and (x<=4) then
while (x<=xmax) and (i<8) do begin
y:=2*(x-2);
i:=i+1;
writeln('x=',x:2:2,' y=',y:2:2);
x:=x+deltax; end else writeln('** Ne prenadlegut promegytky! **')
end;
end;
readkey;
end.
 

Пух

كنت بلهاء
Модератор
процедуру пиши, в которую ты будешь передавать как параметры границы интервала и дельту.
в этой процедуре в цикле
i:=0; x:=xmin;
while (i<8) or (x>xmax) do
begin
y=func(x); //твоя функция
writeln('x=',x:2:2,' y=',y:2:2);
inc(i);
end;
будешь считать значение функции и выводить сразу его на экран.
процедуру вызвать 3 раза для каждого интервала.
 
Зверху