Scambiare posizione cifre in un numero: linguaggio C

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

Alessio Infantino

Nuovo Utente
Messaggi
1
Reazioni
0
Punteggio
21
Salve, ho un dubbio: sto facendo un esercizio di programmazione in C, e, dopo aver ottenuto un numero di 4 cifre, mi viene chiesto di scambiare la prima cifra con la terza e la seconda con la quarta. Come posso fare? Grazie mille!
 
sei chiaramente nella sezione sbagliata, ma in attesa che qualche mod ti sposti, ti rispondo:
essendo un esercizietto in c, dubito che ti venga chiesto di fare un algoritmo con operazioni bitwise per swappare i digit (su due piedi neanche io saprei come fare, ovviamente le posizioni in bit dei digit non sono fisse..), piuttosto te ne esci facilmente convertendo l'intero in stringa con itoa() e poi trattare la stringa come array di char :)
 
In pratica avendo un numero di 4 cifre, devi scambiare le migliaia con le decine e le centinaia con le unità :asd:
Ad esempio, definendo un array di 4 numeri (le 4 cifre), basta "ruotarne" il contenuto (verso sinistra o verso destra) in modo circolare di 2 posizioni e visualizzare la configurazione risultante.
Inizia definendo il vettore, ad esempio int vettore [DATNUM]; (naturalmente fai #define DATNUM 10).
Poi i due contatori, il verso dello shifting, il numero di shifting e la variabile temporanea: int i,j,verso, numshift, temp;
Fai un ciclo for per la lettura dei dati del vettore, per l'acquisizione del verso e del numero di shift.
Prosegui con la parte che esegue lo shifting circolare, ad esempio:
Codice:
for (i=0; i<numshift; i++)
{
temp=vettore[0];
for (j=0; j<DATNUM-1; j++);
vettore[j]=vettore[j+1];
vettore[j]=temp;
}
Ciò esegue la rotazione di una posizione verso sinistra, per la rotazione verso destra i passi sono simili.
Infine visualizza i risultati, ad esempio:
Codice:
printf("Vettore finale ruotato");
printf(" di %d posizioni :\n", numshift);
for(i=0; i<DATNUM; i++)
printf("%d\t",vettore[i]);
printf("\n");
return(0);
A presto :ciaociao:
 
Ultima modifica da un moderatore:
Mi aggiungo alle precedenti risposte.

E' più semplice di come dice gronag, in realtà. :P

Una delle soluzioni che mi viene in mente, e penso sia la più semplice è (come detto già in precedenza):

- trasformare il numero in un array di char (itoa());
- scambiare la posizione 0 con la posizione 2, e la posizione 1 con la posizione 4;
- convertire l'array di char in numero intero di nuovo (atoi()).

Io ho evitato la variabile di appoggio.

Codice:
#include<stdio.h>
#include<math.h>

int main()
{
  int n = 2345;
  
  printf("N: %d\n", n);
  
  char number[4];
  itoa(n, number, 10);
  
  // Scambio della prima cifra con la terza
  number[0] ^= number[2];
  number[2] ^= number[0];
  number[0] ^= number[2];
  
  // Scambio della seconda con la quarta
  number[1] ^= number[3];
  number[3] ^= number[1];
  number[1] ^= number[3];
  
  n = atoi(number);
  
  printf("Dopo lo scambio:\nN: %d\n", n);
  
  return 0;
  
}

Esempi di output:

Codice:
N: 1234
Dopo lo scambio:
N: 3412

Codice:
N: 2345
Dopo lo scambio:
N: 4523
 
Ultima modifica:
Naturalmente il modo più elementare e semplice è trattare il numero intero come una stringa

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


int main()
{
    int numero;  //numero da caricare
    char numeroStr[5];  //stringa per scambiare le cifre
    char swap;  //char di appoggio per lo scambio


    printf("Inserisci il numero : ");
    scanf("%d",&numero);
    itoa(numero,numeroStr,10);  //converto da int a char*


    swap = numeroStr[0];
    numeroStr[0] = numeroStr[2];
    numeroStr[2] = swap;


    swap = numeroStr[1];
    numeroStr[1] = numeroStr[3];
    numeroStr[3] = swap;


    numero = atoi(numeroStr);  //converto da char* a int


    printf("Numero dopo lo scambio : %d\n",numero);
    return 0;
}
 
Sempre che abbia già affrontato le stringhe.
Sennò gli tocca fare la solita pappardella del ciclo for, n%10 e trovarsi il numero, moltiplicarlo per 1(inutile :asd:) , 10, 100, 1000 e sommarlo ad una variabile.
O molto più semplicemente:
Codice:
n = 1234;


a = n\100;             //12
n = n-(a*100)                //ottengo 34
n *= 100;                //ottengo 3400
n = n+a;                //ottengo 3412
 
Ultima modifica:
Salve, ho un dubbio: sto facendo un esercizio di programmazione in C, e, dopo aver ottenuto un numero di 4 cifre, mi viene chiesto di scambiare la prima cifra con la terza e la seconda con la quarta. Come posso fare? Grazie mille!

Di solito per implementare un algoritmo di scambio si utilizzano gli array monodimensionali, le classiche strutture statiche di tipo sequenziale :sisilui:
Ti suggerisco di studiare o di ripassare, qualora non lo avessi fatto, gli algoritmi di caricamento di un vettore, parziale o completo, quelli di search (all'interno di un vettore ordinato o non ordinato), in particolare il metodo dicotomico/binario, poi gli algoritmi di sort (in particolare selezione, bubble sort e quick sort) e di merge (fusione), infine l'algoritmo di inserzione in un vettore vuoto o contenente n elementi ordinati :asd:
Di seguito un esempio di schema di flusso di un algoritmo di inserzione in un vettore ordinato, che elaborai più di 25 anni fa insieme ai miei allievi dell'ITIS (all'epoca insegnavo il Pascal) :asd:



A presto ;)
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top