elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  un par de dudas sobre codigo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: un par de dudas sobre codigo  (Leído 3,694 veces)
ALCales

Desconectado Desconectado

Mensajes: 9


Ver Perfil
un par de dudas sobre codigo
« en: 14 Enero 2012, 16:22 pm »

Hola, tengo un par de dudas rapidas haber si alguno me puede ayudar

·Si tengo dos vectores de enteros y quiero ver si son iguales, los he comparado asi:
Código:
if(num[0]==aleatorio[0] && num[1]==aleatorio[1] && num[2]==aleatorio[2] && num[3]==aleatorio[3])
hay alguna manera mas abreviada o otra formas de compararlos?

·Otra duda, si por ejemplo:
Código:
int a;
scanf("%d",&a);
if(125>a>100 ) FILE * fopen... (y que se abra un archivo)(y aqui un printf();)
if(200>a>125) FILE *fopen...(que se abra otro archivo distinto)printf()
if(a>200) FILE *fopen..(otro distinto tb) printf()...
y tengo esto en un bucle, ¿que puedo poner para que si ya puse por ejemplo 110 y me cree el primer archivo si luego lo vuelvo a poner no me lo vuelva a crear, abrir..?(bueno lo que realmente quiero es que no me salga el printf(); del mensaje que tengo en el if, ya que como ya me salio anteriormente no hace falta que me lo repita mas veces

·Haciendo un programa estaba usando una estructura y funciones tb, el caso esque digamos que tenia una estructura:
struct Prueba{...} Uno;
pues cuando hacia la llamada de esta entre las funciones no me la reconocia, me daba errores y ya no sabia que mas cambiar y sin embargo si pongo la estructura como un vector ya si que iva struct{...}Uno[0];
por que?? xD

Bueno saludos y gracias!!


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: un par de dudas sobre codigo
« Respuesta #1 en: 14 Enero 2012, 17:33 pm »

No has indicado el lenguaje, supongo es C, ¿Correcto?

Si tengo dos vectores de enteros y quiero ver si son iguales, los he comparado asi:
Código:
if(num[0]==aleatorio[0] && num[1]==aleatorio[1] && num[2]==aleatorio[2] && num[3]==aleatorio[3])
hay alguna manera mas abreviada o otra formas de compararlos?
Para comparar dos arrays de enteros puedes utilizar la funcion memcmp (prototipo en string.h), esta recibe tres argumentos: las direcciones base de los arrays y el tercero es el numero de elementos (como caracteres).

En tu caso seria mas o menos así (N es el numero de elementos a comparar):
Código
  1. if (memcmp(num, aleatorio, N * sizeof *num) == 0){
  2.   /* Son iguales */
  3. }else {
  4.   /* Algun elemento distinto */
  5. }

Otra duda, si por ejemplo:
Código:
int a;
scanf("%d",&a);
if(125>a>100 ) FILE * fopen... (y que se abra un archivo)(y aqui un printf();)
if(200>a>125) FILE *fopen...(que se abra otro archivo distinto)printf()
if(a>200) FILE *fopen..(otro distinto tb) printf()...
y tengo esto en un bucle, ¿que puedo poner para que si ya puse por ejemplo 110 y me cree el primer archivo si luego lo vuelvo a poner no me lo vuelva a crear, abrir..?
No es posible utilizando solo C estándar ya que si bien la función "fopen" retorna diferente de NULL cuando el archivo se abre correctamente el caso contrario (retorna NULL) no permite concluir que no existe ya que la función puede fallar por otras razones (por ejemplo falla de dispositivo).

Tal vez haya una solución pero necesitamos que publiques el código fuente del programa.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: un par de dudas sobre codigo
« Respuesta #2 en: 14 Enero 2012, 19:22 pm »

Perfectamente, lo primero se puede hacer como te dice rir3760. Si quieres programar una función tú mismo, a modo de ejercicio, puedes hacer algo así:

Código
  1. int cmp(int* vec1, int* vec2, int N) {
  2. int i;
  3. int b = 1;
  4. i = 0;
  5. while (i < N && b) {
  6. b = vec1[i]==vec2[i];
  7. ++i;
  8. }
  9. return b;
  10. }

Y utilizarla donde convenga. Por ejemplo, if (cmp(num,vec,4) Loquesea();

La ventaja de memcmp es que es más genérica y sirve para cualquier tipo de datos.

Lo segundo se podría hacer, aunque no creo que de manera portable. Básicamente el problema se puede reducir a saber si un archivo existe o no. Está la librería errno.h, de la biblioteca estándar. Esta librería define un entero, errno, que toma distintos valores en función de los errores que tengan las llamadas al sistema (en caso de que no haya error, el comportamiento no está definido). El problema es que en Linux y en Windows no se definen los mismos errores en el errno, ni para las mismas situaciones (el estándar requiere sólo 3 códigos de error básicos). Bajo Linux, el código del error genérico "Not such file or directory" es el 2, aunque puedes usar la macro ENOENT también.

Se puede usar una función como ésta si usas Linux.

Código
  1. int existsFile(char* filename) {
  2. FILE* f = NULL;
  3. f = fopen(filename,"r");
  4. if (f == NULL && errno == ENOENT)
  5. return 0;
  6. else {
  7. fclose(f);
  8. return 1;
  9. }
  10. }

Con eso puedes comprobar si un archivo existe o no (aségurate de que filename tenga un carácter '\0' al final!!). Si estás en Windows, habría que mirar qué número de errores utiliza y cómo y cuándo los modifica. Si no hay ningún código apropiado en el errno, se debería usar otra librería de este SO.

Me cuesta entender tu última duda. ¿Podrías poner un código de ejemplo que lo ilustre?

¡Saludos!
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: un par de dudas sobre codigo
« Respuesta #3 en: 14 Enero 2012, 21:44 pm »

Solo un comentario (en buen plan): la variable "b" solo "pasa la cubeta". En otras palabras no es necesaria ya que se puede utilizar la comparación directamente y al contador como bandera de estado.

Eliminando esa variable nos queda:
Código
  1. int cmp(int *p, int *q, int N)
  2. {
  3.   int i;
  4.  
  5.   for (i = 0; i < N && p[i] == q[i]; i++)
  6.      ;
  7.  
  8.   return i == N;
  9. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: un par de dudas sobre codigo
« Respuesta #4 en: 14 Enero 2012, 23:30 pm »

Solo un comentario (en buen plan): la variable "b" solo "pasa la cubeta". En otras palabras no es necesaria ya que se puede utilizar la comparación directamente y al contador como bandera de estado.

Eliminando esa variable nos queda:
Código
  1. int cmp(int *p, int *q, int N)
  2. {
  3.   int i;
  4.  
  5.   for (i = 0; i < N && p[i] == q[i]; i++)
  6.      ;
  7.  
  8.   return i == N;
  9. }

Un saludo

Perfectamente.

Lo único con lo que soy reticente es con lo de usar bucles for en búsquedas. Es una tontería, sólo es una cuestión de estilo, pero me obsesionan los temas de estilo. Si no es un recorrido uso while.

Código
  1. int cmp(int *p, int *q, int N) {
  2. int i = 0;
  3. while (i < N && p[i] == q[i]) ++i;
  4. return i == N;
  5. }

¡Nos vemos, jefe!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Tengo varias dudas sobre DVD a formato FLV, y otras cosas sobre FLV
Multimedia
SaintGermain 0 2,224 Último mensaje 30 Mayo 2005, 21:47 pm
por SaintGermain
[DUDAS] Todas las dudas sobre RadASD + MASM aqui « 1 2 3 »
ASM
AleX Inc. 23 20,851 Último mensaje 5 Julio 2010, 11:58 am
por Eternal Idol
Dudas sobre la vpn sobre Windows Server 2003
Redes
Riudo 5 5,579 Último mensaje 24 Mayo 2011, 05:36 am
por Riudo
Ayuda en mi codigo y con dudas
Programación C/C++
soma182 1 2,394 Último mensaje 26 Noviembre 2013, 15:59 pm
por Stakewinner00
Dudas con código de Arduino
Programación C/C++
Emily 3 2,056 Último mensaje 14 Junio 2017, 11:32 am
por animanegra
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines