Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7 punta su un display ampio e fluido, una batteria capace di accompagnare l'uso quotidiano senza ansie da ricarica e un prezzo accessibile, a partire da 179,90 euro per la versione con 64 GB di storage. Lo Snapdragon 6s 4G Gen 2 e i 4 GB di RAM della configurazione più diffusa frenano però chi cerca reattività e multitasking spinto: ecco il bilancio dopo due settimane di prova diretta
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Polygon è la concept car di Peugeot che mostra il futuro delle soluzioni del segmento B: tra design compatti e innovativi affiancati da dimensioni compatte uno scherzo dalla manovrabilità incredibile per le manovre a bassa velocità
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione
OPPO ha portato in Italia, dal 1° luglio 2026, Reno16 Pro: display AMOLED da 6,32 pollici a 144Hz, tripla fotocamera con sensore principale da 200 megapixel, chip Dimensity 8550 Super e batteria da 6000mAh, al prezzo di lancio di 899 euro. Lo abbiamo provato per due settimane insieme al nuovo accessorio Bubble, per capire se la formula compatta della serie regge ancora di fronte a un listino da 1099 euro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-06-2003, 10:06   #1
Dylan il drago
Senior Member
 
Iscritto dal: Aug 2002
Città: Cherasco
Messaggi: 8885
Niubbo con il linguaggio c cerca aiuto per una funzione

allora io ho da svolgere questo esercizio, il mio problema non consiste nell'ordinamento che sono riuscito a fare ma nella funzione leggi
vettore stringhe... l'esercizio è questo...


Esercizio 6: Ordinamento di stringhe

Dato un array a[0..n-1] di stringhe delle quali non sia nota a priori la lunghezza, procedere al suo ordinamento lessicografico utilizzando un opportuno adattamento dell'algoritmo SelectionSort (vedi esercizio 1). Nell'adattare SelectionSort si usi la funzione di libreria:

int strcmp(char s[], char t[])

se s < t restituisce un valore < 0;

se s == t restituisce 0

se s > t restituisce un valore > 0

L'array di stringhe deve essere allocato dinamicamente e la sua lunghezza n deve essere chiesta all'utente. Gli elementi del vettore sono puntatori a char; le stringhe cui questi puntatori si riferiscono devono essere lette da tastiera ed allocate dinamicamente in modo che contengano ciascuna il minimo numero di.

Si realizzino quindi le funzioni:

void leggi_vettore_stringhe(char *a[], int n)

Utilizza un array statico di caratteri buffer per leggere ciascuna stringa dall’input. Per ogni locazione dell’array di stringhe a(da 0 a n-1): legge dall’input la stringa corrente in buffer ne calcola la lunghezza, alloca dinamicamente un puntatore ad un’area della dimensione esatta per contenere la stringa in buffer, copia in questa area la stringa letta in buffer e assegna tale puntatore come valore della locazione corrente dell’array a.

void ordina(char* a[], int limite)

ordina in modo lessicografico l'array stringhe a tra le posizioni 0 e limite -1, mediante SelectionSort


qualche anima pia potrebbe aiutarmi a completare questo esercizio? sono agli inizi e mi trovo in difficoltà
__________________
Trattative concluse positivamente:gV, RuBiNo, puddu, EBJ, syscall ,damy0489, phantom101, AleAme, Marco166,Kardo, capitanofindus,Andrea87,athlon900,]Rik`[,Manoel,Madelui,Bestia666,brutal,ReaToMe,wolfnyght,Marilyn 52,oldfield e molti altri
Dylan il drago è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2003, 10:52   #2
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
cosa intendi per ordinamento lessicografico?
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2003, 11:02   #3
Dylan il drago
Senior Member
 
Iscritto dal: Aug 2002
Città: Cherasco
Messaggi: 8885
dal a alla z


io ho fatto questo ragionamento... dato che devo usare il selection sort e non un merge io pensavo di trovare la stringa più piccola e metterla per prima nel vettore e andare avanti così.. per trovare la stringa più piccola ho fatto questa funzione dite che funge?

int minimo(char *a[], int start, int limite)
{
char min[100];
copia(min,*a[start]);
char stringa1[100];
int i,j;
copia(stringa1,*a[start+1];
while( start< limite)
{
j=strcmp(min,stringa1);
if (j>0)
{
copia(min,*a[start]);
i=start;

}
start++;
}
return i;
}
void copia(char *s, char *t)
{
while((*s = *t)!='\0')
{
s++;
t++;
}
}
__________________
Trattative concluse positivamente:gV, RuBiNo, puddu, EBJ, syscall ,damy0489, phantom101, AleAme, Marco166,Kardo, capitanofindus,Andrea87,athlon900,]Rik`[,Manoel,Madelui,Bestia666,brutal,ReaToMe,wolfnyght,Marilyn 52,oldfield e molti altri
Dylan il drago è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2003, 12:32   #4
Dylan il drago
Senior Member
 
Iscritto dal: Aug 2002
Città: Cherasco
Messaggi: 8885
il programma l'ho fatto così sapreste dirmi perchè dopo che inserisco la grandezza del vettore e inserisco la prima stringa mi si blocca ed esce?

#include<stdio.h>
#include<stdlib.h>

int minimo(char *a[], int start, int limite)
{
char min[100];
copia(min,*a[start]);
char stringa1[100];
long i,j;
copia(stringa1,*a[start]);
while( start< limite)
{
j=strcmp(min,stringa1);
if (j>0)
{
copia(min,*a[start]);
i=start;

}
start++;
}
return i;
}
int copia(char *s, char *t)
{
while((*s = *t)!='\0')
{
s++;
t++;
}
return 1;
}

void ordina(char *a[], int limite)
{
int d,i=0,m=0,j;
char temp[100];
while (i<limite)
{
d=minimo(a,i,limite);
copia(temp,a[i]);
copia(a[i],a[d]);
copia(a[d],temp);
i++;
}
for(j=0;j<limite;j++) printf("%c ", *a[j]);
printf("\n");
}

void leggi_vettore_stringhe(char *a[], int n)
{
int c;
char buff[20];
for(c=0;c<n;c++)
{
printf("Inserisci stringa %d",c+1);
gets(buff); //legge la stringa e la mette nel buffer
*a[c]=strdup(buff); //dupplica la stringa generando un puntantore a una strnga ottimizzata
}

}

int main (void)
{


int g;
printf("inserire la grandezza del vettore");
scanf("%d",&g);
char *pd[g];
leggi_vettore_stringhe(pd,g);
ordina (pd,g);
getch();
return 1;
}
__________________
Trattative concluse positivamente:gV, RuBiNo, puddu, EBJ, syscall ,damy0489, phantom101, AleAme, Marco166,Kardo, capitanofindus,Andrea87,athlon900,]Rik`[,Manoel,Madelui,Bestia666,brutal,ReaToMe,wolfnyght,Marilyn 52,oldfield e molti altri
Dylan il drago è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2003, 13:14   #5
lombardp
Senior Member
 
L'Avatar di lombardp
 
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
A occhio vedo che queste cose non mi tornano:

Codice:
copia(min,*a[start]);
perché copia vuole due puntatori quindi presumo:

Codice:
copia(min,a[start]);
E poi:

Codice:
*a[c]=strdup(buff);
sempre per un motivo analogo presumo sia:

Codice:
a[c]=strdup(buff);
__________________
---> Lombardp
CSS Certified Expert (Master Level) at Experts-Exchange
Proud user of LITHIUM forum : CPU technology
Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo
lombardp è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2003, 14:05   #6
Dylan il drago
Senior Member
 
Iscritto dal: Aug 2002
Città: Cherasco
Messaggi: 8885
Quote:
Originally posted by "lombardp"

A occhio vedo che queste cose non mi tornano:

Codice:
copia(min,*a[start]);
perché copia vuole due puntatori quindi presumo:

Codice:
copia(min,a[start]);
E poi:

Codice:
*a[c]=strdup(buff);
sempre per un motivo analogo presumo sia:

Codice:
a[c]=strdup(buff);
grazie a te ho trovato il primo errore... ora mi fa inserire le stringhe però poi mi si blocca appena scrivo l'ultima...
e mi da questo errore
58 [Warning] assignment makes pointer from integer without a cast
uff grazie cmq
__________________
Trattative concluse positivamente:gV, RuBiNo, puddu, EBJ, syscall ,damy0489, phantom101, AleAme, Marco166,Kardo, capitanofindus,Andrea87,athlon900,]Rik`[,Manoel,Madelui,Bestia666,brutal,ReaToMe,wolfnyght,Marilyn 52,oldfield e molti altri
Dylan il drago è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2003, 14:18   #7
Dylan il drago
Senior Member
 
Iscritto dal: Aug 2002
Città: Cherasco
Messaggi: 8885
Quote:
Originally posted by "Dylan il drago"


void leggi_vettore_stringhe(char *a[], int n)
{
int c;
char buff[20];
for(c=0;c<n;c++)
{
printf("Inserisci stringa %d",c+1);
gets(buff); //legge la stringa e la mette nel buffer
*a[c]=strdup(buff); //dupplica la stringa generando un puntantore a una strnga ottimizzata
}

}
inoltre questo pezzo mi fa inserire la stringa ma la prima non me la fa inserire passa subito alla seconda mida inserire stringa1 e non facendomi schiacciare niente passa alla seconda richiesta....
__________________
Trattative concluse positivamente:gV, RuBiNo, puddu, EBJ, syscall ,damy0489, phantom101, AleAme, Marco166,Kardo, capitanofindus,Andrea87,athlon900,]Rik`[,Manoel,Madelui,Bestia666,brutal,ReaToMe,wolfnyght,Marilyn 52,oldfield e molti altri
Dylan il drago è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2003, 14:23   #8
Dylan il drago
Senior Member
 
Iscritto dal: Aug 2002
Città: Cherasco
Messaggi: 8885
void ordina(char *a[], int limite)
{
int d,i=0,m=0,j;
char temp[100];
while (i<limite)
{
//d=minimo(a,i,limite);
copia(temp,a[i]);
copia(a[i],a[d]);
copia(a[d],temp);
i++;
}
for(j=0;j<limite;j++) printf("%c ", *a[j]);
printf("\n");
}


ora mi si blocca dopo l'istruzione qui sopra con le due barre... non mi fa il copia sotto.... sapete aioutarmi? vi prego perchè devo consegnarlo entro stasera questo programma
__________________
Trattative concluse positivamente:gV, RuBiNo, puddu, EBJ, syscall ,damy0489, phantom101, AleAme, Marco166,Kardo, capitanofindus,Andrea87,athlon900,]Rik`[,Manoel,Madelui,Bestia666,brutal,ReaToMe,wolfnyght,Marilyn 52,oldfield e molti altri
Dylan il drago è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2003, 15:04   #9
lombardp
Senior Member
 
L'Avatar di lombardp
 
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
Al posto di COPIA, perché non usare STRCPY ?

E usare SCANF al posto di GETS ?
__________________
---> Lombardp
CSS Certified Expert (Master Level) at Experts-Exchange
Proud user of LITHIUM forum : CPU technology
Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo
lombardp è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2003, 15:12   #10
Dylan il drago
Senior Member
 
Iscritto dal: Aug 2002
Città: Cherasco
Messaggi: 8885
Quote:
Originally posted by "lombardp"

Al posto di COPIA, perché non usare STRCPY ?

E usare SCANF al posto di GETS ?
ma scanf va meglio?

copia perchè il prof vuole che strcpy sia fatto da noi!!

inoltre quel maledetto leggi_vettore_stringa non mi fa leggere la prima stringa ma passa subito alla seconda.... perchè?
__________________
Trattative concluse positivamente:gV, RuBiNo, puddu, EBJ, syscall ,damy0489, phantom101, AleAme, Marco166,Kardo, capitanofindus,Andrea87,athlon900,]Rik`[,Manoel,Madelui,Bestia666,brutal,ReaToMe,wolfnyght,Marilyn 52,oldfield e molti altri
Dylan il drago è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2003, 15:48   #11
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
copia non va bene...

Se *s è più corta di *t vai a scrivere fuori dalla lunghezza assegnata ad *s...

Una cosa così potrebbe andare bene:
Codice:
int copia(char **s, char *t) 
{ 
	if(*s) free(*s);
	*s=(char *)strdup(t);
	return strlen(*s); 
}
Per richiamarla:
Codice:
char *min = NULL; 
char *stringa1 = NULL; //stringa1 non ti serve a niente
long i = start,j; //nota anche qui un'errore...i non l'avevi inizializzato...
copia(&min,a[start++]);
while( start< limite) 
{ 
   j=strcmp(min,a[start]); //devi fare il confronto con a[start] non con stringa1
Inoltre quando trovi il minimo devi fare in questo modo:
Codice:
if((d=minimo(a,i,limite)) > i)
{ 
   copia(&temp,a[i]); 
   copia(&a[i],a[d]); 
   copia(&a[d],temp); 
}
Altrimenti ti sbirilla in cui a[i] sia la stringa minima...
Finito il ciclo devi deallocare sia min
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2003, 15:57   #12
Dylan il drago
Senior Member
 
Iscritto dal: Aug 2002
Città: Cherasco
Messaggi: 8885
scusa quando hai fatto il copia perchè con int? cosa restituisce? eppoi nell'ultimo codice perchè maggiore di i?

miseria mi accorgo di essere proprio incapace...

ah e poi un'altra cosa:

ho fatto come mi hai consigliato ... però la funzione leggi_stringa_vettore mi legge ancora la seconda stringa saltando la prima...
__________________
Trattative concluse positivamente:gV, RuBiNo, puddu, EBJ, syscall ,damy0489, phantom101, AleAme, Marco166,Kardo, capitanofindus,Andrea87,athlon900,]Rik`[,Manoel,Madelui,Bestia666,brutal,ReaToMe,wolfnyght,Marilyn 52,oldfield e molti altri
Dylan il drago è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2003, 16:05   #13
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ah...mi ero scordato...metti in alto:

#include <string.h> così ti toglie il warning su strdup...anche togliendo il cast (char *)...

Restituisce strlen della stringa copiata...cioè il numero di caratteri copiati... Anche tu l'avevi messo int e gli facevi ritornare sempre 1...

Perchè nel cas che d sia uguale a i non deve fare lo scambio...si scambierebbe con se stesso...e copia(&a[i],a[d]); potrebbe dare seri problemi !!!
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2003, 16:08   #14
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originally posted by "Dylan il drago"

mi legge ancora la seconda stringa saltando la prima...
Codice:
void leggi_vettore_stringhe(char *a[], int n) 
{ 
	int c; 
	char buff[20]; 
	fflush(stdin);
Resta l'invio della prima scanf nello standard input...con fflush svuti lo standard input...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2003, 16:08   #15
Dylan il drago
Senior Member
 
Iscritto dal: Aug 2002
Città: Cherasco
Messaggi: 8885
Quote:
Originally posted by "cionci"

Ah...mi ero scordato...metti in alto:

#include <string.h> così ti toglie il warning su strdup...anche togliendo il cast (char *)...

Restituisce strlen della stringa copiata...cioè il numero di caratteri copiati... Anche tu l'avevi messo int e gli facevi ritornare sempre 1...

Perchè nel cas che d sia uguale a i non deve fare lo scambio...si scambierebbe con se stesso...e copia(&a[i],a[d]); potrebbe dare seri problemi !!!
grazie mille
ora devo capire perchè leggi_vettore_stringa non mi funge bene.. non riesco a capire...
__________________
Trattative concluse positivamente:gV, RuBiNo, puddu, EBJ, syscall ,damy0489, phantom101, AleAme, Marco166,Kardo, capitanofindus,Andrea87,athlon900,]Rik`[,Manoel,Madelui,Bestia666,brutal,ReaToMe,wolfnyght,Marilyn 52,oldfield e molti altri
Dylan il drago è offline   Rispondi citando il messaggio o parte di esso
Old 18-06-2003, 20:24   #16
Dylan il drago
Senior Member
 
Iscritto dal: Aug 2002
Città: Cherasco
Messaggi: 8885
up per favore help entro stanotte alle 11 e 59 devo consegnarli via mail al professore
__________________
Trattative concluse positivamente:gV, RuBiNo, puddu, EBJ, syscall ,damy0489, phantom101, AleAme, Marco166,Kardo, capitanofindus,Andrea87,athlon900,]Rik`[,Manoel,Madelui,Bestia666,brutal,ReaToMe,wolfnyght,Marilyn 52,oldfield e molti altri
Dylan il drago è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2003, 07:34   #17
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originally posted by "Dylan il drago"

up per favore help entro stanotte alle 11 e 59 devo consegnarli via mail al professore
Se vuoi che te lo faccia dimmelo... Perchè leggi_vettore_stringa non funziona bene te l'ho scritto sopra...
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni Redmi Pad 2 9.7: ampio display, economico e peso...
Peugeot Polygon Concept: ecco il futuro delle utilitarie Peugeot Polygon Concept: ecco il futuro delle ut...
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
Nasce Sky Nomad, la nuova gamma di Xiaom...
Microsoft inizia a sostituire OpenAI e A...
Acer Nitro V 15 con RTX 5060 e Intel Cor...
id Software dimezzata, tagli in Bethesda...
Claude non scrive tutto quello che pensa...
Volete un MacBook Pro con chip M5 Pro sc...
WhatsApp amplia le funzioni su WearOS: o...
TV TCL da 75 pollici a 549,90€: 4K HDR e...
Gli elettori americani chiedono a Claude...
Offerte Amazon PC, pioggia di sconti su ...
UMA: l'ex ingegnere di Tesla Optimus lan...
Discord banna per errore 8.200 account: ...
Come una rete 5G privata di WINDTRE BUSI...
'L'era della grande crescita è fi...
Muse Image: il nuovo modello AI di Meta ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:26.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v