Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rir3760

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

Cita de: ALCales en 14 Enero 2012, 16:22 PMSi tengo dos vectores de enteros y quiero ver si son iguales, los he comparado asi: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):
if (memcmp(num, aleatorio, N * sizeof *num) == 0){
   /* Son iguales */
}else {
   /* Algun elemento distinto */
}


Cita de: ALCales en 14 Enero 2012, 16:22 PMOtra duda, si por ejemplo: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
#1372
Todo correcto salvo un detalle: no se debe utilizar la función "strcmp" de esa forma ya que "operador" no es un array, solo se puede almacenar en esta un carácter.

Basta con utilizar directamente el valor del carácter argv[2][0] o bien copiar este en la variable operador:
operador = argv[2][0];

Un saludo

#1373
Ventajas hay varias, por ejemplo el manejo de memoria para almacenar el numero de elementos es cortesía de la clase, otra ventaja es tratar al vector como si fuera un array.

Un ejemplo de ello basado en tu programa (leer N números y ordenarlos) es:
Código (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

#include <vector>
using std::vector;
typedef vector<int>::size_type vector_sz;

#include <algorithm>
using std::sort;

int main()
{
   cout << "Indica el numero de elementos: ";
   vector_sz num_elem;
   if (! (cin >> num_elem) || num_elem < 1)
      return 1;
     
   cout << "Introduce los numeros" << endl;
   vector<int> v(num_elem);
   for (vector_sz i = 0; i != num_elem; i++) {
      cout << "v[" << i << "] == ";
      cin >> v[i];
   }
   
   sort(v.begin(), v.end());
   
   cout << "Vector ordenado" << endl;
   for (vector_sz i = 0; i != num_elem; i++)
      cout << ' ' << v[i];
   cout << endl;
   
   return 0;
}


Un saludo
#1374
Programación C/C++ / Re: Ayuda con notepad
14 Enero 2012, 14:24 PM
Bueno, aquí hay varios problemas, para empezar HTML es un lenguaje de marcado, nada que ver con el lenguaje que mencionas (C#).

Si ya estas seguro del lenguaje indícalo así y alguno de los moderadores colocara el tema en el foro apropiado.

Si todavía no estas seguro una opción es el lenguaje tratado en este foro: C++.

Pero (y lo digo con la mejor intencion) por tus comentarios me parece mejor que empieces por estudiar programación en sus conceptos básicos, por ejemplo como funcionan lenguajes como C y C++ donde tienes un código fuente (texto plano que, en tu caso, editas en Notepad++) y este se procesa por el compilador para generar la aplicación y es esta ...

En mi opinión así te haces la vida mas fácil.

Un saludo
#1375
Un problema (común, me temo) es aprender C++ sin sacar provecho de las facilidades que provee su biblioteca estándar. Como ya comento Xandrete lo mejor seria utilizar la clase "vector" (y de pasadita la función "sort").

Pero si la idea es practicar con el uso de arrays y punteros hay errores que corregir empezando por los nombres de los encabezados. Por favor revisa el tema |Lo que no hay que hacer en C/C++. Nivel basico|

En lo general el programa no funcionara correctamente por lo ya comentado: la declaración de una variable con el mismo nombre que un parámetro no es valida y el algoritmo tiene limites incorrectos.

La función de ordenación corregida es:
Código (cpp) [Seleccionar]
void ordenar (int arreglo[])
{
   int i, j, temporal;
   
   for (i = tam - 1; i > 0; i--)
      for (j = 0; j < i; j++)
         if (arreglo[j] > arreglo[j + 1]) {
            temporal = arreglo[j];
            arreglo[j] = arreglo[j + 1];
            arreglo[j + 1] = temporal;
         }
}


Un saludo
#1376
Cita de: ferminta en 13 Enero 2012, 08:06 AMHe hecho  un programita  en C que exactamente  rellenara una tabla con los 10 primeros números d ela sucesión de Fibonacci.
Abonando a lo ya comentado ...

Lo primero es conseguir (y devorar) un buen libro o manual sobre C, para ello empieza revisando el tema [Libros/Papers] C/C++.

Debes eliminar todas la llamadas a scanf ya que no tienen caso, en su lugar coloca un bucle para imprimir los números de la serie:
for (i = 0; i < 10; i++)
   printf(" %d", tabla[i]);
putchar('\n');


También hay que cambiar la definición de la macro "N" (el carácter '=' esta de mas) o bien eliminarla ya que no se utiliza en el programa.

Un saludo
#1377
Cita de: cacara en  6 Enero 2012, 15:58 PMuna cosita mas hay algo facil para hacer que ninguno de los numeros generados sean iguales? Porque aveces sale por ejemplo 778 o 655 porque lo unico que se me ocurre es poner sentencias IF comparando uno con el anterior y si es igual, que lo vuelva a generar.
En C estándar no hay forma de garantizar que los números no se repitan, eso debe hacerse de forma manual ya sea comparando con los ya generados (como comentas) o bien, si el rango de números es pequeño, almacenando estos en un array y seleccionando (generando el indice) de forma aleatoria.

Por ejemplo:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define NUM_ELEM 16

int main(void)
{
   int num[NUM_ELEM];
   int i;
   int j;
   
   srand((unsigned) time(NULL));
   
   for (i = 0; i < NUM_ELEM; i++)
      num[i] = i;
   
   /* Seleccionar los numeros en orden aleatorio */
   for (i = NUM_ELEM; i > 0; i--){
      j = rand() % i;
      printf(" %2d", num[j]);
     
      num[j] = num[i - 1];
   }
   putchar('\n');
   
   return EXIT_SUCCESS;
}

Por supuesto ello no sirve si el rango de valores es significativo.

Un saludo
#1378
A riesgo de repetir las soluciones que ya te han dado ...

El problema en la función "recoger_libro" no es la declaración del parámetro "libro" sino su uso.

Cuando una función se declara de esta forma:
void recoger_libro(T_libreria libro[]) ...
Se procesa como si el parámetro fuera declarado así:
void recoger_libro(T_libreria *libro) ...
Y para acceder al objeto apuntado por "libro" debes utilizar el operador "[]" (como ya te indicaron) o bien el operador "->".

Por ello hay que cambiar esa funcion a:
int recoger_libro(T_libreria libro[])
{
   int n, i;
   
   printf("Libros a introducir? ");
   scanf("%d", &n);
   
   for (i = 0; i < n; i++){
      printf("Titulo del libro: ");
      gets(libro[i].titulo);
     
      printf("Autor del libro: ");
      gets(libro[i].autor);
     
      printf("A%co de publicaci%cn: ", 164, 162);
      scanf("%d", &libro[i].fecha_publicacion.anno);
     
      printf("Mes de publicaci%cn: ", 162);
      scanf("%d", &libro[i].fecha_publicacion.mes);
     
      printf("Datos guardados.");
      system("cls");
   }
   
   return i;
}


También hay que evitar el uso de la función "gets" utilizando en su lugar "fgets". Mas información sobre el tema en |Lo que no hay que hacer en C/C++. Nivel basico|.

Un saludo
#1379
Cita de: Denok en  6 Enero 2012, 12:53 PM
Pero una cosa Ghastlyx, si lo hago como tu dices, como creo una variable para cada palabra? Debo crear otro vector que lo vaya guardando no ? Sino no veo como hacerlo, aun así voy ha intentarlo haber que sale.
No. No necesitas crear otro vector.

Primero lees cada una de las palabras y las almacenas en el vector de strings, eso ya lo tienes (salvo algunos detalles como el uso de "and not(false)", esa parte hay que cambiarla). Agregas cada palabra al vector mediante la función miembro "push_back" (puedes revisar ejemplos mediante el motor de búsqueda de los foros).

Después ordenas el vector mediante la función "sort", antes de utilizarla debes incluir el encabezado <algorithm>.

Por ultimo revisas los elementos del vector como te indico ghastlyX utilizando el operador "[]" (como si fuera un array).

Un saludo
#1380
Cita de: GarbageCollector en  5 Enero 2012, 18:18 PM
¡Absurda! ¿Porqué?! :xD

const char *p;

indica que los caracteres apuntados por p no serán modificados como es el caso de la función. La función printf también hace uso de const char *.

BlackZeroX (Astaroth) se refiere (supongo) a que no es necesario declarar la variable ya que en su lugar puedes utilizar el parámetro "s". De hacerlo así la función se reduce a:
int extraernum(const char *s)
{
   int n = 0;
   
   while (*s){
      if (isdigit(*s))
         n = 10 * n + *s - '0';
     
      s++;
   }
   
   return n;
}


Un saludo