24.11.2.24011740. Napisati program koji traži od korisnika da unese niz rečenica, pri čemu se broj rečenica prethodno unosi sa tastature. Za svaku unesenu rečenicu dinamički alocirati prostor, uz vođenje evidencije o adresi svake alocirane rečenice u nizu pokazivača na početke svake od rečenica. Nakon toga, treba ispisati unesene rečenice sortirane u obrnuti abecedni poredak. Za sortiranje koristiti QuickSort postupak i razmjenu pokazivača (umjesto razmjene čitavih rečenica).

Opis rješenja:

Listing programa:

#include <iostream>
#include <conio.h>
#include <cstring>
using namespace std;

void sortniz2(char **p,int n){
if(n<=1)return;
char *pivot=p[n/2];
int lp(0),dp(n);

char pom[100],pom1[100];

strcpy(pom1,pivot);
    while(lp<=dp){
        strcpy(pom,p[lp]);
        while(strcmp(pom1,pom)<0){
                lp++;
                strcpy(pom,p[lp]);
                }
        strcpy(pom,p[dp]);
        while(strcmp(pom1,pom)>0){
                dp--;
                strcpy(pom,p[dp]);
                }
        if(lp<=dp){
            char *a;
            a=p[lp];
            p[lp]=p[dp];
            p[dp]=a;            
            lp++;
            dp--;
        }
    }
sortniz2(p,dp+1);
sortniz2(p+lp,n-lp);
}


int main(){
int n1,n;
//sortiramo najmanje tri recenice
cin>>n1;
n=n1;
cin.ignore(100,'\n');
char **reci;
try{
reci=new char *[n];
for(int i=0;i<n;i++)
    reci[i]=0;
for(int i=0;i<n;i++){
    char pom[100];
    cin.getline(pom,sizeof pom);
    reci[i]=new char[strlen(pom)+1];
    strcpy(reci[i],pom);
    }
sortniz2(reci,n-1);
cout<<endl;
for(int i=0;i<n;i++)
    cout<<reci[i]<<endl;
}


catch(...){
cout<<"memory?";
for(int i=0;i<n;i++)
    delete [] reci[i];
delete [] reci;
}
for(int i=0;i<n;i++)
    delete [] reci[i];
delete [] reci;
getch();
return 0;
}

Ispis na ekranu:

Riješeni zadaci 2    Index