Torna indietro   Hardware Upgrade Forum > Software > Programmazione

NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
Nelle ultime settimane abbiamo provato tre delle proposte top di gamma di NZXT nelle categorie case, dissipatori e ventole. Rispettivamente, parliamo dell'H9 Flow RGB+, Kraken Elite 420 e F140X. Si tratta, chiaramente, di prodotti di fascia alta che si rivolgono agli utenti DIY che desiderano il massimo per la propria build. Tuttavia, mentre i primi due dispositivi mantengono questa direzione, le ventole purtroppo hanno mostrato qualche tallone d'Achille di troppo
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN è il primo monitor gaming con pannello QD-OLED Gen 5 a layout RGB Stripe Pixel e 360 Hz su 34 pollici: lo abbiamo misurato con sonde colorimetriche e NVIDIA LDAT. Ecco tutti i dati
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-12-2006, 15:03   #1
lucas87
Bannato
 
Iscritto dal: Oct 2006
Messaggi: 170
C:STRINGHE

Non riesco a fare questo esercizio:
Scrivere un programma in C che riceva in input un insieme di parole (stringhe) e produca in output 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

In piu allocare dinamicamente la memoria per la stringa.

Ecco la mia soluzione:

Codice HTML:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAXWORD 100
#define N 1000

void sort_word(char s[], int );
void swap(char **p, char **q);
void write_word(char s[], int );
int contaparole(char s[], int);
int caricamento(char s[]);

int main(void)
{
    char word[MAXWORD];
    char s[N];
    int n,i,num;
    
        num=contaparole(s,caricamento(s));
        if (num>=N) 
           printf("ERRORE:TROPPE PAROLE");
        if (strlen(s)>=MAXWORD)
           printf("ERRORE:PAROLA TROPPO LUNGA");
        if (calloc(strlen(s)+1,sizeof(char))== NULL)
          printf("ERRORE DI CALLOC");
          
   
    sort_word(s,num);
    write_word(s,num);
    
system("PAUSE");
return 0;
}




void sort_word(char s[], int num){
     int i,j;
     for (i=0;i<num;++i){
         for (j=i+1;j<num;++j){
             if (strcmp(s[i],s[j])<0){
                swap(&s[i], &s[j]);
                }
         }
     }        
}

void swap(char **p, char **q){
     char *tmp;
     tmp=*p;
     *p=*q;
     *q=tmp;         

}


void write_word(char s[], int num){
     int i;
     for (i=0;i<num;++i){
         printf("%s\n", s[i]);
         }
}

int caricamento(char s[]){
    int i;
    for (i = 0; ;i++){
      
    s[i]=getchar();
    if (s[i]=='\n'){
                    break;
                    }
    }
    s[i]='\0';
    return i;
}

int contaparole(char s[],int n){
    int j;
    int k=1;
    for(j=0;j<n;j++){
                     if (s[j]==' '){
                                 k++;
                                 }
    }
    return k;
}
ma mi da errore a if (strcmp(s[i],s[j])<0).
Chi mi aiuta a risolvere è un genio.
Ringrazio tutti in anticipo.
PS:ho pochissimo tempo per consegnare il rpograma funzionante, ovvero domani.
Se non capite qualcosa nel programma fatemi sapere che ve lo spiego.
lucas87 è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2006, 15:28   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Dalla singola stringa iniziale di input dovresti ottenere un array di stringhe .... cosa che non vedo ....
E quindi fare l'ordinamento sull'array di stringhe.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2006, 18:03   #3
lucas87
Bannato
 
Iscritto dal: Oct 2006
Messaggi: 170
mhhh, probabilmente si, ma nn so usarlo, se è poco da modificare non è che me lo modificheresti tu?

please
lucas87 è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2006, 18:41   #4
lucas87
Bannato
 
Iscritto dal: Oct 2006
Messaggi: 170
qualcuno mi aiutiiiii domani devo consegnaro, nn so fare l'array di stringhe!!!!!!!11
lucas87 è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2006, 18:49   #5
lucas87
Bannato
 
Iscritto dal: Oct 2006
Messaggi: 170
praticamente devo fare l'ordinamento lessicografico di un array di strighe, chi mi aiuta
lucas87 è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2006, 19:59   #6
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Ti fornisco qualche indizio utile:

- Un array di stringhe lo dichiari con ad esempio: char *stringhe[30];

- Per "spezzare" la stringa usando gli spazi come delimitatori puoi usare la funzione di libreria strtok(). Ovviamente si può anche fare "a mano" con del codice apposito ma ti consiglio, per semplicità, la strtok().

Se hai altri dubbi, chiedi pure.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2006, 22:52   #7
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2789
@andbin: funziona ma vorrei sapere se ho scritto del buon codice, me lo puoi controllare? Te lo chiedo xk devo fare le olimpiadi di info, non so se a gennaio o a febbraio, e oltre a scrivere programmi funzionanti bisognerebbe che siano anche scritti bene. Grazie.
Codice:
#include <iostream>
#include <stdlib.h>
#include <string.h>

using namespace std;

int main(){
   char *frase,**parole,*temp;
   int np=0,i,j;
   frase=(char*)malloc(1);
      jump:
   cout<<"Inserire frase...\n";
   for(i=0;;i++){
      frase=(char*)realloc(frase,i+1);
      frase[i]=getchar();
      if(frase[i]==' ') np++;
      else if(frase[i]=='\n'){
         frase[i]='\0';
         if(i!=0) np++;
         break;
      }
   }
   if(np==0) goto jump;
   parole=new char*[np];
   parole[0]=strtok(frase," ");
   for(i=1;i<np;i++)
      parole[i]=strtok(NULL," ");
   for(i=0;i<np;i++)
      for(j=np-1;j>i;j--)
         if(strcmp(parole[j],parole[j-1])<0){
            temp=parole[j];
            parole[j]=parole[j-1];
            parole[j-1]=temp;
         }
   cout<<"Parole ordinate:\n";
   for(i=0;i<np;i++)
      cout<<parole[i]<<"\n";
   system("pause");
}
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2006, 08:34   #8
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da wingman87
bisognerebbe che siano anche scritti bene.
Posso essere del tutto sincero??? .... Ehm ... il tuo codice è orripilante.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2006, 09:02   #9
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
wingman87: lo richiedeva in C, non in un misto C/C++...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2006, 12:28   #10
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2789
Quote:
Originariamente inviato da andbin
Posso essere del tutto sincero??? .... Ehm ... il tuo codice è orripilante.
Ok, cosa devo fare x migliorarlo?
@cionci: a scuola impariamo il c++, so che una differenza è che il C non è ad oggetti, quindi avrei dovuto non usare la iostream?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2006, 13:09   #11
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da wingman87
Ok, cosa devo fare x migliorarlo?
Guarda ... sinteticamente:
- Hai usato roba del C (malloc ad esempio) e roba del C++ (cout e new char*[np] ad esempio). Non è un male grave, però per un esercizietto così, o usi solo cose del C o solo cose del C++.
- Hai usato il goto.
- Alla fine non hai deallocato quello che è stato allocato.
- Non hai messo un return qualcosa alla fine.
- Non hai testato l'eventuale fallimento delle allocazioni.
- Nella fase di input riallochi il buffer per ogni singolo carattere (inefficiente). Inoltre conti le parole in base al numero di spazi, senza tenere conto che si potrebbero inserire più spazi tra le parole e all'inizio/fine.
- Inoltre come è scritto (tutto appiccicato e senza spaziature) non mi piace.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2006, 13:29   #12
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:
Originariamente inviato da wingman87
@andbin: funziona ma vorrei sapere se ho scritto del buon codice, me lo puoi controllare?
Diciamo che te la scrivo in C++
Codice:
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>

using namespace std;

int main()
{
	string linea;
	vector<string> parole;

	getline(cin, linea);

	istringstream iss(linea);
	while(!iss.eof())
	{
		string parola;
		iss >> parola;
		parole.push_back(parola);
	}

	sort(parole.begin(), parole.end());

	for(vector<string>::iterator it = parole.begin(); it != parole.end(); it++)
		cout << *it << endl;
	
	return 0;
}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2006, 14:06   #13
lucas87
Bannato
 
Iscritto dal: Oct 2006
Messaggi: 170
diciamo che me lo scrivete in C smplice cosi mi risolvete un grande problema?
lucas87 è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2006, 14:10   #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
Guarda...in pratica te l'ha fatto wingman87: prendi il suo sostituisci la scanf alla cin, printf alla cout e la malloc alla new...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2006, 14:12   #15
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da cionci
Diciamo che te la scrivo in C++
Ah beh ... certo, usando STL è mooooolto facile.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2006, 14:16   #16
lucas87
Bannato
 
Iscritto dal: Oct 2006
Messaggi: 170
Codice HTML:
#include <iostream>
#include <stdlib.h>
#include <string.h>



int main(){
   char *frase,**parole,*temp;
   int np=0,i,j;
   
   frase=(char*)malloc(1);
      jump:
   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;
      }
   }
   if(np==0) goto jump;
   parole=new char*[np];
   parole[0]=strtok(frase," ");
   for(i=1;i<np;i++)
      parole[i]=strtok(NULL," ");
   for(i=0;i<np;i++)
      for(j=np-1;j>i;j--)
         if(strcmp(parole[j],parole[j-1])<0){
            temp=parole[j];
            parole[j]=parole[j-1];
            parole[j-1]=temp;
         }
   printf("Parole ordinate:\n");
   for(i=0;i<np;i++)
      printf("%s\n",parole[i]);
   system("pause");
}
eccolo pero non posso usare jump e non so cosa sia strtok. in piu dovrei levare iostream.

che altro devo fare quindi?
lucas87 è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2006, 14:23   #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
Per sostituire il goto (che non va mai usato tranne in rarissimi casi, anzi scordatevi che esiste)...
Codice:
if(np > 0)
{
   parole=new char*[np];
   parole[0]=strtok(frase," ");
   for(i=1;i<np;i++)
      parole[i]=strtok(NULL," ");
   for(i=0;i<np;i++)
      for(j=np-1;j>i;j--)
         if(strcmp(parole[j],parole[j-1])<0){
            temp=parole[j];
            parole[j]=parole[j-1];
            parole[j-1]=temp;
         }
   printf("Parole ordinate:\n");
   for(i=0;i<np;i++)
      printf("%s\n",parole[i]);
}
system("pause");
La strtok o string tokenizer è una funzione molto potente, ma anche abbastanza complessa...è probabilmente la più complessa della libreria standard... Sommariamente serve per dividere una stringa in vari pezzi sostituendo il carattere di fine stringa alla prima occorrenza del carattere cercato (in questo caso lo spazio)...
http://www.cplusplus.com/ref/cstring/strtok.html
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2006, 14:42   #18
lucas87
Bannato
 
Iscritto dal: Oct 2006
Messaggi: 170
ecco penso che adesso l'ho aggiustato ed è puro c, piu leggibile con funzioni:

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 dovrò sostituire l'ordinamento, in quanto l'esercio non chiede un ordinamento in generale, ma margesort. chia ha qualche idea mi facci sapere.
lucas87 è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2006, 14:50   #19
lucas87
Bannato
 
Iscritto dal: Oct 2006
Messaggi: 170
ok a quanto pare ho sottovalutato mergesort, è piu difficile di quanto credessi. chi mida una mano??
lucas87 è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2006, 15:40   #20
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da lucas87
ok a quanto pare ho sottovalutato mergesort, è piu difficile di quanto credessi. chi mida una mano??
a parte che potresti scegliere se usare il C o il C++ quindi malloc O new
e poi questa:
Codice:
frase = (char *) malloc(1);
non ho seguito il programma ma vedo che allochi 1 (UNO) byte di memoria ...
stai usando una cella di memoria per la getchar, secondo me é inutile.
L'allocazione dinamica si usa di solito quando non sai quanta memoria ti servirá ed in certi casi se sai che sará una sola parola conviene comunque una variabile automatica tipo
Codice:
char parola[256];
tanto non esiste una parola cosí lunga. Ce ne stanno 10
Sull'ordinamento ci vuole un po di tempo per controllare ... ma mi sembra che hai fatto un pó di casini pure nella creazione della matrice

EDIT: non avevo visto il ciclo dove usi "frase"
allochi 1 e poi sfori di brutto! non ti si inchioda il programma ?
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve

Ultima modifica di trallallero : 15-12-2006 alle 15:42.
trallallero è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Anthropic ha un'AI che trova falle in Wi...
I 10 migliori sconti Amazon del weekend:...
Con un coupon scendono ancora: le super ...
Minimo storico per Samsung Galaxy S26 Ul...
Si è conclusa la missione lunare ...
EK Waterblock si arrende agli aumenti, i...
Geekbench si aggiorna: tutti i test con ...
Per la prima volta un computer quantisti...
Telecamere Reolink 4K su Amazon: Wi-Fi 6...
Anthropic vuole farsi i chip da sola? Co...
Il fondatore di Framework: il personal c...
JBL Live Flex 3 a 129€ su Amazon: ANC ad...
Come un uomo ha costruito un'azienda da ...
Multe fino a 400 euro anche se hai pagat...
Tapo lancia una valanga di offerte su Am...
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: 04:43.


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