[ bora.m91 @ 09.06.2009. 10:55 ] @
Dobio sam zadatak za 5, ali ne mogu da ga dovrsim... uradio sam vecinu:

Ucitati niz struktura o rekama sledeceg oblika:
Code:
struct reka
  {
    char naziv[20];
    int duzina;
  } x[20]

i zatim odrediti naziv i duzinu najduze medju njima.

Uradio sam sve, jedino ne znam kako da odredim naziv i duzinu najduze medju njima... moze pomoc (makar da me neko uputi kako da uradim to)?


Ovo sam uradio, i profesor mi je rekao da je dobro:
Code:
#include<stdio.h>
#include<string.h>
#define N 20
#define D 20

typedef struct reka {
   char naziv[D+1];
   int duzina;
} Reka;

main() {
  Reka reke[N];
  char reka[D+1], duzina[5];
  int i, j, m, n=0;
  clrscr();
  printf("Unesi ime i duzinu reke? \n\n");
  do {
    printf("%d. naziv:", n+1);
    gets(reke[n]. naziv);
    printf("%d. duzina:", n+1);
    gets(duzina);
    atoi(duzina, reke[n].duzina);
}
while (strcmp(reke[n++].naziv, "...") !=0);

n--;
printf("\Neuredjeni niz reka \n\n");
getch();
}
[ X Files @ 09.06.2009. 11:35 ] @
Code:

#include <stdio.h>
#include <stdlib.h>

/* uvek daj opisan define, lakse se prati */
#define MAX_BROJ_REKA 5
#define MAX_DUZINA_STRINGA 40

/* struktura, uz tipiziranje */
typedef struct reka
{
   char naziv[MAX_DUZINA_STRINGA];
   int duzina;
} Reka;

/* glavna funkcija, po standardu ide: int main(void) */
int main(void)
{
    /* objekti strukture */
    Reka reke[MAX_BROJ_REKA];

    /* brojac reka, inicijalizujemo ga na NULU */
    int n=0;

    /* indeks za petlju, trenutno najveca najduza, indeks najduze */
    int i, max, indeks_najduze;

    printf("UNOS PODATAKA O REKAMA\n\n");
    do
    {
        printf( "Unesite podatke o %d. reci:\n", n+1 );

        printf( "NAZIV: " );
        fgets( reke[n].naziv, MAX_DUZINA_STRINGA, stdin );
        fflush( stdin );
        /* pri unosu sa fgets, poslednji karakter je new line (LF), tako da je duzina 4 a ne 3 */
        if ( strncmp( reke[n].naziv, "...", 3 ) == 0 )
            break;
        do
        {
            printf( "DUZINA: " );
            scanf( "%d", &reke[n].duzina );
            fflush( stdin );
        } while ( reke[n].duzina <= 0 );

        ++n;

    } while ( n < MAX_BROJ_REKA );

    /* nemoguc, pesimisticki slucaj */
    max = -1;
    for ( i=0; i<n-1; i++ )
        if ( reke[i].duzina > max )
        {
            max = reke[i].duzina;
            indeks_najduze = i;
        }

    printf( "NAJDUZA REKA JE: %s", reke[indeks_najduze].naziv );
    printf( "DUGACKA JE %d km\n", reke[indeks_najduze].duzina );

    getchar();

    return 0;
}
[ bora.m91 @ 09.06.2009. 14:24 ] @
E hvala ti mnogo! Svaka ti dala! :D
[ bora.m91 @ 09.06.2009. 19:27 ] @
E izvini sto smaram, ali ovaj program malo baguje... nekad ne izbaci najvisu vrednost, vec ono sto sam prvo upisao... pokusao sam da nesto prepravim, ali ne znam jer ne kontam sta je "fflush", "stdin" i "fgets"... ako mozes (ili neko drugi) da prepravis (da bude bez tih funkcija)?

Izvini ali vazno mi je!
[ X Files @ 09.06.2009. 20:42 ] @
Sorry...

Za pocetak, umesto:
for ( i=0; i<n-1; i++ )

...stavi:
for ( i=0; i<n; i++ )

(Bio sam krenuo da pisem kod za sortiranje, pa sam ukapirao da se to ne trazi. Otuda je ostalo n-1)

[ X Files @ 09.06.2009. 20:53 ] @
1. U vezi fflush( stdin );
('stdin' je standardni ulaz, tj. u konkretnom slucaju tastatura; 'stdout' bi bio izlaz na ekran)
Detaljnije: http://www.elitesecurity.org/t353056

2. U vezi fgets:
Detaljnije: http://www.elitesecurity.org/p2296240
[ bora.m91 @ 10.06.2009. 15:28 ] @
E hvala ti puno!