Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 21

Discussione: [c++] buble sort

  1. #11
    Utente bannato
    Registrato dal
    Dec 2012
    Messaggi
    679
    Sto uscendo, però ti invito a riflettere su questo
    codice:
    tot_stud[y-1].cognome>tot_stud[y].cognome
    che è essenzialmente il medesimo problema di prima.
    Cosa fa, esattamente, l'istruzione precedente?

    Ma soprattutto, l'esercizio mira a capire come si manipolano le stringhe in C "a mano", o puoi usare funzioni di libreria (C, C++ o quello che vuoi)?

    Perchè ti segnalo, ad esempio, che in C (l'idioma che stai usando, al netto di qualche estensione) il concetto di stringa non esiste.

  2. #12
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Le stringhe del C (array di char) non puoi confrontarle in quel modo. Usa le funzioni di libreria come strcmp.

    Se vuoi scrivere in C++, usa le string del C++.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #13
    Utente di HTML.it
    Registrato dal
    May 2011
    residenza
    bergamo
    Messaggi
    1,027
    okkasi quindi il codice è tutto sbagliato...?

  4. #14
    Utente di HTML.it
    Registrato dal
    May 2011
    residenza
    bergamo
    Messaggi
    1,027
    ah no solo l'if devo correggere l'if e inserire dentro lo strcmp ? però io nell'if ho questo:

    if(tot_stud[y-1].cognome>tot_stud[y].cognome)

    come faccio a compararle? nell'esempio che ho visto fa un do while finchè la comparazione non è diversa da zero così

    codice:
    /* strcmp example */
    #include <stdio.h>
    #include <string.h>
    
    int main ()
    {
      char szKey[] = "apple";
      char szInput[80];
      do {
         printf ("Guess my favourite fruit? ");
         gets (szInput);
      } while (strcmp (szKey,szInput) != 0);
      puts ("Correct answer!");
      return 0;
    }

  5. #15
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #16
    Utente di HTML.it
    Registrato dal
    May 2011
    residenza
    bergamo
    Messaggi
    1,027
    mi trovo veramente molto in difficoltà al riguardo...

    non riesco a capire come ordinare questa stringa

    ho provato a fare un buble sort con uno strcmp ma non funziona nulla

    allora io devo usare c++ con relative librerie...

    ma mi sono completamente perso non ci sto capendo più nulla per ordinare questa stringa...

  7. #17
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    250
    Devi fare una cosa del genere..
    codice:
    if(strcmp(stringa1,stringa2) > 0 //vuol dire che la stringa1 è "più grande"
    Scambia(stringa1,stringa2)
    ovviamente Scambia() è una banale funzione che devi implementarti..e la condizione va posta all'interno di un ciclo opportuno..in base alle tue esigenze

  8. #18
    Utente di HTML.it
    Registrato dal
    May 2011
    residenza
    bergamo
    Messaggi
    1,027
    Scambia? e questo scambia cosa sarebbe una funzione?

    si ma lo strcmp ci sono mi è abbastanza chiaro, il problema è che non saprei come implementarlo in ciò che mi serve, allora spiego bene...

    Si vuole scrivere un programma C++ per la gestione di informazioni relative a N studenti neolaureati in
    ingegneria. Ogni studente è caratterizzato dalle seguenti informazioni:
    - Cognome stringa contenuta in campo di esattamente 25 caratteri, può contenere spazi
    - Nome stringa contenuta in campo di esattamente 25 caratteri, può contenere spazi
    - corso di laurea può assumere i seguenti valori: Informatica, Elettronica, Civile, Meccanica,
    Elettrica, Gestionale
    - voto di laurea intero, indica il voto di laurea
    - lode intero, 1 indica la presenza di lode, 0 indica l’assenza
    - numero anni di iscrizione intero, indica in quanti anni lo studente ha conseguito la laurea
    Dopo aver definito le strutture dati opportune, scrivere un menù che permetta le seguenti operazioni:
    1) Inserimento dati di tutti gli N studenti
    2) Ordinamento alfabetico rispetto al cognome. A parità di cognome, ordinare rispetto al
    nome

    io devo fare il punto 2.

    quindi ho una struttura dati all'interno del mio int main dove ho dichiarato tutti i dati che mi servono, per ordinare ora la stringa: studente.cognome
    trovo difficoltà perchè non saprei proprio come impostare tutto il codice cioè non lo capisco... o faccio fatica a rifletterci su mi sarò confuso non lo so... sto impazzendo però.

  9. #19
    Utente bannato
    Registrato dal
    Dec 2012
    Messaggi
    679
    Vabbè storicamente non è che io sia proprio proprio la persona più adatta per questo genere di spiegazioni, comunque

    Come saprai (forse) il concetto (tipo) di "stringa" non esiste in C (e neppure in C++); una sequenza di caratteri (detto anche vettore o array) è considerata una stringa.

    Esistono tipicamente due modi (che poi in realtà sono il medesimo, ma non complichiamo la vita che qui è già confusa) per definirle: mediate un vettore di caratteri, che quindi avrà una lunghezza prefissata (nel tuo caso 25), oppure mediante un mitico puntatore (che lasciamo stare).

    Esiste la "terza strada", ovvero utilizzare librerie (tipicamente C++) che mettano a disposizione "magicamente" un tipo "stringa".
    Tale per cui potrai dire stringapippo="qualcosa"
    stringapluto="chipuòdirlo" e fare tante belle cose tipo if (stringapippo>stringapluto) ...

    Queste funzioni di libreria, o come le vuoi chiamare, si appoggiano però a funzioni scritte che, alla fin fine, manipolano caratteri e vettori di carattere.

    Le quali, a loro volta, esistono tipicamente in due versioni: per lavorare su vettori (quindi con una lunghezza massima predefinita), o per lavorare su puntatori (ovvero stringhe di lunghezza ignota, ma terminate da un byte a zero, cosa molto comune in C\C++)


    Tornando al tuo problema esso diventa banale (se usi librerie C++), molto facile (se usi librerie C), non così banale (se non usi nulla).

    Riflettendo su quello che ti serve vedrai che, in essenza, sono poche funzioni

    1) copia una stringa (o meglio un vettore di caratteri) su un'altra
    2) confronta due stringhe (vettori di caratteri) per stabilire se la prima è > della seconda secondo un qualche ordinamento (tipicamente lessicografico)

    La 2) ad esempio la trovi definita in string.h,
    codice:
    int strncmp ( const char * str1, const char * str2, size_t num );
    che confronta due vettori di caratteri, fino alla dimensione massima num (è la n dentro strncmp)

    La 1, sempre in string.h, è
    codice:
    char * strncpy ( char * destination, const char * source, size_t num );
    ** ricordo che siamo sempre nell'ipotesi di fare un programma C, non C++ ***

    In superbrutale pseudocodice, strncpy ti consente di copiare (poniamo) 25 caratteri dalla stringa A a temp, e da B ad A, e da temp a B

    La strncmp invece fa un [i]str[i]inga massimon compare, quindi si arresta sia per byte a zero che per una lunghezza massima (che è poi la dimensione del vettore che hai predisposto).

    Infine ritorna un valore 0, >0 e <0 a seconda del risultato del confronto.

  10. #20
    Utente bannato
    Registrato dal
    Dec 2012
    Messaggi
    679
    Se invece vuoi (puoi) usare librerie C++ la faccenda diventa più liscia, perchè puoi sfruttare un pochino di "potenza" in più

    codice:
    using namespace std;
    std::string stringaa;
    std::string stringab;
    std::string temp;
    Puoi caricare i dati facilmente, con qualcosa tipo
    codice:
     cin>>stringaa;
    usare cout e così via

    Puoi concatenare le stringhe (questo è bene, nel tuo caso, eventualmente per il requisito di ordinamento per cognome+nome)

    codice:
    string cognome = "berlusconi";
    string nome = "silvio";
    string intero = cognome+nome;
    string my_string1 = "a string";
    string my_string2 = " is this";
    string my_string3 = my_string1 + my_string2;

    Ma la cosa bella è l'overload degli operatori, quindi potrai dire
    codice:
     if (cognome == "berlusconi") ...
    Quanto > e così via.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.