|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Nov 2009
Messaggi: 2
|
[C] Trova la differenza
Salve, vorrei sapere se riuscite a trovare (se c'è) la differenza tra questi due codici, che per me sono equivalenti. E se vi trovate delle differenze, dirmi quali sono i casi in cui i due codici si comportano in modo differente (per esempio a causa di architetture differenti e così via)
Questo è il codice che a me funziona: #define SWAP2(a, b) (b = (a + b) - (a = b)) #define MAX 1000000 main() { char c1[MAX]; int n1,i,z; while ((n1=read(0,c1,MAX))) { for (i=0;i<(n1-3);i+=4) { SWAP2(c1[i],c1[i+1]); SWAP2(c1[i+2],c1[i+3]); } for (z=i;z<(n1-1);z+=2) { SWAP2(c1[z],c1[z+1]); } write(1,c1,n1); } return 0; } E questo è il codice, che nel mio pc funziona, però quando lo devo sottomettere nel pc del mio prof (di cui nn so nulla e ne posso accedere all'output generato) mi dice che l'output generato è differente: #define SWAP2(a, b) ((k)=((a)<<8) | (b)) #define MAX 1000000 main() { char c1[MAX]; int n1,i,z; unsigned short k; while ((n1=read(0,c1,MAX))) { for (i=0;i<(n1-3);i+=4) { k^=k; SWAP2(c1[i],c1[i+1]); *((unsigned short *)(c1 + i)) = k; k^=k; SWAP2(c1[i+2],c1[i+3]); *((unsigned short *)(c1 + i + 2)) = k; } for (z=i;z<(n1-1);z+=2) { k^=k; SWAP2(c1[z],c1[z+1]); *((unsigned short *)(c1 + z)) = k; } write(1,c1,n1); } return 0; } PS: ho fatto anche altre prove usando queste macro, sempre ottenendo insuccessi: #define SWAP2(a, b) ((k)=((b)<<8) | (a)) #define SWAP2(a, b) ((k)=((a)>>8) | (b)) #define SWAP2(a, b) ((k)=((b)>>8) | (a)) Ringrazio chiunque mi possa aiutare!! |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Nov 2009
Messaggi: 2
|
Salve, vorrei sapere se riuscite a trovare (se c'è) la differenza tra questi due codici, che per me sono equivalenti. E se vi trovate delle differenze, dirmi quali sono i casi in cui i due codici si comportano in modo differente (per esempio a causa di architetture differenti e così via)
Questo è il codice che a me funziona: codice: Codice:
#define SWAP2(a, b) (b = (a + b) - (a = b))
#define MAX 1000000
main()
{
char c1[MAX];
int n1,i,z;
while ((n1=read(0,c1,MAX)))
{
for (i=0;i<(n1-3);i+=4)
{
SWAP2(c1[i],c1[i+1]);
SWAP2(c1[i+2],c1[i+3]);
}
for (z=i;z<(n1-1);z+=2)
{
SWAP2(c1[z],c1[z+1]);
}
write(1,c1,n1);
}
return 0;
}
codice: Codice:
#define SWAP2(a, b) ((k)=((a)<<8) | (b))
#define MAX 1000000
main()
{
char c1[MAX];
int n1,i,z;
unsigned short k;
while ((n1=read(0,c1,MAX)))
{
for (i=0;i<(n1-3);i+=4)
{
k^=k;
SWAP2(c1[i],c1[i+1]);
*((unsigned short *)(c1 + i)) = k;
k^=k;
SWAP2(c1[i+2],c1[i+3]);
*((unsigned short *)(c1 + i + 2)) = k;
}
for (z=i;z<(n1-1);z+=2)
{
k^=k;
SWAP2(c1[z],c1[z+1]);
*((unsigned short *)(c1 + z)) = k;
}
write(1,c1,n1);
}
return 0;
}
#define SWAP2(a, b) ((k)=((b)<<8) | (a)) #define SWAP2(a, b) ((k)=((a)>>8) | (b)) #define SWAP2(a, b) ((k)=((b)>>8) | (a)) Ringrazio chiunque mi possa aiutare!! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:50.



















