[ ZivaTheMan @ 05.02.2008. 20:43 ] @
Hey caos ljudi..imama jedan problem oko c-a..
Poceo sam da pravim program koji sortira unesena imene po abecedi.
Ali sam se zaglavio i ne mogu da ga zavrsim

Code:

#include <iostream>
#include <conio>
#include <stdio>
#include <stdlib>

main()
{

char *p[50];
char *z1=new char [100];
gets(z1);
p[0]=z1;
char *z2=new char [100];
cin>>z2;
p[1]=z2;
char *z3=new char [100];
cin>>z3;
p[2]=z3;
char *z4=new char [100];
cin>>z4;
p[3]=z4;
char *z5=new char [100];
cin>>z5;
p[4]=z5;

cout<<endl;
                                    
for(int i=0;i<5;i++)
    cout<<p[i]<<endl;



getch();
}


Ja misim da sam dobro odradio prvi deo.Mogu da unesem imena i da ih ispisem,ali ne znam kako da ih sortiram po abecednom redu.

Znam za qsort funkciju ali ne znam da je prilagodim da radi sa ovim karakterima.
Koja je razlika izmedju strcmp || strncmp ?
Ako moze mala pomoc da zavrsim zadatak ?



[Ovu poruku je menjao X Files dana 06.02.2008. u 08:40 GMT+1]
[ laki_srt @ 05.02.2008. 21:10 ] @
Code:

char *p[50];
char *z1=new char [100];
gets(z1);
p[0]=z1;
char *z2=new char [100];
cin>>z2;
p[1]=z2;
char *z3=new char [100];
cin>>z3;
p[2]=z3;
char *z4=new char [100];
cin>>z4;
p[3]=z4;
char *z5=new char [100];
cin>>z5;
p[4]=z5;

Ovo ti je prakticnije odraditi sa dvodimenzionalnim nizom.
strcmp(s,t)-uporedjuje string s i t i ako je s<t vraca vrednost <0,ako je s=t vraca 0,a ako je s>t vraca vrednost >0
nisam cuo za fju strncmp(); vec strncpy(); i strcpy();
strncpy(n,s,t)-kopira najvise n znakova iz t u s;
btw kod strcmp trebas obratiti paznju da velika slova imaju manju vrednost od malih slova,znaci ako uporedujes A sa z,program ce ispisati da je z>A
[ ZivaTheMan @ 05.02.2008. 21:35 ] @
Izwini shto te mucim ali shto se tice dvo dimenzionalnih nizova (matrica) tu sam slab,pa sam zbog toga izabrao ovu soluciju..
Dali ovde mogu da uglavim qsort + f-ja koja bi sortirala po abecedi,npr ovako :

Code:

qsort(p,50,sizeof(char),uporedi1);


funkcija:
Code:
void uporedi1()
    {
     char z=strcmp(???????)
     ?      
     ?
     ?
     ?
    }

ehh ovo je tezi deo

[Ovu poruku je menjao X Files dana 06.02.2008. u 08:41 GMT+1]
[ laki_srt @ 05.02.2008. 21:53 ] @
nikad nisam koristio funkciju qsort,al evo metoda koju ja inace uvek koristim(cini mi se da se zove metoda izbora):
Code:

void sortiraj(char a[][25],int n){/* n-broj imena */
    int i;
    char temp[25];/*pomocni niz u koji ce se smestati jedno ime*/
    for (i=0;i<=n-1;i++)
       for(j=i;j<=n;j++)
        if((strcmp(a[j],a[i]))<0){
            strcpy(temp,a[i]);
            strcpy(a[i],a[j]);
            strcpy(a[j],temp);}
}

dvodimenzionalni nizevi: niz [2][2]={{1,2},{3,4}}; dok bi preko 1 dim izgledalo ovako:
niz1[1][1]={1,2}; niz2[1][1]={3,4}; znaci bukvalno smestas dva niza u jedan niz jedan ispod drugog
i isti je i nacin pristupanja nizu,znaci u ovom primeru bi bilo niz[2][1]=3;,nadam se da sam uspeo bar nesto pojasniti
[ ZivaTheMan @ 06.02.2008. 00:33 ] @
Yupi jejejeejejjeeej
Uspeo sam
Hvala Laki shto si mi pojasnio matrice i objasnio sortiranje.
100% working
Code:

#include <iostream>
#include <conio>
#include <stdio>
#include <stdlib>




main()
{

char *p[5];
char *z1=new char [100];
gets(z1);
p[0]=z1;
char *z2=new char [100];
gets(z2);
p[1]=z2;
char *z3=new char [100];
gets(z3);
p[2]=z3;
char *z4=new char [100];
gets(z4);
p[3]=z4;
char *z5=new char [100];
gets(z5);
p[4]=z5;

cout<<endl;

for(int i=0;i<5;i++)
    cout<<p[i]<<endl;


int i;
int j;
char temp[25];
for (i=0;i<=5-1;i++)
    for(j=i;j<=5;j++)
        if((strcmp(p[j],p[i]))<0)
        {
            strcpy(temp,p[i]);
            strcpy(p[i],p[j]);
            strcpy(p[j],temp);
        }
cout<<endl<<endl;
cout<<"Sortiran niz"<<endl;
for(int i=0;i<5;i++)
    cout<<p[i]<< " ";


getch();
}


[Ovu poruku je menjao X Files dana 06.02.2008. u 08:42 GMT+1]
[ laki_srt @ 06.02.2008. 19:02 ] @
a evo i preko dvodimenzionalnog niza:
Code:

#include <iostream>
#include <string>

using namespace std;

int main()
{
char niz[50][50],temp[50];
int broj,i,j;
cout<<"Unesite broj imena:";
    cin>>broj;
cout<<"Unesite "<<broj<<"imena:"<<endl;
for(i=0;i<broj;i++)
        cin>>niz[i];
for (i=0;i<=broj-1;i++)
    for(j=i;j<=broj;j++)
        if((strcmp(niz[j],niz[i]))<0)
        {
            strcpy(temp,niz[i]);
            strcpy(niz[i],niz[j]);
            strcpy(niz[j],temp);
        }
cout<<endl;
cout<<"Imena sortirana po abecedi:"<<endl;
for(i=0;i<broj;i++)
    cout<<niz[i]<<endl;
system("pause");
return 0;
}
[ ZivaTheMan @ 06.02.2008. 20:27 ] @
Bravo Laki CaRe...
Hvala ti puno :)