|
[ Tajson_srb @ 07.01.2010. 14:40 ] @
| Tekst zadatka:
Omoguciti da program moze da radi sa trouglovima. Trougao je odredjen ako su date koordinate svih njegovih temena. omoguciti izracunavanje obima, povrshine trougla i da li data tacka Z pripada trouglu. U glavnom programu se unosi niz trouglova, a kao rezultat je potrebno ispisati koji trouglovi sadrze datu tacku Z (ukoliko je naveden opcioni argument- a). Ukoliko nijem treba pronaci koji trougao ima najvecu povrsinu.
Evo nekog koda sto sam iskombinovao iz par zadataka :D ne mogu da napravim da mi radi proveravanje pripadnosti tacke trouglu, ( poslednji deo maina (obelezicu ga crvenom
Code:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef struct{
int x,y;
} tacka;
typedef struct{
tacka t1,t2,t3;
} trougao;
float duzina(tacka t1,tacka t2){
int dx = t1.x - t2.x;
int dy = t1.y - t2.y;
return sqrt(dx*dx + dy*dy);
}
float povrsina(trougao r){
float a = duzina(r.t1, r.t2);
float b = duzina(r.t2, r.t3);
float c = duzina(r.t1, r.t3);
float s = (a+b+c)/2;
return sqrt(s*(s-a)*(s-b)*(s-c));
}
float obim(trougao r){
float a = duzina(r.t1, r.t2);
float b = duzina(r.t2, r.t3);
float c = duzina(r.t1, r.t3);
return a+b+c;
}
int pripada(trougao r, tacka t4){
int T3 = (r.t3.y - r.t1.y)*(r.t2.x - r.t1.x) - (r.t2.y - r.t1.y) * (r.t3.x - r.t1.x);
int T4 = (t4.y - r.t1.y)*(r.t2.x - r.t1.x) - (r.t2.y - r.t1.y) * (t4.x - r.t1.x);
return (T3 * T4 > 0);
}
void ucitaj_tacku(tacka* t){
printf("Unesite x koordinatu: ");
scanf("%d", &t->x);
printf("Unesite y koordinatu: ");
scanf("%d", &t->y);
}
void ucitaj_trougao(trougao* r){
printf("Unesite teme A: \n");
ucitaj_tacku(&r->t1);
printf("Unesite teme B: \n");
ucitaj_tacku(&r->t2);
printf("Unesite teme C: \n");
ucitaj_tacku(&r->t3);
}
void ispisi_trougao(trougao r){
printf("Teme A: (%d,%d) ",r.t1.x,r.t1.y);
printf("Teme B: (%d,%d) ",r.t2.x,r.t2.y);
printf("Teme C: (%d,%d) ",r.t3.x,r.t3.y);
}
int main()
{
trougao r[100];
tacka t;
int i,n,dim=0,g,a;
float f,max=0.0;
fflush(stdin);
printf("Uneti argument a? (D/N)");
scanf("%c",&a);
printf("Unesi tacku Z: \n ");
ucitaj_tacku(&t);
printf("Koliko trouglova ucitavate: ");
scanf("%d", &n);
for(i=0;i<n;i++){
printf("%d \n",i);
ucitaj_trougao(&r[i]);
[red] f=povrsina(trougao r);
if (f>max){
max=f;
}
else if (max>f){
g=i;
}[/red]
}
[red] if(a=='D'){
printf("Tacka Z pripada trouglovima: ");
for(i=0;i<n;i++){
if(pripada(r.t1,r.t2,r.t3,t) && pripada(r.t2,r.t3,r.t1,t) && pripada(r.t1,r.t3,r.t2,t)){
printf("%d ",i);
}
}
}
else printf(" \n %d. trougao ima najvecu povrsinu",g);
[/red]
return 0;
}
[Ovu poruku je menjao Mihajlo Cvetanović dana 07.01.2010. u 21:53 GMT+1] |
[ Mihajlo Cvetanović @ 07.01.2010. 20:54 ] @
Hehe, dodao sam [code ] tagove, ali sad se ignorišu [red ] tagovi. Šta da se radi, ipak je čitljivije ovako.
[ Tajson_srb @ 07.01.2010. 23:00 ] @
tnx, prvi put postujem, pa nisam znao sta treba da se uradi
el ima ko reshenje? :D
[ interceptor011 @ 08.01.2010. 16:11 ] @
E kolega, kolega. Zar na forumu da vam rade domaci :)
P.S. Jel si uradio? Treba i meni :)
[ Tajson_srb @ 08.01.2010. 16:35 ] @
NiSaM :(
pokusao nesto, kao sto vidis, ali bez uspeha XD
[ interceptor011 @ 08.01.2010. 16:55 ] @
Mislim da si pogresio kod ovog argumenta a. Mislim da se to unosi kao argument komandne linije.
[ Tajson_srb @ 08.01.2010. 17:24 ] @
ma to ga nisam razumeo sta je hteo, al nije to bitno, ne radi mi pronalazenje tacke u trouglu
[ interceptor011 @ 08.01.2010. 17:47 ] @
Ja nisam mogao da ga nateram da radi ne i bez toga:) Izabcuje mi Syntax error before "trougao". Buljim pola sata i ne izvaljujem gde je greska... :) Ne znam dali mozes ovoj promenljivoj f da dodelis vredost koju vraca funkcija na taj nacin:
"f=povrsina(trougao r);"
[ Tajson_srb @ 08.01.2010. 18:46 ] @
evo izmenio sam malo , al sad me verovatno zeza argv
evo sta mi vraca debugger :
neki segmentation failed SIGSEGV signal :P
Code:
#0 761B43F9 strlen() (C:\Windows\system32\msvcrt.dll:??)
#1 0040165A main(argc=1, argv=0x760fb0) (C:/Users/Tajson/Desktop/uzas/main.c:80)
a evo novog koda, ako moze neko da pomogne pls!!! :D
Code:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define MAX_SIZE 100
int getline(char line[],int max_size){
int dim;
char ch;
for(dim=0;dim<max_size-1 && (ch=getchar())!=EOF && ch!='\n'; ++dim)
line[dim++]=ch;
line[dim]='\0';
return dim;
}
typedef struct{
int x,y;
} tacka;
float duzina(tacka t1,tacka t2){
int dx = t1.x - t2.x;
int dy = t1.y - t2.y;
return sqrt(dx*dx + dy*dy);
}
float povrsina(tacka t1, tacka t2, tacka t3){
float a = duzina(t1, t2);
float b = duzina(t2, t3);
float c = duzina(t1, t3);
float s = (a+b+c)/2;
return sqrt(s*(s-a)*(s-b)*(s-c));
}
float obim(tacka t1, tacka t2, tacka t3){
float a = duzina(t1, t2);
float b = duzina(t2, t3);
float c = duzina(t1, t3);
return a+b+c;
}
int pripada(tacka t1,tacka t2,tacka t3, tacka t4){
int T3 = (t3.y - t1.y)*(t2.x - t1.x) - (t2.y - t1.y) * (t3.x - t1.x);
int T4 = (t4.y - t1.y)*(t2.x - t1.x) - (t2.y - t1.y) * (t4.x - t1.x);
return (T3 * T4 > 0);
}
void ucitaj_tacku(tacka* t){
printf("Unesite x koordinatu: ");
scanf("%d", &t->x);
printf("Unesite y koordinatu: ");
scanf("%d", &t->y);
}
void ucitaj_trougao(tacka t1, tacka t2, tacka t3){
printf("Unesite teme A: \n");
ucitaj_tacku(&t1);
printf("Unesite teme B: \n");
ucitaj_tacku(&t2);
printf("Unesite teme C: \n");
ucitaj_tacku(&t3);
}
int main(int argc,char **argv)
{
char line[MAX_SIZE];
int dim_o;
tacka t1,t2,t3,t;
int i,n,g;
float f,max=0,nmax=0;
if(argc<1){
printf("Nedovoljno ulaznih argumenata!");
return 1;
}
dim_o=strlen(argv[1]);
if(argv[1][0]!='-' || dim_o==0 || dim_o>2){
printf("Nije korektno unet opcioni argument!");
return 2;
}
printf("Unesi tacku Z: \n ");
ucitaj_tacku(&t);
printf("Koliko trouglova ucitavate: ");
scanf("%d", &n);
for(i=0;i<n;i++){
printf("%d \n",i);
ucitaj_trougao(t1,t2,t3);
f=povrsina(t1,t2,t3);
if(f>max){
nmax=f;
g=i+1;
}
}
while(getline(line,MAX_SIZE)){
switch(argv[1][1]){
case 'a' :
printf("Tacka Z pripada trouglovima: ");
for(i=0;i<n;i++){
if(pripada(t1,t2,t3,t) && pripada(t2,t3,t1,t) && pripada(t1,t3,t2,t)){
printf("%d ",i);
}
}
break;
default : printf(" \n %d. trougao ima najvecu povrsinu",g);
}
}
return 0;
}
[ interceptor011 @ 08.01.2010. 19:14 ] @
Treba umesto argc<1-----> argc==1. Kad se ovo izmeni onda radi unosenje argumenata i to ali kada prodje unos temena trougla.....nista....
Code:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define MAX_SIZE 100
int getline(char line[],int max_size){
int dim;
char ch;
for(dim=0;dim<max_size-1 && (ch=getchar())!=EOF && ch!='\n'; ++dim)
line[dim++]=ch;
line[dim]='\0';
return dim;
}
typedef struct{
int x,y;
} tacka;
float duzina(tacka t1,tacka t2){
int dx = t1.x - t2.x;
int dy = t1.y - t2.y;
return sqrt(dx*dx + dy*dy);
}
float povrsina(tacka t1, tacka t2, tacka t3){
float a = duzina(t1, t2);
float b = duzina(t2, t3);
float c = duzina(t1, t3);
float s = (a+b+c)/2;
return sqrt(s*(s-a)*(s-b)*(s-c));
}
float obim(tacka t1, tacka t2, tacka t3){
float a = duzina(t1, t2);
float b = duzina(t2, t3);
float c = duzina(t1, t3);
return a+b+c;
}
int pripada(tacka t1,tacka t2,tacka t3, tacka t4){
int T3 = (t3.y - t1.y)*(t2.x - t1.x) - (t2.y - t1.y) * (t3.x - t1.x);
int T4 = (t4.y - t1.y)*(t2.x - t1.x) - (t2.y - t1.y) * (t4.x - t1.x);
return (T3 * T4 > 0);
}
void ucitaj_tacku(tacka* t){
printf("Unesite x koordinatu: ");
scanf("%d", &t->x);
printf("Unesite y koordinatu: ");
scanf("%d", &t->y);
}
void ucitaj_trougao(tacka t1, tacka t2, tacka t3){
printf("Unesite teme A: \n");
ucitaj_tacku(&t1);
printf("Unesite teme B: \n");
ucitaj_tacku(&t2);
printf("Unesite teme C: \n");
ucitaj_tacku(&t3);
}
int main(int argc,char **argv)
{
char line[MAX_SIZE];
int dim_o;
tacka t1,t2,t3,t;
int i,n,g;
float f,max=0,nmax=0;
if(argc==1){
printf("Nedovoljno ulaznih argumenata!");
return 1;
}
dim_o=strlen(argv[1]);
if(argv[1][0]!='-' || dim_o==0 || dim_o>2){
printf("Nije korektno unet opcioni argument!");
return 2;
}
printf("Unesi tacku Z: \n ");
ucitaj_tacku(&t);
printf("Koliko trouglova ucitavate: ");
scanf("%d", &n);
for(i=0;i<n;i++){
printf("%d \n",i+1);
ucitaj_trougao(t1,t2,t3);
f=povrsina(t1,t2,t3);
if(f>max){
nmax=f;
g=i+1;
}
}
while(getline(line,MAX_SIZE)){
switch(argv[1][1]){
case 'a' :
printf("Tacka Z pripada trouglovima: ");
for(i=0;i<n;i++){
if(pripada(t1,t2,t3,t) && pripada(t2,t3,t1,t) && pripada(t1,t3,t2,t)){
printf("%d ",i);
}
}
break;
default : printf(" \n %d. trougao ima najvecu povrsinu",g);
}
}
return 0;
}
[Ovu poruku je menjao interceptor011 dana 08.01.2010. u 20:37 GMT+1]
[Ovu poruku je menjao interceptor011 dana 08.01.2010. u 20:38 GMT+1]
[Ovu poruku je menjao interceptor011 dana 08.01.2010. u 20:42 GMT+1]
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|