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 - exel

#31
 Hay partes en el codigo que un buen compilador en C/C++ detectaria y por ello no compilaria. Te recomiendo utilizar las restricciones del ANSI C. Lineas como scanf("%d",&vec_a); y lineas que faltan como return 0; en main() son errores muy graves.

No esta mal el codigo, sin embargo te hago una pregunta: ¿y si el tamaño del vector B es menor al tamaño del vector A?

Saludos
#32
Cita de: david_BS en  5 Mayo 2012, 21:00 PM

#include <stdlib.h>
#include <stdio.h>


int buscar(int vec[], int tam);

int main()
{
   int vector[100]={0},tam, i, resultado;
   
   printf("Ingrese el tamaño del vector: \n");
   scanf("%d", &tam);
   
   for(i=0;i<tam;i++)
   {
        printf("Ingrese elemento [%d]: ",i);
        scanf("%d",&vector[i]);
   }
           
         
   resultado = buscar(vector, tam);
   
   printf("el numero mayor es: %d\n", resultado);
           
   system("pause");
return 0;
}

int buscar(int v[], int tam)
{
   int max=0;
int c=tam;

   if(tam==0){

return -1;
}
   else
{
if((c-1)>=1){

if(v[c-1]>max){

max=v[c-1];

c--;

if(v[c-1]<max)
v[c-1]=max;
}


if(c>0)
return buscar(v,c);
else
return max;
}

return v[0];
}
}


Creo que tienes un error en tu forma de atacar el problema, observa detenidamente en la linea 42 y 53, ¿que pasaria si el ultimo elemento es un valor negativo?.

Quisas este equivocado, pero ya no quiero pensar :P.
#33
 Precisamente, he descargado la ultima version del dev-c++ para probarlo y funciono.
#34
Cita de: satu en  5 Mayo 2012, 17:25 PM

"vectordinamico.h"
Código (cpp) [Seleccionar]

#ifndef __VECTORDINAMICO_H__
#define __VECTORDINAMICO_H__

#include <vector>
#include <list>

using namespace std;

template <typename T>
class vectorDinamico{
   private:
      list<vector<T> > datos;
      int tamBloque;
   public:
      vectorDinamico();
      ~vectorDinamico();
      vectorDinamico(int tam);
};


template <typename T>
vectorDinamico<T>::vectorDinamico(){
   tamBloque = 0;
}

template <typename T>
vectorDinamico<T>::~vectorDinamico(){
   tamBloque = 0;
}

template <typename T>
vectorDinamico<T>::vectorDinamico(int tam){
   tamBloque = tam;
   vector<T> aux(tamBloque);
   datos.push_back(aux);
}

#endif


Esta solucion es correcta, ademas falta el pequeño detalle de no agregar el return 0 para main().

Kasswed el error es que los metodos que se encuentran en vectordinamico.cpp no existen para el compilador ya que no encuentra referencia hacia el mismo. Por eso, cuando intentas compilar main.cpp, en la especificacion de este hay una referencia a vectordinamico.h, pero ni en vectordinamico.h ni en main.cpp existe referencia a vectordinamico.h.

Perdon por la redundancia.

Saludos
#35
Anteriormente dijiste esto:

Cita de: barnix456 en  5 Mayo 2012, 18:54 PM
edito:
tambien esta mal, por que escribo la frase correcta "ola" y dice: frase incorrecta, y lo que deberia decir es que esta bien y salir, aparte el programa nunca se cierra, son siemples errores, intentare analizar ese nuevo modelo, eso es nuevo para mi... :)

La respuesta es que quieres comparar la cadena obtenida con fgets() con la cadena "ola\n", pero, como dije anteriormente, fgets() no puede copiar el caracter '\n'. Por eso estaras comparando "ola" con "ola\n" y nunca lograras asertar.

Saludos
#36
La definicion de fgets() es la siguiente:

char *fgets(char *cadena, int n, FILE *stream);

"Basicamente dice: copiar una cadena de longitud menor a n que este en stream y guardarla en cadena"

...aunque te parezca un poco rara te explico en español lo que significa:

*stream es una fuente de donde se obtiene la cadena de caracteres, esta fuente debe ser un archivo. En tu caso stdin es un archivo donde se almacena lo que escribes por teclado, y se denomina buffer de entrada.

n es la cantidad de caracteres que quieres obtener como maximo de *stream. Comunmente, le asignamos a n la longitud de tu cadena.

cadena es el nombre de tu variable donde se debe almacenar lo que obtendas de *stream

... una restriccion que impone la funcion fgets() es la siguiente:

Citar"Ningún carácter adicional es leído después del carácter de nueva línea ('\n') o después de un final de fichero (EOF)"
#37
Hola

Basandonos en la forma de obtener la matriz inversa de A:

Ainversa = (1/Det(A)) * (Adj(A)trans)

Entendiendo que es primordial:

1.- La matriz A es cuadrada; de lo contrario es imposible obtener un determinante
2.- El determinante de A no debe ser igual a cero


La primera condicion se puede solucionar directamente con el codigo. Ahora, la solucion a la segunda condicion no es tan sencilla. Podemos aplicar el algoritmo base para calcular un determinante de orden superior (mayor a 3) como:

Cita de: WikipediaEl determinante de orden n, puede desarrollarse a partir de una fila o columna, reduciendo el problema al cálculo de un determinante de orden n-1. Para ello se toma una fila o columna cualquiera, multiplicando cada elemento por su cofactor (es decir, el determinante de la matriz que se obtiene eliminando la fila y columna correspondiente a dicho elemento, multiplicado por (-1)i+j donde i es el número de fila y j el número de columna). La suma de todos los productos es igual al determinante.

... esto lo puedes aplicar directamente, sin embargo esta solucion implica tener que elegir una fila o columna cuyos elementos nos reduzca el tiempo de calculo; para eso puedes aplicar otro algoritmo que se encargue. Puedes reducir el determinante superior hasta llegar al determinante de orden 3 en el que puedes aplicar la regla de Sarrus (comunmente conocida como la regla de triangulacion).


Hasta aqui, con el codigo desarrollado podras comprobar si la matriz A tiene inversa o no, y ademas ya tendras calculado uno de los elementos de la formula.

Los pasos siguientes son:

3.- obtener la matriz adjunta de A, osea Adj(A)
4.- obtener la matriz transpuesta de Adj(A), osea Adj(A)trans


*OBSERVACION: por una propiedad de la matriz adjunta, sabemos que Adj(A)trans=Adj(Atrans); osea que es lo mismo si primero realizas la transpuesta de A y luego obtienes la matriz adjunta.

Codificar el paso cuatro es sencillo ya que solo debes intercambiar los elementos de la matriz (arreglo de dos dimensiones) cuyos subindices sean ij e ji. La resolucion del tercer paso tiene mas labor porque tienes que calcular el cofactor (tambien denominado adjunto) por cada elemento de la matriz A.

Las ultimas lineas del codigo consisten en:

5.-  Dividir cada elemento de la matriz obenida en el paso 4, por el valor del determinante obtenido en el paso 3.

Con esto finalmente obtendras la matriz inversa.

Osea que tendras que arreglartelas para dar solucion a las situaciones 1 y 3 que son las complicadas, aunque si analizas un poco el tercer paso te daras cuenta de que utiliza como base los determinantes, que precisamente los debiste haber tratado en el primer paso. Las otras practicamente ya estan hechas.

Saludos
#38
 No tengo muchas ganas de pensar :P, pero creo que no es posible. Sin embargo de algo estoy seguro, debes aprender la metodologia para encarar un problema pensando en objetos
#39
 Como dice: MAX_CHAR no esta definida y por lo tanto hay que hacerlo. Es comun que los nombres en MAYUSCULAS sean constantes declaradas con la sentencia #define como muestro a continuacion.

Otro error es que main() (el cuerpo principal) como es una funcion, debe retornar un valor entero como lo muestra la linea 5. Es por eso que al final hay que agregar un return o un exit() como tu lo haces.


#include <stdio.h>
#include <string.h>
#define MAX_CHAR 100

int main ()
{
char pass[MAX_CHAR];

printf("Introduzca password: \n");
fgets(pass,MAX_CHAR,stdin);

if(strcmp(pass,"batman es mi vecino")==0)
{
printf ("Contraseña verdadera\n");

}
else
{
printf ("La contraseña es incorrecta\n");
}
return 0;
}


Nose cuanto tiempo llevas con C, pero si es tu primer programa eso quiere decir que avanzas rapido. Bien por ti
#40
Hola

leer() no es el nombre adecuado para las operaciones que realiza.

Ahora bien, cuando haces leer(x) estas pasando la direccion de memoria de la variable x, por lo tanto no hay manera de saber el limite del arreglo que creaste.

Podrias colocar un printf("Cuantos valores quiere ingresar?: ") y un scanf() para almacenar la respuesta y pasarla como argumento a la funcion leer() y asi podras controlar el limite. Obviamente la cantidad no debe ser mayor a la cantidad maxima de bloques que tiene tu arreglo.

Podrias colocar la longitud de la cantidad maxima de bloques que tienes tu arreglo en leer() para controlar el limite.

Si quieres manejar arreglos con bloques arbitrarios debes aprender a manejar punteros y la funcion malloc().