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
|
|