Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
OnePlus 15 nasce per alzare l'asticella delle prestazioni e del gaming mobile. Ma non solo, visto che integra un display LTPO 1,5K a 165 Hz, OxygenOS 16 con funzioni AI integrate e un comparto foto con tre moduli da 50 MP al posteriore. La batteria da 7.300 mAh con SUPERVOOC 120 W e AIRVOOC 50 W è la ciliegina sulla torta per uno smartphone che promette di offrire un'esperienza d'uso senza alcun compromesso
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media
Vediamo come si comporta il Ryzen 5 7500X3D, nuovo processore di casa AMD che fonde 6 core Zen 4 con la tecnologia 3D V-Cache, particolarmente utile in scenari come il gaming. Annunciato a un prezzo di listino di 279€, il nuovo arrivato sarà in grado di diventare un riferimento per i sistemi budget? Ecco cosa ne pensiamo.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-06-2003, 11: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, 11: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, 12: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, 13: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, 14: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, 15: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, 15: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, 15: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, 16: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, 16: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, 16: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, 16: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, 17: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, 17: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, 17: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, 21: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, 08: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


Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
SONY BRAVIA 8 II e BRAVIA Theatre System 6: il cinema a casa in formato compatto SONY BRAVIA 8 II e BRAVIA Theatre System 6: il c...
KTC H27E6 a 300Hz e 1ms: come i rivali ma a metà prezzo KTC H27E6 a 300Hz e 1ms: come i rivali ma a met&...
4,9 miliardi su Google: Buffett sfida il...
Google ha svelato un agente AI che può g...
Tesla cambia idea: è in arrivo l'...
Anche Firefox punta sull'intelligenza ar...
Stop alle super-accelerazioni delle auto...
Osservatorio AGCOM: sempre più ac...
Sempre più IA su Spotify: arrivan...
iMac M4 crolla a 1.199€ con risparmio di...
Nintendo Switch 2: in rilascio un nuovo ...
Core Ultra 9 290K Plus, Core Ultra 7 270...
Prezzo Black Friday per le super cuffie ...
Crollano i prezzi della cuffie Beats col...
ASUS ROG Matrix RTX 5090 costa 4000 doll...
Grazie ai dati di ESA il calcolo della t...
Rilasciati nuovi video e immagini della ...
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: 19:17.


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