задание/написать ф-ию вычисляющую по заданным точкам А В и С площадь треугольника АВС (на униксе)
и если будет не в падлу напишите плз где какая функция что делает(не обязательно)
задание/написать ф-ию вычисляющую по заданным точкам А В и С площадь треугольника АВС (на униксе)
и если будет не в падлу напишите плз где какая функция что делает(не обязательно)
Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.
24 января 2008 в 12:01
А у меня в программе нет "fsubp".
23 января 2008 в 18:00
вообщем проблема такая(((
в той проге что я выкладывал
строки 42/44/46/48/50/52/86/87/89/93/98/103 error:ambiguos operand side for 'fild' и 'fist'
строки 90/94/99-translating to 'fsubp'
в том что выкладывал серж
строки 42/44/46/48/50/52/86/87/89/93/98/103error:ambiguos operand side for 'fild' и 'fist'
строки 90/94/99:warning:translating to 'fsubp'
21 января 2008 в 17:05
спасибо)
21 января 2008 в 12:02
int trr(int xa,int xb,int xc,int ya,int yb,int yc)
{
_asm //S = 1/2 |xa*yb-xb*ya!+xb*yc-xc*yb+xc*ya-xa*yc|
{
mov eax,xa;
mul yb
mov ebx,eax
mov eax,xb
mul ya
sub ebx,eax
mov eax,xb
mul yc
add ebx,eax
mov eax,xc
push eax
mul yb
sub ebx,eax
pop eax
mul ya
add ebx,eax
mov eax,xa
mul yc
sub ebx,eax
jns label1
neg ebx
label1:
mov eax,ebx
shr eax,1
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int xa = 10;
int ya = 10;
int xb = 20;
int yb = 20;
int xc = 30;
int yc = 10;
printf("Hello\n%i",trr(xa,xb,xc,ya,yb,yc));
getchar();
return 0;
}
Проверил, работает…
21 января 2008 в 11:03
.387 – директива подтыкновения сопроцессора. Да и чем вам мой вариант не подошел?
21 января 2008 в 0:05
Блин.
Процитируй полностью и подробно сообщение компилятора.
21 января 2008 в 0:02
FILD a
FIST a
говорю же при компиле пишет что оибка типа и идти в баню….
начало ошибки идёт от FINIT
20 января 2008 в 23:05
В чем конкретно ошибка-то?
Е-мое, прямо "Дядя, я знаю что у вас сломалось". Ты правда расчитываешь, что я смогу выяснить, что у тебя за проблема по описанию "Проге не нравится, прога не пашет т.к. думает что ошибка" ?
20 января 2008 в 23:04
ещё бы нужна)))
20 января 2008 в 23:04
.intel_syntax noprefix
.global trr
.type trr.@function
trr:
mov eax,[esp+12]
sub eax,[esp+4]
mul eax
mov ebx,eax
mov eax,[esp+16]
sub eax,[esp+8]
mul eax
add eax,ebx
mov a,eax
mov eax,[esp+20]
sub eax,[esp+12]
mul eax
mov ebx,eax
mov eax,[esp+24]
sub eax,[esp+16]
mul eax
add eax,ebx
mov b,eax
mov eax,[esp+4]
sub eax,[esp+20]
mul eax
mov ebx,eax
mov eax,[esp+8]
sub eax,[esp+24]
mul eax
add eax,ebx
mov c,eax
FINIT
FILD a
FSQRT
FIST a
FILD b
FSQRT
FIST b
FILD c
FSQRT
FIST c
mov ax,a
mov [esp+4],ax
mov ax,b
mov [esp+8],ax
mov ax,c
mov [esp+12],ax
mov eax,[esp+4]
add eax,[esp+8]
cmp eax,[esp+12]
jle _NETR
sub eax,eax
mov eax,[esp+8]
add eax,[esp+12]
cmp eax,[esp+4]
jle _NETR
sub eax,eax
mov eax,[esp+12]
add eax,[esp+4]
cmp eax,[esp+8]
jle _NETR
mov eax,[esp+4]
add eax,[esp+8]
add eax,[esp+12]
mov p,eax
mov eax,2
mov two,eax
FILD p
FIDIV two
FLD ST(0)
FILD a
FSUB
FXCH
FLD ST(0)
FILD b
FSUB
FMUL ST(0),ST(2)
FXCH
FLD ST(0)
FILD c
FSUB
FMUL ST(0),ST(2)
FMUL ST(0),ST(1)
FSQRT
FIST p
mov eax,p
jmp _EXITT
_NETR:
mov eax,0
jmp _EXITT
_EXITT:
.lcomm two 4
.lcomm p 4
.lcomm a 4
.lcomm b 4
.lcomm c 4
ret
вот такое чудо получилось но есть одна трабла!!!!
FILD a
FIST a
проге не нравятся она пишет что я упырь и прога не пашет т.к. думает что ошибка(((((
20 января 2008 в 23:03
Так что, неужели помощь еще нужна? Уже прошло не 2 часа, а 2 дня.
20 января 2008 в 23:02
ну асем я када-то давно проходил в школе сейчас убей не помню в си уже малость шарю)….
20 января 2008 в 11:02
Посмотреть в гугле как делать в си ассемблерные вставки, или посмотреть пару простых примеров программирования на асме типа "ввести число, вывести его квадрат" – это максимум полчаса. Формулу тебе тут уже написали; пораскинуть мозгами и прикрутить ее, даже если вообще в жизни асма в глаза не видел (несмотря на то, что такой предмет есть) – ну два часа, от силы. Можт, надо вуз сменить, раз слабо произвести такие манипуляции?
19 января 2008 в 23:01
ну просто надо полностью написать и показать преподу полностью прогу через компиляцию
19 января 2008 в 23:01
Пишешь нечто типа
int trr(int xa,ya,xb,yb,xc,yc); assembler; (не знаю, как в Си асмовские процедуры оформляются)
asm{
мой код
}
К моему коду достаточно один оператор приписать, чтобы выдавало результат
_____MOV EAX,EBX
т.к. Си возвращает значение функции типа int в аккумуляторе (регистр EAX/AX/AL)
19 января 2008 в 23:00
_____MOV EAX,xa ; //EAX <- xa
_____MUL yb ; //EAX = xa * yb
_____MOV EBX,EAX ; EBX – accumulate result
_____MOV EAX,xb
_____MUL ya ; //EAX = xb * ya
_____SUB EBX,EAX ; EBX = xa * yb – xb * ya
_____MOV EAX,xb
_____MUL yc ; EAX = xb * yc
_____ADD EBX,EAX ; EBX = EBX + xb * yc
_____MOV EAX,xc
_____MUL yb ; EAX = xc * yb
_____SUB EBX,EAX ; EBX = EBX – xc * yb
_____MOV EAX,xc
_____MUL ya ; AEX = xc * ya
_____ADD EBX,EAX ; EBX = EBX + xc * ya
_____MOV EAX,xa
_____MUL yx ; EAX = xa * yc
_____SUB EBX,EAX ; EBX = EBX – xa * yc
_____JNS LABEL1 ; if result < 0
_____NEG EBX ; result = 0-result
LABEL1:
_____SHR EBX,1 ; EBX = EBX / 2
ЗЫ: Моно еще ускорить. Это без оптимизации )))
19 января 2008 в 23:00
а если полностью прога)?
19 января 2008 в 23:00
ты же сам сказал, что функция, вычисляющая по ЗАДАННЫМ точкам. Вот функция, точки, исходя из условия, заданы.
19 января 2008 в 22:04
Формулку дайте для целочисленной арифметики – облеку в код. Т.е. поставьте задачу, а уж мы напишем )
19 января 2008 в 22:04
Формула: S = 1/2 |xa*yb-xb*ya+xb*yc-xc*yb+xc*ya-xa*yc|
На асме сам напиши.
19 января 2008 в 22:04
#include <stdio.h>
#include <stdlib.h>
extern int trr(int x1,int y1,int x2, int y2, int x3, int y3);
int main(int argc, char **argv)
{
int a;
if (argc!=7) {printf( "Incorrect parameters! Example: ./a.out x1 y1 x2 y2 x3 y3\n");}
else{
a=trr(atoi(argv[1]),atoi(argv[2]),atoi(argv[3]),atoi(argv[4]),atoi(argv[5]),atoi(argv[6]));
printf("Plowad treygolnika ravnaetsa %d+-1\n",a );
};
return 0;
}
вот что получилось на си а вот на ассемблере я не умею((((
а для зачёта нужен ещё и ас(((
19 января 2008 в 22:04
можно и через использование FPU.. если бы не сессия, то написал бы там в итоге немного кода выйдет, по крайней мере поменьше чем с формулой что в позапредыдущем посте)
19 января 2008 в 22:02
ну блин помогите)))
19 января 2008 в 22:00
На асме площадь треугольника? Сложновато…
19 января 2008 в 19:05
ап