[ 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]