[ danijel_m @ 19.09.2006. 12:48 ] @
Lijepi pozdrav,

danas mi je frend donio pitanja sa prošlog ispitnog roka... Neke znam rješiti, a pitanja koja navodim ne znam nikako...

Code:

1. Napisi funkciju koja ce ispisati ime, prezime za sve elemente vezane liste kod kojih je broj bodova atpBodovi manji od maksimalnog broja smjestenog i varijabli maxBrojBodova. Prototip je:

void manjiNaListi(ClanATPPtr poc Ptr, int maxBrojBodova);

gdje pocPtr pokazuje na prvi clan liste. Struktura ClanATP i pokazivač  ClanATPPtr su definirani na sljedeci nacin:

struct clanATP{
char ime[32];
char prezime[32];
int atpBodovi;
struct clanATP *sljedeciClan;
};


typedef struct clanATP ClanATP;
typedef ClanATP *ClanATPPtr;

2. Napišite funkciju čiji je prototip:

int samoBrojevi (char *str);
Funkcija mijenja string str tako da u njemu ostavi samo brojevi 0,1,...,9. Npr. Ukoliko je str= «Broj studenata=325» nakon što se izvrši funkcija string će biti str=«325». Kao pomoćne varijable u funkciji smijete koristiti varijable tipa int i char, ali ne i string.

3. Funkcija binarnoUmanjenje(char *str); kao ulaz prima string oblika koji se sastoji od nula i jedinica (npr. str=«011000), gdje broj znamenki ovisi o ulaznom stringu (u ovom slučaju je 6). Funkcija umanjuje binarni broj za 1, vodeći računa o preteku (u ovome primjeru rezlutat je str=«010111»). Ukoliko se prilikom umanjenja dogodi da je broj negativan tada u string upisujete «ERR»

4. Funkcija binarnoUvećanje (char *str); kao ulaz prima string oblika koji se sastoji od nula i jedinica (npr. str=«011011), gdje broj znamenki ovisi o ulaznom stringu (u ovom slučaju je 6). Funkcija uvećava binarni broj za 1, vodeći računa o preteku (u ovome primjeru rezlutat je str=«010100»). Ukoliko se prilikom uvećanja dogodi da je potrebno povećati duljinu stringa tada u string upisujete «ERR».

5. Neka je prototip funkcije   int  unitVector(double a[],int n);. Napisati funkciju unitvektor koja računa jedinični vektor danog vektora. Funkcija prima jednodimenzionalno polje a[], gdje su smještene komponente vektora, te broj komponenti vektora n. Dobiveni vektor smjestiti umjesto starog vektora u polje a[].

Jed. Vektor aˆ vektora a(->) se racuna:

aˆ =  [a(->)]/[(suma (a(i))^2)]
 
jedinični vektor = vektor a / suma kvadrata komponenti vektora a


Unaprijed hvala na pomoći

P.S. Oprostite, nisam vidio da mi je prethodna tema premještena na podforum... Ako je nastao problem, izbrišite prvu, jer jedina razlika je u tome što sam u ovoj "objasnio" jednu formulu u zadatku...

[Ovu poruku je menjao danijel_m dana 19.09.2006. u 14:34 GMT+1]

[Ovu poruku je menjao danijel_m dana 19.09.2006. u 14:34 GMT+1]
[ Tiristor @ 19.09.2006. 15:44 ] @

int samoBrojevi (char *str) {
int i,j;
char znak;
for ( i=0;str;i++)
if (isalnum(str))
str[j++]=str;
str[j]='\0';
}

Evo ova funkcija ce izmenuti taj string. U njemu ce ostati samo brojevi. Medjutim, ne znam sta ce ti ta funkcija vratiti zbog toga sto si stavio da je tipa int. Ako samo treba da menja stvari stavi da je tipa void, tako se obicno stavlja kod funkcije sa bocnim efektima, a mozda i ja gresim. Za funkciju isalnum (); treba da pozoves biblioteku ctype.h. To je sto ja znam i gde mogu da ti pomognem. Oko ovih drugi stvari nemogu.

Ovu prvu stavku sa strukturama bas ne razumem.
[ Mali Misha @ 19.09.2006. 18:44 ] @
Vrednost int koju vraća funkcija iz drugog zadatka je verovatno nova dužina stringa.

Uzgred, ne čini mi se da se for u gore navedenoj funkciji neće vrteti u krug i pisati sve više i više izvan predviđene memorije dok program ne padne. Takođe isalnum ne vraća ne-nula samo za cifre nego i za slova. Ovde bi bio primenjiv isdigit.

Code:
int f(char *s)
{
    int p=0;
    char *t = s;

    while(*t)
    {
        if(isdigit(*t))
        {
            s[p++] = *t;
        }

        t++;
    }

    s[p] = 0;

    return p;
}



Kod prvog mi se čini da deklaracija treba da glasi void manjiNaListi(ClanATPPtr poc_Ptr, int maxBrojBodova); . Ok, ovako se prolazi kroz listu (null-elemenat na kraju) i proverava da li neki elemenat zadovoljava traženi uslov.

Code:
// netestirano
void manjiNaListi(ClanATPPtr poc_Ptr, int maxBrojBodova)
{
    while(poc_Ptr)
    {
        if(poc_Ptr->atpBodovi < maxBrojBodova)
        {
        }

        poc_Ptr = poc_Ptr->sljedeciClan;
    }
}

Tebi ostavljam ispis imena i prezimena.