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

#891
El problema puede deberse a la declaración del array "v" en la función principal:
main()
{
#define N_Inter 100
#define N_Datos_Max 1000000
  double H[N_Inter],v[N_Datos_Max];


Intenta colocando esa declaracion fuera de la función, por ejemplo junto a la variable "fout":
FILE *fout;
#define N_Datos_Max  1000000
double v[N_Datos_Max];

int main(void)
{
   ...


Otra opción, si se necesita mantener al objeto como local, es reservando el espacio en tiempo de ejecución con malloc, calloc o realloc.

Un saludo
#892
Cita de: cantabria1234 en  4 Abril 2013, 22:32 PMBuenas noches, soy principiante en programación en C y al hacer este problema me compila pero el programa deja de funcionar. Os adjunto el enunciado del ejercicio y mi código.
Errores en el programa hay varios.

* En la función main hay que cambiar su definición a "int main(void) ...", indicar su valor de retorno con al menos "return 0;" y colocar a "variable" como una variable local a esa función.

* En la misma función en las dos llamadas a scanf falta el operador "dirección de" (el '&').

* En la función "ciclo" el problema principal se debe al uso de cuatro variables para obtener el máximo cuando basta con solo tres (hay que eliminar del calculo y del programa a la variable contador). También hay que eliminar la variable "dias" ya que no se utiliza.

* En esa misma función vas a tener problemas debido al uso de la función feof, la solución mas facil pero no la mejor es utilizar la cadena de formato "%i " con fscanf (esa cadena tiene un espacio al final y es critico).

El programa con las correcciones:
#include <stdio.h>
#include <stdlib.h>

void ciclo (FILE *fichero, int minimo, int alimentos, int *variable);

int main(void)
{
   FILE *fichero;
   int variable;
   int minimo, alimentos;
   
   fichero = fopen ("comidas.txt", "r");
   
   printf ("Introduce la cantidad de alimentos:\n");
   scanf ("%i", &alimentos);
   printf ("Introduce el minimo de calorias:\n");
   scanf ("%i", &minimo);
   ciclo (fichero, minimo, alimentos, &variable);
   printf ("Hambruna mas larga: %i\n", variable);
   
   return 0;
}

void ciclo (FILE *fichero, int minimo, int alimentos, int *variable)
{
   int hambre, i, comida, calorias;
   
   *variable = 0;
   hambre = 0;
   i = 0;
   
   while (!feof (fichero) ) {
      calorias = 0;
      for (i = 0; i < alimentos; i++) {
         fscanf (fichero, "%i ", &comida);
         calorias = calorias + comida;
      }
     
      if (calorias < minimo)
         hambre = hambre + 1;
      else {
         if (hambre > *variable)
            *variable = hambre;
         
         hambre = 0;
      }
   }
}


Un saludo
#893
Cita de: edwinabril1992 en  5 Abril 2013, 05:04 AMIngresar una frase y determinar los caracteres que se repiten 3 o más veces consecutivas
Disculpa la repetición pero, como en uno de tus otros temas, en tu programa se deben cambiar los nombres de los encabezados, la definición de la función main y evitar el uso de la biblioteca conio de Borland, el porque se explica en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

La operación que piden es sencilla y solo requiere que tomes nota del carácter previo y el actual:
A) Si el carácter actual es igual al previo incrementas el contador.
B) Si no lo es verificas si el valor del contador es mayor o igual a tres, si es así imprimes el carácter. Por ultimo asignas el valor 1 al contador.

Para leer caracteres de la entrada estándar en C++ puedes utilizar la función get. Inténtalo, no es difícil.

Un saludo
#894
Ademas de la corrección que ya te indico 85 otras dos que debes hacer en tu programa son:

1) Utilizas el operador de asignación "=" cuando debes utilizar el de comparación "==":
if (a = 1){ // Debe ser a == 1

2) Cuando llamas a una función no debes indicar su tipo de retorno, esta sentencia:
void suma(vect1, vect2, vect3);
Hay que cambiarla a:
suma(vect1, vect2, vect3);

Un saludo
#895
En tu programa se deben cambiar los nombres de los encabezados, la definición de la función main y evitar el uso de la biblioteca conio de Borland, el porque se explica en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Aparte de eso el programa esta bien siempre y cuando los números ingresados sean mayores o iguales a cero. Si en cambio todos los números son negativos no dará el resultado esperado.

Un saludo
#896
Cita de: 85 en  4 Abril 2013, 18:39 PM
Si se trata de escribir una cadena alfanumérica y hacer que la misma se divida en bloques separados de letras o números
En C otra forma de realizar esa operación es mediante las funciones isdigit e isalpha mas punteros a funciones, estos para alternar entre los sets a procesar (digitos ==> alfabeticos ==> digitos ...).

Si ignoramos por un momento la validación de errores de malloc y realloc, un ejemplo de ello es:
#include <stdio.h>
#include <stdlib.h>

char **separar(char *p);

int main(void)
{
   char **mat;
   int i;
   
   mat = separar("01ab210c");
   
   for (i = 0; mat[i] != NULL; i++){
      printf("%2d: %3s\n", i, mat[i]);
      free(mat[i]);
   }
   free(mat);
   
   return EXIT_SUCCESS;
}

#include <string.h>
#include <ctype.h>

char **separar(char *p)
{
   int (*pfn[2])(int) = {isdigit, isalpha};
   int set;
   
   char **mat;
   int i;
   char *q;
   
   mat = malloc((strlen(p) + 1) * sizeof *mat);
   i = 0;
   set = isalpha(*p) != 0;
   
   while (pfn[set](*p)){
      for (q = p + 1; pfn[set](*q); q++)
         ;
     
      mat[i] = malloc(q - p + 1);
      sprintf(mat[i], "%.*s", (int) (q - p), p);
      i++;
     
      p = q;
      set = !set;
   }
   mat[i] = NULL;
   
   mat = realloc(mat, ++i * sizeof *mat);
   
   return mat;
}


La salida es la esperada:
0:  01
1:  ab
2: 210
3:   c


También pueden utilizarse otras funciones, por ejemplo sscanf.

Un saludo
#897
Cita de: henkel en  4 Abril 2013, 05:42 AM
tipoVehiculo != 1 && tipoVehiculo != 2 && tipoVehiculo != 3 //caso 2

[...]

en el segundo caso tampoco es posible por la misma razón si el usuario ingreso 3 tipodeVehiculo es diferente de 1 y de 2  nunca podrá ser al mismo tiempo diferente de 1 y ala vez de 3
No.

Las condiciones:
Código (cpp) [Seleccionar]
// 1
tipoVehiculo < 0 || tipoVehiculo > 3 // Deberia ser: tipoVehiculo < 1 || tipoVehiculo > 3

// 2
tipoVehiculo != 1 && tipoVehiculo != 2 && tipoVehiculo != 3

Son casi equivalentes y resultan en true si el valor de tipodeVehiculo no es 1, 2 o 3. La primera también resulta en true si tipodeVehiculo es igual a cero (supongo en un error).

Un saludo
#898
En C y C++ no debes indicar una condicion de esta forma:
Código (cpp) [Seleccionar]
tipoVehiculo != 1 || 2 || 3
Ya que no tendra el efecto que esperas.

En su lugar debes comparar la variable contra cada uno de los valores:
Código (cpp) [Seleccionar]
tipoVehiculo != 1 || tipoVehiculo != 2 || tipoVehiculo != 3
Pero eso no funcionara ya que la condicion esta mal (debido al uso del operador OR logico), para el caso debe ser:
Código (cpp) [Seleccionar]
tipoVehiculo != 1 && tipoVehiculo != 2 && tipoVehiculo != 3

Es mejor invertir los bloques y verificar si la entrada del usuario es correcta al introducir uno, dos o tres, de esta forma:
Código (cpp) [Seleccionar]
if (tipoVehiculo == 1 || tipoVehiculo == 2 || tipoVehiculo == 3){
  cout << "¿Cuantos minutos a estado su vehiculo en el parking?";
  cin >> minutosEstancia;
}else {
  cout << "No a introducido un numero apto";}
}


Y todos los condicionales como este:
Código (cpp) [Seleccionar]
if (tipoVehiculo = 1)
Se ejecutaran ya que estas utilizando el operador de asignacion "=" cuando deberias utilizar el de comparacion "==".

Un saludo
#899
Cita de: amchacon en  3 Abril 2013, 14:20 PM2 if? Como compruebas si una letra es una vocal?
Haciendo trampa (Usando la biblioteca estandar). Mas o menos asi:
#include <string.h> /* strchr  */
#include <ctype.h>  /* isalpha */

/* ... */

char ch; /* algun caracter */

/* ... */

if (isalpha(ch))
   if (strchr("AEIOUaeiou", ch) != NULL){
     
      /* ch es una vocal */
     
   }else {
     
      /* ch es una consonante */
     
   }


Un saludo
#900
Cita de: Luchoz95 en  2 Abril 2013, 17:54 PMentonces puede ser que el loco de este video este equivocado ?
Correcto. Ese array tiene cuatro elementos.

Con el programa tal como esta (tu primer mensaje) no hay forma de obtener la salida que mencionas. Supongo lo modificaste y al ejecutarlo era mas o menos así:
#include <stdio.h>

int main(void)
{
   int i;
   int a = 1;
   int vectorr[4];
   
   for (i = 0; i <= 4; i++){
      vectorr[i] = a;
      a++;
   }
   
   for (i = 0; i <= 4; i++)
      printf ("Vector [%d] : %d\n", i, vectorr[i]);
   
   return 0;
}


Despues de compilar con MS Visual C++ 2008 Express al ejecutarlo su salida es:
Vector [0] : 1
Vector [1] : 2
Vector [2] : 3
Vector [3] : 4
Vector [4] : 6


Y con otros compiladores se puede obtener el mismo efecto cambiando el orden de las declaraciones.

Por ultimo si quieres aprender bien mejor consigue un buen libro (mas foros de soporte como este).

Un saludo