Posibles soluciones a los ejercicios tipo parcial redictado 2014

Anuncio
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct IP
{
unsigned char* dir;
unsigned char* masc;
};
int main(int argc, char *argv[])
{
FILE *archivo;
char caracteres[17];
struct IP ip;
unsigned char byte[4],byte1[4];
char* p,*q;
int i;
archivo = fopen("prueba.txt","r");
if (archivo == NULL)
exit(1);
//supongo que el archivo tiene dos líneas
ip.dir=(unsigned char*)malloc(17);
ip.masc=(unsigned char*)malloc(17);
fgets(caracteres,17,archivo);
strcpy(ip.dir,caracteres);
printf("Direccion de IP: %s",ip.dir);
fgets(caracteres,17,archivo);
strcpy(ip.masc,caracteres);
printf("Mascara de subred: %s\n",ip.masc);
fclose(archivo);
//determino id de red
p=strtok(ip.dir,".");
byte[0]=atoi(p);
for(i=1;i<4;i++){
p=strtok(NULL,".");
byte[i]=atoi(p);
}
q=strtok(ip.masc,".");
byte1[0]=atoi(q);
printf("El ID de red es: %u.",byte[0]&byte1[0]);
for(i=1;i<4;i++){
q=strtok(NULL,".");
byte1[i]=atoi(q);
if(i<3)
printf("%u.",byte[i]&byte1[i]);
else if(i==3)
printf("%u\n",byte[i]&byte1[i]);
}
//debería chequear que le pasé como arg.de línea de comando nombre archivo
archivo = fopen (argv[1], "wb");
fwrite (&ip, sizeof (struct IP), 1, archivo);
fclose(archivo);
return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct lectura{
1
char* nombre;
int dato;
char crc;
};
int cuentaunos(int x) {
int parity=0;
while (x != 0) {//supongo valores positivos sino tengo que contar la cantidad
de veces que desplazo
if(x & 1)
parity++;
x >>= 1;
}
return parity;
}
int main(int argc, char *argv[])
{
//debería chequear la cantidad de argumentos
FILE *archivo;
char caracteres[80];
char encontrado='s',*p;
int i,cuentalineaster=0,cuentalinea=0,comienzo,final,cantregistros;
struct lectura *vector,*otro;
archivo = fopen(argv[1],"r");
//chequear que se abrio bien
while (feof(archivo) == 0){
fgets(caracteres,80,archivo);
cuentalinea++;
if(caracteres[0]=='*'){
i=1;
while(caracteres[i]){
if(caracteres[i]!='*'&& caracteres[i]!='\n')
{
encontrado='n';
break;
}
i++;
}
if(encontrado=='s'){
cuentalineaster++;//supongo que los datos de los sensores
no tienen asteriscos
if(cuentalineaster==1)
comienzo=cuentalinea+1;
else if(cuentalineaster==2)
final=cuentalinea-1;
}//fin if encontrado
}//fin del if busca ***
if(cuentalineaster==2){
cantregistros=(final-comienzo+1)/3;
break;
}
}//fin lectura archivo
fclose(archivo);
vector=(struct lectura*)malloc(cantregistros*sizeof(struct lectura));
//chequear que no devuelva null
2
archivo = fopen(argv[1],"r");
for(i=1;i<comienzo;i++)//descarto estas líneas
fgets(caracteres,80,archivo);
for(i=0;i<cantregistros;i++){
fgets(caracteres,80,archivo);
//descarto el salto de línea fgets lo retiene
p=(char*)malloc(strlen(caracteres));
vector[i].nombre=(char*)malloc(strlen(caracteres));
p=strtok(caracteres,"\n");
strcpy(vector[i].nombre,p);
fgets(caracteres,80,archivo);
vector[i].dato=atoi(caracteres);
fgets(caracteres,80,archivo);//linea en blanco, también debo leerla
vector[i].crc=cuentaunos(vector[i].dato);
printf("%s\n",vector[i].nombre);
printf("%d\n",vector[i].dato);
p=(char*)malloc (33);
printf("%s\n",itoa(vector[i].dato,p,2));
printf("%d\n",vector[i].crc);
}
//debo leer el nombre del archivo y si tiene extensión debo cambiarla por
.bin
p=(char*)malloc(256);
p=strtok(argv[1],".");
archivo = fopen(p,"wb+");
fwrite (vector, sizeof (struct lectura), cantregistros, archivo);
otro=(struct lectura*)malloc(cantregistros*sizeof(struct lectura));//para ver
que lo lee de los datos cargados del archivo
//permite cambiar el modo de escritura a lectura sin cerrar la conexión con
el archivo
rewind(archivo);
fread (otro, sizeof (struct lectura), cantregistros, archivo);
fclose(archivo);
for(i=0;i<cantregistros;i++){
printf("%s\n",otro[i].nombre);
printf("%d\n",otro[i].dato);
printf("%d\n",otro[i].crc);
}
getchar();
return 0;
}
3
Descargar