|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Dec 2006
Messaggi: 18
|
ordinamento lessicografico stringhe in C con mergesort
[i]Qualcuno può aiutarmi con questo esercizio, sono disperato!!!
Ecco il testo: [b]Scrivere un programma in C che riceva in input un insieme di parole (stringhe, possibilmente lette da un file di testo) e produca in output (possibilmente su file) le parole di input ordinate. Esempio: Input: “Oggi è proprio una bella giornata. Quasi quasi vado al mare.” Output: al bella è giornata mare Oggi proprio Quasi quasi una vado Per l’ordinamento utilizzare l’algoritmo di Merge Sort (versione ricorsiva) ovviamente modificato per operare su array di puntatori a char anziché su array di int. Inoltre, lo spazio da allocare in memoria per memorizzare le parole lette da file deve essere dinamico, ovvero bisogna contare prima le parole e poi allocare lo spazio necessario. |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Dec 2006
Messaggi: 18
|
vi prego, devo consegnarlo entro domani sera
|
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Oct 2006
Messaggi: 170
|
Codice HTML:
#include <stdio.h> #include <stdlib.h> #include <string.h> int caricamento(char *frase); void ordinamento(char **parole, int ); void swap(char **p, char **q); void stampa(char **parole, int ); int main(){ char *frase,**parole,*temp; int np,i,j; frase=(char*)malloc(1); if (frase== NULL) printf("ERRORE DI ALLOCAZIONE DI MEMORIA"); np=caricamento(frase); if (np>0){ parole=new char*[np]; parole[0]=strtok(frase," "); for(i=1;i<np;i++) parole[i]=strtok(NULL," "); ordinamento(parole,np); stampa(parole,np); }else printf("non hai inserito nulla\n"); system("pause"); } int caricamento(char *frase){ int i,np=0; printf("Inserire frase...\n"); for(i=0;;i++){ frase[i]=getchar(); if(frase[i]==' ') np++; else if(frase[i]=='\n'){ frase[i]='\0'; if(i!=0) np++; break; } } return np; } void ordinamento(char **parole, int np){ int i,j; for (i=0;i<np;++i){ for (j=i+1;j<np;++j){ if (strcmp(parole[i],parole[j])>0){ swap(&parole[i], &parole[j]); } } } } void swap(char **p, char **q){ char *temp; temp=*p; *p=*q; *q=temp; } void stampa(char **parole, int np){ int i; printf("Parole ordinate:\n"); for (i=0;i<np;i++) printf("%s\n",parole[i]); } ora qwualcuno sostituisca bubblesort con mergesort e il gioco è fatto |
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Dec 2006
Messaggi: 18
|
Qualcuno riesce a modificarlo per ordinare una stringa? Vi prego, devo consegnarlo entro domani sera.
[i]#include <stdlib.h< #include <stdio.h< #define MAX 300 /* * Legge in input il numero n ed n numeri interi * che memorizza nell'array. Restituisce il numero * di elementi letti (n). */ int leggi_array(int V[]) { int n, i; printf("Numero di elementi: "); scanf("%d", &n); for (i=0; i<n; i++) scanf("%d", &V[i]); return(n); } /* * Stampa in output l'array. */ void stampa_array(int V[], int n) { int i; for (i=0; i<n; i++) { printf("%d ", V[i]); } printf("\n"); return; } /* * Funzione Merge per la fusione di due * componenti ordinate dell'array. */ void Merge(int A[], int p, int q, int r) { int i, j, k, B[MAX]; i = p; j = q+1; k = 0; while (i<=q && j<=r) { if (A[i]<A[j]) { B[k] = A[i]; i++; } else { B[k] = A[j]; j++; } k++; } if (i<=q) { while (i<=q) { B[k] = A; i++; k++; } } else { while (j<=r) { B[k] = A[j]; j++; k++; } } for (k=p; k<=r; k++) A[k] = B[k-p]; return; } /* * Funzione ricorsiva MergeSort. */ void MergeSort(int A[], int p, int r) { int q; if (p<r) { q = (p+r)/2; MergeSort(A, p, q); MergeSort(A, q+1, r); Merge(A, p, q, r); } return; } /* * Funzione principale */ int main(void) { int n, V[MAX]; n = leggi_array(V); MergeSort(V, 0, n-1); stampa_array(V, n); return(1); } |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:38.



















