[ mije_drobnjak @ 03.09.2009. 22:51 ] @
3. Napisati program koji sa standardnog ulaza učitava
neku rečenicu, pa u njoj pronalazi najdužu riječ.
Rezultat treba ispisati na standardnom izlazu.
Učitavanje i ispis rezultata treba obaviti u glavnom
programu, a za određivanje najduže riječi unutar
rečenice treba napisati i koristiti funkciju maxrec.
Riječ je jedno ili više uzastopnih slova, a od drugih
riječi odvojena je bjelinom ili nekim drugim znakom
koji nije slovo.

4. U datoteci "ULAZ.DAT" upisan je nepoznat broj cijelih
brojeva u proizvoljnom (neuređenom) redoslijedu, pri
čemu nema duplikata. Napisati program koji te
brojeve upisuje u rastućem redoslijedu u datoteku čiji
je naziv argument komandne linije.
[ X Files @ 04.09.2009. 06:14 ] @
Molim Vas da postavite kod koji ste do sada uradili.
[ES] nije berza za besplatno rešavanje tuđih domaćih zadataka. Po pravilima [ES] foruma brišu se sve teme u kojima autor traži da mu se uradi domaći zadatak, a da prethodno ništa sam nije pokušao. Domaći zadaci su predviđeni za samostalan rad, a članovi C/C++ foruma će svakako pokuštati da *pomognu* kada autor i sam pokaže svoje angažovanje i inicijativu.


Takođe:

1. teme o zadacima idu u forum za početnike.
2. temama treba dati jasan naslov
3. svaki zadatak najboljeje je da bude u posebnoj temi

[ mije_drobnjak @ 06.09.2009. 17:23 ] @
Evo pokušao sam da uradim treći zadatak. Moje riješenje izgleda ovako. Neka neko provjeri i da ispravke ako ih ima a mislim da će ih biti. Hvala.

Code:

#include<stdio.h>
main();
int maxrec(char *s);
main()
{
  char *a[80];
  printf("unesite recenicu:");
  gets(a);
  printf("najduza rijec u recenici je:\n",maxrec(a));
  getchar();
}
int maxrec (char *s)
{
  rijec=0, najduza=0;
  while (*s != '\0') {
    if (*s>='a' && *s<='z' || *s>='A' && *s<='Z') {
      while (*s>='a' && *s<='z' || *s>='A' && *s<='Z') {
        rijec++;
        s++;
      }
      /* Da li je ova rijec najduza? */
      if (rijec>najduza) najduza=rijec;
      rijec=0;
    }
    if (*s=='\0') break; /* Za slucaj da je zadnji znak slovo */
    s++;
  }
  return najduza;
}


[Ovu poruku je menjao Mihajlo Cvetanović dana 06.09.2009. u 23:31 GMT+1]
[ mije_drobnjak @ 07.09.2009. 12:23 ] @
Evo i 4 zadatka. Samo treba provjeriti i dati korekciju.Jer ja sam početnik u programiranju. I neka neko provjeri prethodni zadatak koji sam postavio. Hvala puno unaprijed.

Code:

#include<stdio.h>
#include<string.h>
main (int argc, char *argv[])
{
   FILE *fp1,*fp2;
   int i,j,n,pom;
   int niz[1000];
   if (fp1=(fopen("ULAZ.DAT","r")==NULL)) 
         printf("greska prilikom otvaranja datoteke"\n);
   else if (fp2=fopen("argv[1]","w")==NULL)
         printf("greska prilikom otvaranja datoteke"\n,argv[1]);
   else {
           
           for ( i=0;i1='EOF' ;i++)
           fscanf(fp1,"%d",&niz[i]);
           n=strlen(niz);
           for(i=0; i<n; i++)
               for(j=i+1;j<n; j++)
                    if(niz[i]>=niz[j])  {
                       pom=niz[i];
                       niz[i]=niz[j];
                       niz[j]=pom;
                   }
           printf("Sortirani niz je:",niz[i]);
     for(i=0; i<n; i++)
          fprintf(fp2,niz[i]);
  fclose(fp1);
  fclose(fp2);
  } 
}



[Ovu poruku je menjao Mihajlo Cvetanović dana 07.09.2009. u 13:41 GMT+1]

[Ovu poruku je menjao mije_drobnjak dana 07.09.2009. u 17:19 GMT+1]
[ Mihajlo Cvetanović @ 07.09.2009. 13:01 ] @
Da li si u mogućnosti da kompajliraš i debaguješ rešenja? Bilo bi ti mnogo jednostavnije da svojim očima vidiš šta se dešava.

U prvom zadatku nedostaje ti jedno %d u printf-u. Uzgred, ako sam ja dobro razumeo zadatak ti treba da prikažeš tu reč, a ne njenu dužinu. Koje je od ta dva? Ostalo je u redu.

Drugi zadatak ne može da se kompajlira zbog nekoliko grešaka. U liniji fp1=fopen zagrade treba da čuvaju dodelu (=), a ne poređenje (==). U liniji fp2=fopen imaš navodnik viška a zagradu manjka, plus nedostaje poređenje sa NULL. U "float niz[]" fali broj. Takođe, ne postoji karakter 'EOF', niti ima smisla porediti brojač "i" sa takvim karakterom i da on postoji. U nastavku brojače "i" i "j" porediš sa karakterom '\0' koji postoji, ali i ovo poređenje nema smisla. Moraš da znaš koja je dužina niza. Pošto radiš domaći u C-u najlakše je da zauzmeš neki dovoljno veliki niz (float niz[1000] recimo), i da čitaš te brojeve, i da brojiš koliko si ih pročitao, i da staneš kad ne uspeš da pročitaš broj (kad scanf vrati 0). Tako nekako. Uzgred, promenljiva pom treba da bude float, kao što su float i elementi niza. Ostalo je u redu.
[ djoka_l @ 07.09.2009. 13:07 ] @
Citat:
Uzgred, promenljiva pom treba da bude float, kao što su float i elementi niza. Ostalo je u redu.


Osim što je u zadatku dato da su brojevi u ulaznoj datoteci celi, pa ne treba float. A uz to koristiš argv[1], a tvoja main funkcija nema ovaj argument.
[ mije_drobnjak @ 07.09.2009. 16:21 ] @
Dao sam neke ispravke zadatka na osnovu vasih preporuka ali mi nije jasan onaj dio koda kod ucitavanja niza brojeva iz datoteke. Dokle treba da ide petlja for u tom primjeru.Hvala.
[ Mihajlo Cvetanović @ 07.09.2009. 17:03 ] @
Code:
   if (fp1=(fopen("ULAZ.DAT","r")==NULL)) 

Ovo je pogrešno, jer će ovako kako je napisano fp1 dobiti vrednost 1 ili 0 (ili da kažemo true ili false). Zagrade treba da čuvaju dodelu (=) a ne poređenje (==). Odmah zatim slično se dešava sa fp2. Tu nema zagrada, ali svejedno poređenje (==) ima prednost nad dodelom (=), pa je opet pogrešno. Zagrade treba da čuvaju dodelu.

Code:
         printf("greska prilikom otvaranja datoteke"\n,argv[1]);

Ovo je pogrešno, jer nedostaje %d. I \n treba da ide unutar navodnika.

Code:
           for ( i=0;i1='EOF' ;i++)
             fscanf(fp1,"%d",&niz[i]);
           n=strlen(niz);

Ovo gore je bezveze na bar dva načina. Treba bude ovako nekako:

Code:
           for (i = 1, n = 0; i == 1 && n < 1000; n++)
             i = fscanf(fp1, "%d", &niz[n]);

U ovom odlomku promenljiva "i" se ne koristi kao brojač nego kao indikator da treba završiti s čitanjem. Na kraju čitanja promenljiva "n" sadrži broj pročitanih brojeva.

Code:
           printf("Sortirani niz je:",niz[i]);

Ovo je pogrešno na bar dva načina, a pri tom je i višak, i izgledaće čudno tokom izvršavanja. Na ekranu dobiješ "Sortirani niz je:", i ništa više, jer su brojevi otišli u datoteku.
[ mije_drobnjak @ 08.09.2009. 10:57 ] @
Hvala na pomoći.