zadaci uz seminarski

Miroslav Mijajlović - broj indeksa 06/056

Polazni tekstovi:

  1. pant11-sh-pitanje.txt
  2. pav101-rakic01.txt
  3. zoo-gusteri01.txt
  4. 87poli-060202-01.txt
  5. mit05.txt

Rezultujući tekstovi:

  1. pant11-sh-pitanje.def
  2. pav101-rakic01.def
  3. zoo-gusteri01.def
  4. 87poli-060202-01.def
  5. mit05.def

ZADATAK1.1

Sastaviti funkciju karakter koja vraća vrednost 0 ako tekst seminarskog sadrži samo dozvoljene ASCII- karaktere (LF, CR i grafičke karaktere od 32-127 koji se koriste u AURORA-kodu), a inače 1. Sastaviti main-funkciju koja testira funkciju karakter.

Rešenje zadatka:
link na stranu sa rešenjima
Rezultat: zad11_1
zad11_2
zad11_3
zad11_4
zad11_5

ZADATAK1.2

Sastaviti funkciju slovo koja vraća 0 ako se u tekstu seminarskog nalaze samo dozvoljeni (prema Uputstvu) alfabetski grafički karakteri izvan srednjih zagrada [ i ], a inače vraća 1. (Na primer, karakteri q i w nisu dozvoljeni). Sastaviti main-funkciju koja testira funkciju slovo.

Rešenje zadatka 1.2:

#include 

int slovo(void);

main()

{printf("Funkcija slovo je vratila vrednost %d", slovo());}

int slovo(void)

{  
 int c;
 short out;

    while((c=getchar())!=EOF)

    { if (c=='[') out=0;

      else if (c==']') out=1;

      else if (out && (c=='X'||c=='Y'||c=='Q'||c=='W'||c=='q'||c=='w')) return 1;}

    return 0;

}

Preuzmi izvršnu datoteku
Rezultat:
zad12_1
zad12_2
zad12_3
zad12_4
zad12_5

ZADATAK1.3

Sastaviti funkciju zagrada koja vraća 0 ako je broj otvorenih srednjih zagrada [ jednak broju zatvorenih srednjih zagrada ], a inače vraća 1. Sastaviti main-funkciju koja testira funkciju zagrada.

Rešenje:
#include
int zagrada()
{
    int br_o=0;
    int br_z=0;
    int c;
    while((c=getchar()) != EOF)
    {
       switch(c)
       {
                case '[':
                     br_o++;
                     break;
                case ']':
                     br_z++;
                     break;
      }
    }
    if(br_o==br_z) 
    return 0;

    return 1;
}
main()
{
      
      printf("%d",zagrada());
      
  
}
Preuzmi izvršnu datoteku
Rezultat:
zad13_1
zad13_2
zad13_3
zad13_4
zad13_5

ZADATAK1.4

Sastaviti funkciju jednako koja ispituje da li je otvorena srednja zagrada [ zatvorena zagradom ]. Ako je ispunjen ovaj uslov, funkcija vraća 0, a inaće vraća 1. Sastaviti main funkciju koja testira funkciju jednako. Voditi računa da zagrade mogu biti umetnute kao, npr, u primeru 10. iz Uputstva.

Rešenje zadatka:
link na stranu sa rešenjima
Rezultat:
zad14_1
zad14_2
zad14_3
zad14_4
zad14_5

ZADATAK1.5

Sastaviti funkciju etiketa koja vraća broj unetih etiketa u tekst seminarskog rada. Sastaviti main-funkciju koja testira funkciju etiketa.

Rešenje zadatka:

#include 
#include 

#define OTVOREN 1
#define ZATVOREN 0

int etiketa ()
{
    char c;
    int status=ZATVOREN, umetnuta=ZATVOREN, br_etiketa=0, pre=0;
    while(1)
    {
            c=getchar();
            if (c==EOF) break;
            if (c=='[')
                       pre=1;
            else
            if (isalpha(c) && pre==1)
            {
                          br_etiketa++;
                          pre=0;
            }
            else
            if (c==']')
            {
                       pre=0;
                           status=ZATVOREN;
            }
    }
    return br_etiketa;
}

main ()

{
          printf("Broj etiketa je: %d.\n", etiketa());
}

Rezultat:
zad15_1
zad15_2
zad15_3
zad15_4
zad15_5

ZADATAK2.1

Sastaviti funkciju prebroj koja izračunava koliko je puta koji karakter upotrebljen u tekstu. Sastaviti main-funkciju koja testira funkciju prebroj tako što ispisuje spisak karaktera koji su upotrebljeni bar jednom u tekstu i frekvenciju njihovog pojavljivanja.

Rešenje zadatka:
#include 

void prebroj(int slovo[])
{
	signed int c;
	for(c=getchar();c!=EOF;c=getchar())
		++slovo[c];
}

int main()
{

	int slovo[128], i;

	for (i=0; i<128; i++) slovo[i]=0;
	prebroj(slovo);
	printf("Novih redova: %d\n", slovo[10]);
	printf("Razmaka: %d\n", slovo[32]);
	for (i=33; i<127; i++)
		printf(" %c: %d\n", i, slovo[i]);

}



Preuzmi izvršnu datoteku
Rezultat:
zad21_1
zad21_2
zad21_3
zad21_4
zad21_5

ZADATAK2.2

Isto kao 2.1, samo što se ne pravi razlika između velikih i malih slova engleske abecede. (funkcija prebroji).

Rešenje zadatka:
link na stranu sa rešenjima
Rezultat:
zad22_1
zad22_2
zad22_3
zad22_4
zad22_5

ZADATAK2.3

Sastaviti funkciju slova koja prebrojava alfabetske karaktere koji nisu ograđeni srednjim zagradama. Sastaviti main-funkciju koja ispisuje rezultat rada ove funkcije.

Rešenje:
link na stranu sa rešenjima
Rezultat:
zad23_1
zad23_2
zad23_3
zad23_4
zad23_5

ZADATAK2.4

Sastaviti funkciju interpunkt koja prebrojava interpunkcijske karaktere koji su se pojavili u tekstu izvan etiketa. Srednje zagrade se ne računaju osim u slučaju da čine deo teksta. (Videti primer 10. u Uputstvu).

Rešenje:
#include

void interpunkt_znaci()
{
  int c;
  int broj_tacaka=0;
  int broj_zareza=0;
  int broj_zagrada=0;
  int broj_srednjih=0;
  int br_upitnika=0;     
  int br_uzvika=0;
  int pr=0;
  int uetiketi=0;
      while((c=getchar()) != EOF)
      {
          if(c=='[' && pr!='\\')
          uetiketi=1;
          if(c==']')       
          uetiketi=0;
          pr=c;   
          if(!uetiketi)
          {
            switch(c)
             {
               case '.':
                 broj_tacaka++;
                 break;
               case ',':
                 broj_zareza++;
                 break;
               case '(':
                 broj_zagrada++;
                 break;
               case '[':
                 broj_srednjih++;
                 break;
               case '?':
                 br_upitnika++;
                 break;
               case '!':
                 br_uzvika++;
                 break;
              }
           }
       }
      
      printf("Tacke se u ponavljaju %d puta u tekstu\n",broj_tacaka);
      printf("Zarez se ponavlja %d puta u tekstu\n",broj_zareza);
      printf("Zagrada se ponavlja %d puta u tekstu\n",broj_zagrada);
      printf("Srednje zagrade se ponavljaju %d puta u tekstu\n",broj_srednjih);
      printf("Znak pitanja se ponavlja %d puta u tekstu\n",br_upitnika);
      printf("Znak uzvicnik se ponavlja %d puta u tekstu\n",br_uzvika);
      
      
}
main()
{
      interpunkt_znaci();
}
Preuzmi izvršnu datoteku
Rezultat:
zad24_1
zad24_2
zad24_3
zad24_4
zad24_5

ZADATAK2.5

Sastaviti funkciju reci koja izračunava raspodelu po dužini reči u tekstu seminarskog. Kao reči se uzimaju nizovi alfabetskih karaktera koji se ne nalaze unutar etiketa. Npr. u tekstu Od toga [dig 17] sedamnaest [] vrsta pripada papratima ([fl_la Pteridophyta] Pterodofita []) ima sedam reči. Dužina reči Od je 2, dužina toga je 4, dužina reči sedamnaest je 10, itd.

Rešenje:
link na stranu sa rešenjima
Rezultat:
zad25_1
zad25_2
zad25_3
zad25_4
zad25_5

ZADATAK3.1

Sastaviti funkciju etik koja kao argument dobija etiketu iza otvorene srednje zagrade i vraća 0 ako je etiketa korektna, inače 1. Sastaviti funkciju koja testira funkciju etik. Npr. za etiketu [dig 17], funkcija dobija kao argument nisku dig i vraća 0, dok za etiketu [dim 17] vraća 1.

ZADATAK3.2

Sastaviti funkciju provera koja proverava da li je svaki obeleženi deo teksta etiketiran nekom od etiketa iz grupa A, B i C koristeći funkciju etik iz zadatka 3.1. U slučaju da jeste, funkcija vraća 0, a u suprotnom broj nepravilnih etiketa. Funkcija treba da ispiše svaku nepravilnu etiketu kada na nju naiđe. Sastaviti funkciju za testiranje.

Rešenje:
link na stranu sa rešenjima
Rezultat:
zad32_1
zad32_2
zad32_3
zad32_4
zad32_5

ZADATAK3.3

Sastaviti funkciju jednako koja kao argument uzima etiketirani tekst i ispisuje originalni tekst i tekst zamene kao u sledećem primeru: Ulazni tekst je \[ Sxtampa [abk br.] broj [] [dig 12.] dvanaest [] od ove godine], a funkcija uzima etiketu po etiketu i ispisuje abk br. = broj dig 12 = dvanaest

Rešenje:
link na stranu sa rešenjima
Rezultat:
zad33_1
zad33_2
zad33_3
zad33_4
zad33_5

ZADATAK3.4

Sastaviti funkciju ispis koja kao argument uzima neku od etiketa (dig, abk, itd.) i vraća 0 ako se ta etiketa ne pojavljuje u tekstu seminarskog, a inače vraća broj pojavljivanja upotrebljene etikete. Funkcija ispisuje sva pojavljivanja zadate etikete. Sastaviti funkciju za testiranje funkcije ispis.

Rešenje:

#include 
#include 

#define ETIKETA "dig"

int etiketa (char *etik)
{
    int bretiketa=0, i=0, j=0, uetiketi=0, razmak= 1;
    char c, rec[5];
    while((c=getchar())!=EOF)
    {
          if (c=='[') 
          {
             razmak = 1;         
             uetiketi = 1;
             i = 0;
          }
          else
          if (c==']')
          {
             razmak=1;       
             uetiketi=0;
          }
          else
          if (uetiketi)
          {
             if (c==' ')
                   razmak = 0; 
             if(!razmak)
                 {  
                    rec[i]='\0';
                    if (strcmp(etik,rec)==0)
                    {
                                             bretiketa++; 
                                             putchar('[');
                                             printf("%s ", ETIKETA);
                                             while((c=getchar())!=']')
                                             putchar(c);
                                             putchar(']');
                                             putchar('\n');                          
                                             i=0;

                    }
                 }
              else     
                    {
                        rec[i]=c;
                        i++;
                    }    
           }                                         
    }   
    return bretiketa;
}

main ()
{
     int t;
     char trazena_etiketa[]=ETIKETA;
  
     t=etiketa(trazena_etiketa);
     printf("\nU tekstu postoji %d %s etiketa", t, ETIKETA);  
}
Preuzmi izvršnu datoteku
Rezultat:
zad34_1
zad34_2
zad34_3
zad34_5
zad34_5

ZADATAK3.5

Sastaviti funkciju rekonstrukt koja iz teksta seminarskog briše sve zamenjene delove i uspostavlja početni tekst. Sastaviti funkciju za testiranje ove funkcije. Npr. za tekst Od toga [dig 17] sedamnaest [] vrsta pripada papratima ([fl_la Pteridophyta] Pterodofita []), funkcija ispisuje Od toga 17 vrsta pripada papratima (Pteridophyta).

Rešenje:
link na stranu sa rešenjima
Rezultat nije prikazan zbog autorskih prava

ZADATAK3.6

Sastaviti funkciju ispit koja formira niz upotrebljenih etiketa u tekstu seminarskog (broj etiketa <= 15). Sastaviti funkciju sort koja sortira niz formiran u funkciji ispit. Sastaviti main-funkciju koja testira funkcije ispit i sort i ispisuje sortirani niz pronađenih etiketa.

Rešenje:
link na stranu sa rešenjima
Rezultat:
zad36_1
zad36_2
zad36_3
zad36_4
zad36_5

ZADATAK3.7

Sastaviti funkciju koja za zadatu etiketu (npr. dig) formira niz niski koje se nalaze unutar te etikete. Npr. ako se u tekstu nalazilo [dig 17] sedamnaest [] i [dig 7] sedam [], niz treba da sadrži niske 17 i 7 (sortirane prema ASCII-kolacionoj sekvenciji.

ZADATAK4.1

Sastaviti funkciju kopiraj1 koja kopira tekst seminarskog zadatka u drugu datoteku bez teksta etiketa. Npr. tekst Od toga [dig 17] sedamnaest [] vrsta pripada papratima ([fl_la Pteridophyta] Pterodofita []) se kopira u Od toga sedamnaest vrsta pripada papratima (Pterodofita]).

Rešenje:

#include 

void kopiraj1()
{
     int br=0;
     char c,pret;
     pret='a';
     while ((c=getchar())!=EOF)
     {
           if (pret!='\\' && c=='[') br++;
           if (c==']') br--;
           if (br==0 && c!=']') putchar(c);
           pret=c;
     }
} 

int main()
{
    kopiraj1();
}


Preuzmi izvršnu datoteku
Rezultat nije prikazan zbog autorskih prava

ZADATAK4.2

Sastaviti funkciju kopiraj2 koja kopira obeleženi tekst seminarskog u drugu datoteku koristeći funkciju rekonstrukt i koja restaurira polazni tekst. link na stranu sa rešenjem
Rezultat nije prikazan zbog autorskih prava

ZADATAK4.3

Sastaviti funkciju kopiraj3 koja kopira tekst obeleženog seminarskog u izlaznu datoteku tako da prepisuje samo etiketirane delove i to svaki etiketirani deo u novi red. Npr. tekst za tekst Od toga [dig 17] sedamnaest [] vrsta pripada papratima ([fl_la Pteridophyta] Pterodofita []), se kopira u tekst [dig 17] sedamnaest [] [fl_la Pteridophyta] Pterodofita []

ZADATAK4.4

Sastaviti funkciju kopiraj4 koja kopira tekst obeleženog seminarskog u drugu datoteku zamenjujući etiketu koja se prenosi kao argument html-etiketom po izboru. Npr. tekst obeležen kao dig u crveno obojeni tekst ili skraćenice u plavo obojeni tekst.

Rešenje:

ZADATAK4.5

Sastaviti funkciju kopiraj5 koja u izlaznu datoteku prepisuje samo reči koje su palindromi. Ispitivanje palindroma izdvojiti u zasebnu funkciju palindrom.

Rešenje:

#include 
#include 

int palindrom (char s[]);
void kopiraj5(char s[], int i);

main ()
{
     int c,i=0;
     char rec[2000]; 
     while ((c=getchar())!=EOF)
     {
           if (!((c>='A' && c<='Z') || (c>='a' && c<='z')))
           {
                    rec[i]='\0';
                    if (palindrom(rec) && i>1)
                       kopiraj5(rec,i); 
                    i=0;
           }
           else     
                    {
                        rec[i]=c;
                        i++;
                    }
           }
     
   
     
}

int palindrom (char s[])
{
     int i,j;
     for (i=0, j=strlen(s)-1; i

Preuzmi izvršnu datoteku
Rezultat:
zad45_1
zad45_2
zad45_3
zad45_4
zad45_5