[C] Crittografare un intero a 4 cifre....(Posso usare solo while,if/else)

Pubblicità

jolly

Utente Attivo
Messaggi
110
Reazioni
4
Punteggio
38
Il vostro programma dovrà leggere un intero di quattro cifre e crittografarlo nel modo seguente:
Sostituite ogni cifra con (la somma di quella cifra + 7) modulo 10.
In seguito,scambiate la prima cifra con la terza, e scambiate la seconda cifra con la quarta.
Visualizzate quindi l'intero crittografato.

Ecco come ho svolto il programma:
Codice:
#include <stdio.h>

/* la funzione main è il punto di inizio dell'esecuzione del programma */
int main( void )
{
	int n, cifra_1, cifra_2, cifra_3, cifra_4; /* dichiarazioni variabili */

	printf( "Inserisci un intero di quattro cifre: " ); /* sollecita l'inserimento */
	scanf( "%d" , &n ); /* memorizza l'intero inserito dall'utente nella variabile n */

	cifra_1 = n/1000; /* cifra_1 è uguale a cifra_1 diviso 1000,in questo modo ricaviamo la prima cifra dell'intero */
	
	cifra_1 = (cifra_1 + 7) % 10; /* crittografiamo la cifra_1 */

	cifra_2 = n/100;
	cifra_2 = (cifra_2 + 7) % 10;	

	cifra_3 = n/10;
	cifra_3 = (cifra_3 + 7) % 10;

	cifra_4 = n/1;
	cifra_4 = (cifra_4 + 7) % 10;

	printf( "%d%d%d%d\n" , cifra_3, cifra_4, cifra_1, cifra_2 ); /* stampa a schermo i valori delle singole cifre crittografate e spostate secondo i dati dell'esercizio */

	return 0; /* indica che il programma è terminato con succeso */
} /* fine della funzione main */

Va bene come l'ho svolto?
 
Re: [C] Crittografare un intero a 4 cifre....(Posso usare solo while,if/els

Suppongo tu non abbia ancora visto i vettori, quindi così va bene ;)
 
Re: [C] Crittografare un intero a 4 cifre....(Posso usare solo while,if/els

in pratica se metto 4356
dovrei avere 1011?

giusto? in tal caso a me funziona :sisi:
 
Re: [C] Crittografare un intero a 4 cifre....(Posso usare solo while,if/els

Nel codice mi sono dimenticato di aggiungere delle righe (n -= cifra_1 * 1000; n -= cifra_2 * 100; n -= cifra_3 * 10; ,anche se alla fine il risultato è sempre lo stesso,ma credo che cosi è più preciso:
Codice:
#include <stdio.h>

/* la funzione main è il punto di inizio dell'esecuzione del programma */
int main( void )
{
	int n, cifra_1, cifra_2, cifra_3, cifra_4; /* dichiarazioni variabili */

	printf( "Inserisci un intero di quattro cifre: " ); /* sollecita l'inserimento */
	scanf( "%d" , &n ); /* memorizza l'intero inserito dall'utente nella variabile n */

	cifra_1 = n/1000; /* cifra_1 è uguale a cifra_1 diviso 1000,in questo modo ricaviamo la prima cifra dell'intero */
	n -= cifra_1 * 1000; /* dopo che abbiamo calcolato cifra_1,sottraiamo ad n il prodotto di cifra_1 * 1000,in modo da calcolare anche le altre cifre*/
	cifra_1 = (cifra_1 + 7) % 10; /* crittografiamo la cifra_1 */

	cifra_2 = n/100;
	n -= cifra_2 * 100;
	cifra_2 = (cifra_2 + 7) % 10;	

	cifra_3 = n/10;
	n -= cifra_3 * 10;
	cifra_3 = (cifra_3 + 7) % 10;

	cifra_4 = n/1;
	cifra_4 = (cifra_4 + 7) % 10;

	printf( "%d%d%d%d\n" , cifra_3, cifra_4, cifra_1, cifra_2 ); /* stampa a schermo i valori delle singole cifre crittografate e spostate secondo i dati dell'esercizio */

	return 0; /* indica che il programma è terminato con succeso */
} /* fine della funzione main */

Mr Storm:
Infatti i vettori non li ho ancora studiati :)

e_ale92:
Ho dimenticato di aggiungere queste righe n -= cifra_1 * 1000; n -= cifra_2 * 100; n -= cifra_3 * 10;
Se metti 4356 il numero crittografato è 2310.
Ecco il procedimento:

4356 / 1000 = 4 /* otteniamo la cifra_1 */
4356 - (cifra_1 * 1000) = 356 /* questo è il nuovo valore di n */
cifra_1=(cifra_1 + 7) %10 che sarebbe 4+7 %10 =1 /* semi crittografiamo cifra_1 */

356 /100 = 3 (che sarebbe cifra_2)
356 - (cifra_2 *100) = 56 (nuovo valore di n)
cifra_2=(cifra_2 + 7) %10 che sarebbe 3+7 %10 = 0 /* semi crittografiamo cifra_2 */

56 /10 = 5 (che sarebbe cifra_3)
56 - (cifra_3 *10) = 6 (nuovo valore di n)
cifra_3=(cifra_3 + 7) %10 che sarebbe 5+7 %10 = 2 /* semi crittografiamo cifra_3 */

6 /1 = 6 (che sarebbe cifra_4)
6 - (cifra_4 *1) = 0 (nuovo valore di n...FINE)
cifra_4=(cifra_4 + 7) %10 che sarebbe 6+7 %10 = 3 /* semi crittografiamo cifra_4 */

Quindi per il momento l'intero semi crittografate del numero iniziale è 1023,ora per completare il processo di crittografia l'esercizio ci dice di scambiare la prima cifra con la terza, e la seconda cifra con la quarta: quindi 1023 diventa 2310.
 
Re: [C] Crittografare un intero a 4 cifre....(Posso usare solo while,if/els

Nel codice mi sono dimenticato di aggiungere delle righe (n -= cifra_1 * 1000; n -= cifra_2 * 100; n -= cifra_3 * 10; ,anche se alla fine il risultato è sempre lo stesso,ma credo che cosi è più preciso:
Codice:
#include <stdio.h>

/* la funzione main è il punto di inizio dell'esecuzione del programma */
int main( void )
{
    int n, cifra_1, cifra_2, cifra_3, cifra_4; /* dichiarazioni variabili */

    printf( "Inserisci un intero di quattro cifre: " ); /* sollecita l'inserimento */
    scanf( "%d" , &n ); /* memorizza l'intero inserito dall'utente nella variabile n */

    cifra_1 = n/1000; /* cifra_1 è uguale a cifra_1 diviso 1000,in questo modo ricaviamo la prima cifra dell'intero */
    n -= cifra_1 * 1000; /* dopo che abbiamo calcolato cifra_1,sottraiamo ad n il prodotto di cifra_1 * 1000,in modo da calcolare anche le altre cifre*/
    cifra_1 = (cifra_1 + 7) % 10; /* crittografiamo la cifra_1 */

    cifra_2 = n/100;
    n -= cifra_2 * 100;
    cifra_2 = (cifra_2 + 7) % 10;    

    cifra_3 = n/10;
    n -= cifra_3 * 10;
    cifra_3 = (cifra_3 + 7) % 10;

    cifra_4 = n/1;
    cifra_4 = (cifra_4 + 7) % 10;

    printf( "%d%d%d%d\n" , cifra_3, cifra_4, cifra_1, cifra_2 ); /* stampa a schermo i valori delle singole cifre crittografate e spostate secondo i dati dell'esercizio */

    return 0; /* indica che il programma è terminato con succeso */
} /* fine della funzione main */
Mr Storm:
Infatti i vettori non li ho ancora studiati :)

e_ale92:
Ho dimenticato di aggiungere queste righe n -= cifra_1 * 1000; n -= cifra_2 * 100; n -= cifra_3 * 10;
Se metti 4356 il numero crittografato è 2310.
Ecco il procedimento:

4356 / 1000 = 4 /* otteniamo la cifra_1 */
4356 - (cifra_1 * 1000) = 356 /* questo è il nuovo valore di n */
cifra_1=(cifra_1 + 7) %10 che sarebbe 4+7 %10 =1 /* semi crittografiamo cifra_1 */

356 /100 = 3 (che sarebbe cifra_2)
356 - (cifra_2 *100) = 56 (nuovo valore di n)
cifra_2=(cifra_2 + 7) %10 che sarebbe 3+7 %10 = 0 /* semi crittografiamo cifra_2 */

56 /10 = 5 (che sarebbe cifra_3)
56 - (cifra_3 *10) = 6 (nuovo valore di n)
cifra_3=(cifra_3 + 7) %10 che sarebbe 5+7 %10 = 2 /* semi crittografiamo cifra_3 */

6 /1 = 6 (che sarebbe cifra_4)
6 - (cifra_4 *1) = 0 (nuovo valore di n...FINE)
cifra_4=(cifra_4 + 7) %10 che sarebbe 6+7 %10 = 3 /* semi crittografiamo cifra_4 */

Quindi per il momento l'intero semi crittografate del numero iniziale è 1023,ora per completare il processo di crittografia l'esercizio ci dice di scambiare la prima cifra con la terza, e la seconda cifra con la quarta: quindi 1023 diventa 2310.

ah ecco ora ho capito...
p.s. prima avevo dimenticato di sostituire la prima cifra ecc.

cmq solo una cosa non mi è chiara... studio da poco più di un mese il C e quindi ogni occasione è buona per imparare qualcosa... anche perchè l'esame si avvicina :asd:

tu hai scritto: n -= cifra_3 * 10; e quello che non capisco è quel - messo prima dell'uguale :boh:

puoi illuminarmi??
e mi puoi dire, se lo sai, a cosa equivale la scritta: ( !(ecc) )
se non erro in una delle tue discussioni ti è stato scritto un codice con quella "scritta"... mi pare fosse la condizione i un while :boh:
 
Re: [C] Crittografare un intero a 4 cifre....(Posso usare solo while,if/els

Allora n -= cifra_3 * 10; è una semplificazione è come se scrivessi n = n - ( cifra_3 * 10 ) ad esempio metti caso devi aggiungere +1 alla variabile contatore, puoi scrivere counter = counter +1; oppure semplificare con counter+=1;
Spero di non aver detto qualche sciocchezza bhe anche io mi trovo nelle tue condizioni è da un mesetto che studio il c,e dopo aver terminato l'ultimo esercizio,posso andare avanti con il do-while,for switch :)

Per quanto riguarda la scritta: ( !(ecc) ) mi dispiace ma non so cosa vuol dire :( ora provo a controllare nelle mie discussioni.
 
Re: [C] Crittografare un intero a 4 cifre....(Posso usare solo while,if/els

Allora n -= cifra_3 * 10; è una semplificazione è come se scrivessi n = n - ( cifra_3 * 10 ) ad esempio metti caso devi aggiungere +1 alla variabile contatore, puoi scrivere counter = counter +1; oppure semplificare con counter+=1;
Spero di non aver detto qualche sciocchezza bhe anche io mi trovo nelle tue condizioni è da un mesetto che studio il c,e dopo aver terminato l'ultimo esercizio,posso andare avanti con il do-while,for switch :)

Per quanto riguarda la scritta: ( !(ecc) ) mi dispiace ma non so cosa vuol dire :( ora provo a controllare nelle mie discussioni.

ho capito... volendo potresti anche fare counter++ e ad ogni ciclo o quello che, il counter viene incrementato di 1 :sisi:
per l'altra cosa, se non la trovi, non ti preoccupare, se non erro lo ha scritto sebax, e appena lo sento chiedo a lui ;)
 
Re: [C] Crittografare un intero a 4 cifre....(Posso usare solo while,if/els

ho capito... volendo potresti anche fare counter++ e ad ogni ciclo o quello che, il counter viene incrementato di 1
Esatto
per l'altra cosa, se non la trovi, non ti preoccupare, se non erro lo ha scritto sebax, e appena lo sento chiedo a lui
Va bene :)
 
Re: [C] Crittografare un intero a 4 cifre....(Posso usare solo while,if/els

Oggi 19:49
#41430​
sebax
user-online.png

Utente AttivoData Registrazione04-11-08LocalitàProvincia di TrevisoMessaggi1,128

[h=2]
icon1.png
Re: Il +1[/h]
!true vuol dire false

!false vuol dire true

fornisce l'opposto a cui è riferito

esempio:

!(n<0) con n=6 ti da true
!(n<0) con n= -1 ti da false

è semplicemente il contrario;)

41430​




---------- Post added at 19:58 ---------- Previous post was at 19:56 ----------

capito?? :D
 
Re: [C] Crittografare un intero a 4 cifre....(Posso usare solo while,if/els

proprio oggi l'ho studiato :D, ! sarebbe un NOT logico detto anche negazione logica,comunque grazie per avermi informato e per la spiegazione :)
 
Re: [C] Crittografare un intero a 4 cifre....(Posso usare solo while,if/els

si il not lo conoscevo, ma non l'avevo mai visto scritto in quel modo e non sapevo equivalesse al contrario del valore della condizione
 
Pubblicità
Pubblicità
Indietro
Top