Domanda Spiegazione programma

  • Autore discussione Deleted member 287194
  • Data d'inizio
D

Deleted member 287194

Ho trovato questo esempio di programma sul mio libro di testo, l'argomento è il costruttore array.
Se qualcuno potesse spiegarmelo mi farebbe un grandissimo piacere.
Il programma legge due stringhe composte da 10 caratteri ciascuna (l'originale era 50) e costruisce una terza stringa che concatena le prime due in ordine alfabetico.

C:
#include <stdio.h>
#define LunghezzaArray 10
int main (void)
{
    int i, j, k;
    char TempCar;
    char Array1[LunghezzaArray], Array2[LunghezzaArray];
    /*Nella seguente dichiarazione il valore 'LunghezzaArray * 2' è un valore costante calcolato a tempo di compliazione*/
    char ArrayConc[LunghezzaArray * 2];
    /*Legge la prima stringa assicurandosi che essa non superi la dimensione dell'array, 50 caratteri*/
    i = 0;
    while (i < LunghezzaArray)
        /*Si ricordi che il valore dell'indice di un array di LunghezzaArray elementi è compreso tra 0 e LunghezzArray - 1*/
    {
        scanf ("%c", &TempCar);
        Array1[i] = TempCar;
        i = i + 1;
    }
    /*Legge la seconda stringa assicurandosi che essa non superi la dimensione dell'array, 50 caratteri*/
    i = 0;
    while (i < LunghezzaArray)
    {
        scanf ("%c", &TempCar);
        Array2[i] = TempCar;
        i = i + 1;
    }
    /*Confronta le due stringhe per capire quale precede l'altra in ordine alfabetico*/
    i = 0;
    while (i < LunghezzaArray && Array1[i] == Array2[i])
        i = i + 1;
    if (i == LunghezzaArray || Array1[i] < Array2 [i])
    /*Le due stringhe sono uguali o la prima precede la seconda in ordine alfabetico*/
    {
        k = 0; j = 0;
        while (j < LunghezzaArray)
        {
            ArrayConc[k] = Array1[j];
            k = k + 1;
            j = j + 1;
        }
        j = 0;
        while (j < LunghezzaArray)
        {
            ArrayConc[k] = Array2[j];
            k = k + 1;
            j = j + 1;
        }
    }
    else
    /*Se la seconda stringa precede la prima in ordine alfabetico, ossia se (Array2[i] < Array1[i])*/
    {
        k = 0; j = 0;
        while (j < LunghezzaArray)
        {
            ArrayConc[k] = Array2[j];
            k = k + 1;
            j = j + 1;
        }
        j = 0;
        while (j < LunghezzaArray)
        {
            ArrayConc[k] = Array1[j];
            k = k + 1;
            j = j + 1;
        }
    }
    /*Stampa la stringa ottenuta dalla concatenazione*/
    k = 0;
    while (k < (LunghezzaArray * 2))
    {
        printf ("%c", ArrayConc[k]);
        k = k + 1;
    }
}
 
Che spiegazione vuoi di preciso? Cosa non ti è chiaro?
L'array comunque è una struttura dati. ;)
Sinceramente un pò tutto, non ho capito la funzionalità della variabile TempCar, in esecuzione il programma non ridà i risultati predetti, quindi non rimette in ordine alfabetico le due stringhe, infine cosa succede se scrivo due stringhe di lunghezze differenti?
 
Ho trovato questo esempio di programma sul mio libro di testo, l'argomento è il costruttore array.
Se qualcuno potesse spiegarmelo mi farebbe un grandissimo piacere.
Non ho ben capito cosa tu abbia letto su quel libro siccome il termine "costruttore array" in C non esiste, in C un array lo dichiari data la tipologia e la quantità di elementi che dovrà contenere, poi lo inizializzi come ti pare e piace, quindi non ha un vero è proprio "costruttore".

non ho capito la funzionalità della variabile TempCar
La variabile TempCar viene utilizzata come 'carattere temporaneo' ovvero un piccolo buffer nel quale verrà salvato il carattere immesso dall'utente per poi esser ricopiato nella stringa, ora potrebbe sorgerti la domanda "E non potrei scrivere l'input immesso dall'utente direttamente nella stringa?" certo, ecco un esempio:
C:
while (i < LunghezzaArray)
{
    // Da notare che non sto usando l'operatore & siccome l'espressione "Array1 + i" genererà a sua volta un puntatore
    scanf ("%c", Array1 + i);
    i = i + 1;
}
ma presumo che il libro abbia volutamente usato la variabile TempCar proprio perchè non è ancora giunto al tema dei puntatori.

infine cosa succede se scrivo due stringhe di lunghezze differenti?
Dato il codice che hai postato non avrai scenari in cui l'utente riesca ad immettere 2 stringhe di lunghezza differente, quindi avrebbe poco senso tentar d'ipotizzare cosa possa accadere siccome giungeresti ovviamente ad un bug.

in esecuzione il programma non ridà i risultati predetti, quindi non rimette in ordine alfabetico le due stringhe
Quali input hai dato al programma? Perchè un possibile bug può esser dato fatto che non venga eseguito il flush di stdin