• Miércoles 23 de Mayo de 2012, 13:33

Mostrar Mensajes

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


Mensajes - ProfesorX

Páginas: [1] 2 3 ... 28
1
C/C++ / Re:[Problema] Error de compilación en el prototipado de una función.
« en: Sábado 21 de Abril de 2012, 21:16 »
Seria bueno que explicaras en donde estaba tu error y que hiciste para solucionarlo, de esa manera, si alguien comete el mismo error y busca ayuda, sabra que hacer =)

2
C/C++ / Re:Programa en c++
« en: Sábado 21 de Abril de 2012, 00:44 »
Hola de nuevo Alehtokita.

En primer lugar, no es necesario que pongas toda la lista de errores, si en todas es el mismo errro, si te fijas, en todas es el mismo error, solo que en diferente linea, asi que con la primera linea basta.

En segundo lugar, siempre es bueno aclarar con que compilador y sistema operativo estas trabajando, asi se te puede brindar una mejor ayuda.

Bueno, ahora sobre tu problema, estas utilizando los arreglos de manera equivocada, no estas colocando los indices, en el caso de los arreglos de char cuando representan cadenas solo necesitas el primer indice, ya que el segundo indice representa la longitud de la cadena, en el caso de los arreglo de int, si necesitas los dos indices, no solo uno, de lo contrario tambien marcara error. Tambien es mejor que inviertas los indices de tu arreglo cantidades, para que coincida con tu arreglo de articulos.

Dicho eso, solo te pondre los dos pirmeros ejemplos, te queda de tarea hacer el resto de correcciones en tu programa.

Código: [Seleccionar]
#include <iostream>
#include <stdlib.h>

// las clases cin y cout se encunetran dentro del namespace std
using namespace std;

int main()
{   char articulos[10][30];
    // Invierte los indices, para que coincidan con la declaracion de
    // tu arreglo de cadenas
    int cantidades[10][3];     //3turnos  10 articulos
    for(int i=0;i<10;i++){
     cout<<"Ingrese el nombre del articulo Nº"<<i+1<<" : ";
     // Indice del arreglo de cadenas articulos
     // Solo necesitas uno, pues los arreglos de cadenas
     // se manejan como si fueran vectores pero si debes
     // colocar un indice, en tu codigo lo pusiste sin indice
     cin.getline(articulos[i],30);
     cout<<"Ingrese la produccion en el primer turno : ";
     // En este caso dado que son int, si necesitas los dos indices
     // aunque de igual manera en tu codigo solo ponias un indice
     cin>>cantidades[i][0];

Saludos :)

3
C/C++ / Re:Programa en c++
« en: Viernes 20 de Abril de 2012, 19:11 »
Necesitas poner el namespace en donde se encuentran las clases cin y cout:

Código: [Seleccionar]
#include <iostream>
#include <stdlib.h>

// las clases cin y cout se encuentran dentro del namespace std
using namespace std;

int main()
{

Saludos :)

4
C/C++ / Re:Necesito de su opinion, C++
« en: Domingo 15 de Abril de 2012, 20:13 »
Lee, analiza y luego comenta, no te estoy diciendo que me digas algo contextual, algo pre-fabricado, si no que algo muy propio, algo personal, lo que vos entendas.... Con mis tareas no me conforme con la opinión de alguien, si no que lo investigo....

Solo quiero un apiolen..

Estamos.

En todo caso, el que debe leer, analizar y comentar eres tu, tu eres el que tiene que dar respuestas a esas preguntas, respuestas que como te dijeron arriba las puedes encontrar en algun libro, o buscando en google, ademas este foro es de dudas sobre codigo en C/C++, no sobre preguntas de teoria de lenguaje C, no seas perezoso, y lee analiza y comenta tu, no esperes que otra gente lea, analice y comente por ti.

Saludos :)

5
C/C++ / Re:Problema con doble validacion
« en: Sábado 31 de Marzo de 2012, 21:13 »
El problema viene de la falta de precision de los numeros de punto flotante, aunque tu no lo veas a simple vista, cuando tu guardas un numero de punto flotante siempre habra un error de redondeo, al haber un error de redondeo  entonces cuando tu preguntas while(c!=1); si c no es exactamente uno, la condicion sera verdadera y seguira ejecutando el ciclo. En tu caso usando los valores que pones, la suma de 0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.0 me dio internamente 1.00000011920928960000, que como puedes ver no es exactamente el numero uno.

Hay varias soluciones para este problema, la mas sencilla que veo en tu caso es sacar el valor absoluto de la diferencia c-1.0 y utilizar un valor de "tolerancia" para determinar hasta que digito consideras que el numero es igual o diferente.

Dicho de otro modo deberas cambiar la condicion de tu do..while:

Código: [Seleccionar]
while(c!=1);

por:

Código: [Seleccionar]
while(fabs(c-1.0) > 0.1);

Si deseas una menor tolerancia, simplemente modifica el 0.1 por el valor que consideres que seria el mas adecuado para tu caso (0.01, 0.001, 0.0001, etc.)

Saludos =)

6
Java / Re:Problemas con Ejercicio Sencillo
« en: Sábado 24 de Marzo de 2012, 23:20 »
Hola de nuevo.

Bueno ahora si publicaste tu codgio completo y analizandolo me doy cuenta que cometes un error de logica en el siguiente fragmento:

Código: [Seleccionar]
                for (i=0;i<=1;i++)
                       
                {
                        if (clientes[i].dni == dnis)
                                r=clientes[i].saldo;
                        else
                                r=0;
                               
                               
                       
                }

Utilizas un ciclo for para buscar el DNI, pero nunca sales del ciclo cuando lo encuentras, ademas en el else pones r=0, de esa forma aun cuando lo encuentras, vuelves a poner el saldo en cero. Asi como esta si por ejemplo tienes 10 DNI, solo en una pasada del ciclo haces r=clientes[ i ].saldo;, pero en las otras nueve pasadas haces r=0.

En mi opinion lo mas correcto es eliminar el else, esta de mas, ya que de todas formas antes de entrar al ciclo haces r=0, ademas debes agregar una forma de salir del ciclo una vez que encuentras el DNI, lo mejor es utilizar break, que te permite salir del for antes de que se ejecute n numero de veces.

Sin embargo veo otro problema, ¿que pasa si algun cliente tiene un saldo de cero? No tienes forma de distinguir cuando no encuentras el DNI, y cuando el saldo es cero, ya que en ambos casos te dara cero el resultado. En este supuesto yo sugeriria que en lugar de hacer r=0, hagas r=-1, ya que un saldo nunca podra tener un valor negativo, de esa manera separarias cuando el DNI no se encuenta de cuando alguien tiene un saldo de cero.

Dicho eso, el codigo corregio seria algo como:

Código: [Seleccionar]
import java.util.*;
 
 
public class Cajero   {
 
       
       
       
        public Cliente[] clientes = new Cliente[2];
       
       
        public static void main(String[] args) {
                int valor;
                int dnisearch;
                int i;
                Scanner s = new Scanner(System.in);
                Cajero ca = new Cajero();
                               
                for (i=0;i<=1;i++)
                {
                ca.clientes[i] = new Cliente();
                System.out.println("Ingrese Cliente, DNI y Saldo");
                ca.clientes[i].setData();
                       
                }
               
       
               
                for (i=0;i<=1;i++)//compruebo q los datos estan bien ingresados
                {
                        System.out.println("Cliente: "+ca.clientes[i].nombre);
                        System.out.println("Saldo: "+ca.clientes[i].saldo);
                }
               
               
                System.out.println("ingrese dni para obtener saldo");
                dnisearch = s.nextInt();
               
                valor= ca.getSaldo(dnisearch);
                if (valor == -1)
                System.out.println("DNI no encontrado");
                else
                System.out.println("saldo "+valor);
 
        }
 
       
        public int getSaldo (int dnis)
       
        {
               
                int i;
                // r = -1 para indicar que no encontro el dni
                int r=-1;
                for (i=0;i<=1;i++)
                       
                {
                        if (clientes[i].dni == dnis)
                        {
                                r=clientes[i].saldo;
                                // Salir del for si encuentra el DNI
                                break;
                              }
// Eliminamos esto, que es innecesario
//                        else
//                                r=0;
                               
                               
                       
                }
       
                        return(r);             
                       
               
               
        }
}

Ahora respecto a:
Citar
Supongan que tengo ke leer un entero en el metodo getSaldo(), deberia definir como lo hice en el main Scanner s = new Scanner(System.in); y ahi justamente es donde radica mi duda, porqué lo tengo que definir de nuevo??? si ya lo he hecho en el main.

El que lo definas en el main no significa que sera vaildo para todo el programa, ya que la variable "Scanner s" al estar definida dentro del main, solo es valida para ese metodo, entra en el ambito de lo que son "variables locales". Para que puedas utilizar esa variable en toda la clase debes definirla como tu mismo dices en los atributos de la clase, y ademas me parece que debes definirla como static, ya que de lo contrario tendrias que instanciar la clase Cajero para poder utilizar la variable.

Bueno espero con esto haber aclarado tus dudas.

Saludos =)

7
Java / Re:Problemas con Ejercicio Sencillo
« en: Sábado 24 de Marzo de 2012, 01:59 »
Hola franZn, bueno das muy poca informacion para poder ayudarte, en el codigo que publicaste estas usando la clase Cliente, pero no veo su definicion, sospecho que el error esta en que el miembro saldo de la clase Cliente no es de tipo entero, digo sospecho porque si no pones el codigo es imposible de saber.

Ahora respecto a esto:

Citar
porque tengo ke definir 2 veces esto: Cajero ca = new Cajero(), intente ponerlo fuera de los metodos pero no funciona.

Al decir "no me funciona" no podemos saberlo sin mas datos, disculpa si parezco algor rudo, pero no somos adivinos. Para saber por que no funciona, necesitamos saber exactamente cual es el error que te da, ¿es error de sintaxis?, ¿o acaso es error de logica?, por lo tanto deber colocar cual es el error EXACTO que te marca, si es error de compilador, o es un error en el resultado, ademas debes colocar EXACTAMENTE el codigo tal como lo tienes, y la linea en que te esta marcando el error.

De esa manera se puede analizar y ver que estas haciendo mal, de otra forma, es solo adivinar.

Saludos :)

8
Power Builder / Re:Codigo Fuente De Un Sist. Inventario Y Facturacion
« en: Sábado 28 de Enero de 2012, 17:07 »
por favor puedes enviarme el programa a mi correo soy nuevo y quisiera que me ayudes con eso mi correo es: nehru_lex@hotmail.com

Bueno, me parece que no viste la fecha del mensaje, febrero de 2005, este mensaje tiene 7 años, y la persona ya no visita el foro, no creo que obtengas respuesta de el.

Hay que revisar siempre la fecha del mensaje antes de postear, no es correcto revivir hilos tan viejos.

Saludos :)

9
C# / Re:Grid Editable y actualizable con Linq
« en: Jueves 26 de Enero de 2012, 21:54 »
Lo que mencionas es posible de hacer, pero el codigo excede con mucho lo que seria una simple duda.

Sugiero que comiences con algo sencillo, diseña un grid primero, luego utiliza los eventos para hacerlo editable, y al final añade la funcionalidad poco a poco para actualizarlo mediante LINQ enlazado a datos.

Tambien puedes revisar la pagina de http://www.codeproject.com (en ingles), Ahi encontraras muchos ejemplos de codigo en diversos lenguajes de programacion, quizas encuentres algun codigo de grid, que sirva a lo que necesitas.

Saludos :)

10
C/C++ / Re:Leer Fichero
« en: Jueves 26 de Enero de 2012, 21:45 »
Primero que nada, seria bueno saber si el archvo de texto tiene un formato predeterminado, o sea, si los datos estas separados por espacios, por comas, o siguen algun otro tipo de secuencia, eso facilitaria mucho las cosas.

Ahora, si el contenido del archivo es completamente aleatorio, es decir, que los datos no tienen un formato predeterminado, eso lo dificulta un poco, aun asi, no es imposible.

Como yo lo veo, el algoritmo que podrias seguir en caso de que los datos no tengan un formato predeterminado es:

1. Leer el caracter.
2. Comprobar si el caracter leido es un numero del 0 al 9, un punto (.) o un signo de menos (-)
3. En caso afirmativo, almacenar ese numero/punto/signo en un arreglo de char, y regresar al paso 1.
4. En caso negativo, descartar el caracter, convertir lo que haya almacenado en el arreglo de char y regresar al paso 1.
4. Repetir los pasos del 1 al 4 hasta que hayas leido todo el archivo.

Espero que eso te de una mejor idea de lo que debes hacer.

Saludos :)

11
C/C++ / Re:[Problema] Imprimir un carácter escaneado en pantalla
« en: Domingo 22 de Enero de 2012, 23:29 »
El problema esta con scanf("%c",&symbol);, en algunas ocasiones scanf no funciona de manera adecuada, y ese es el problema al tratar de leer un caracter con scanf, lo mejor es utilizar fgets(), ademas necesitas limpiar el buffer con getchar() para que no te acarree porblemas, te dejo el codigo modificado para que te des una idea de como debe ser.

Código: [Seleccionar]
#include <cstdio>

void naturales (int n, char c[]);

void naturales (int n, char c[]){

int count, count2;

for(count=1; count<=n; count++){
printf("%d ", count);
for(count2=1; count2<=count; count2++){
printf("%c", c[0]);
}
printf("\n");
}
}

int main(){

int numero;
    // Leeremos el caracter como si fuera cadena,
    // ya que fgets agrega el caracter nulo
    // despues de leer.
char symbol[2];

printf("Introduzca un numero: ");
scanf("%d",&numero);
    // Limpiar el buffer despues de usar scanf
    // para que fgets funcione de manera correcta
    while (getchar() != '\n');
printf("Introduzca un caracter: ");
    fgets(symbol, 2, stdin);
//scanf("%c",&symbol);
//fflush(stdin);

printf("\n");

naturales(numero, symbol);

return 0;
}

Saludos :)

12
ASM (Ensamblador) / Re:SObre INstruccion JA
« en: Martes 10 de Enero de 2012, 20:15 »

y mi mayor problema es como esto se basa en las banderas CF y ZF?

Como dije en mi anterior mensaje, esto ya es un poco mas tecnico, de como funciona el lenguaje maquina o ensamblador, todo este tema es demasiado extenso como para explicartelo en unas cuantas lineas, tratare de resumirte lo importante respecto a las banderas CF y ZF.

Para empezar respecto a las banderas, el 0 se considera como falso, y el 1 coimo verdadero.

CF = Carry Flag, Bandera de acarreo, esta bandera cambia a 1 si hay acarreo (verdadero), 0 si no hay acarreo (falso).

ZF = Zero Flag, Bandera de cero, esta bandera cambia a 1 si el resultado de la operacion da cero (verdadero) o un valor diferente de cero (Falso).

Ahora cuando comparas dos valores, es como si hicieras una resta, entonces dependiendo del resultado de esa resta, las banderas cambiaran.

Regresando al ejemplo anterior, si por ejemplo comparas el 3 con el 2 y haces la resta (en binario):

11-10=01.

Como puedes ver, el resultado no produjo un acarreo (porque estamos restando un valor mayor a uno menor), por lo tanto el CF = 0

El resutado de la resta tampoco fue cero como puedes ver el resultado fue uno, por lo tanto ZF = 0

Esi significa que entonces el resultado es mayor que, y como puedes ver quedo perfectamente comprobado por las banderas CF = 0 Y ZF = 0.

Si comparas 2 y 2 obtienes:
10 - 10 = 00

En este caso, el reslutado no produjo un acarreo tampoco (porque estamos restando valores iguales), por lo tanto el CF = 0

Pero, el resutado de la resta en este caso fue cero,  por lo tanto ZF = 1

Entonces como puedes ver se determina que los numero son iguales cuando CF = 0 y ZF = 1, entonces el JA no funciona en este caso.

Bueno, es lo mejor que te puedo explicar sin extenderme demasiado, pero el resto de saltos (JAE, JE, etc) funciona de manera parecida.

Saludos :)


13
ASM (Ensamblador) / Re:SObre INstruccion JA
« en: Martes 10 de Enero de 2012, 18:15 »
Es simple JA es el nemonico de Jump if Above, que seria el equivalente a mayor que.

Se ocupa despues de hacer una comparacion, es decir, tu comparas dos valores (CMP) y si el valor del primer operando es mayor al segundo operando hace el salto a la etiqueta (direccion) indicada.

Ejemplo:
Código: [Seleccionar]
;Compara AX y BX
CMP AX, BX
;Si AX es mayor, salta a etiqueta1, si no sigue la ejecucion sin saltar
JA Etiqueta1
;Esto se ejecuta si no salta
ADD AX, 1
Etiqueta1:
ADD BX, 1

Es Facil ves? Ahora si necesitas ser mas tecnico te dire que cada ves que comparas, el registro de banderas (flag) cambia el valor de sus bits, dependiendo del resultado de la comparacion, entonces cuando haces JA lo que hace es comparar si el registro CF y el ZF son igual a cero para determinar si el numero es mayor.

Espero que con eso te quede mas claro como funciona.

Saludos :)

14
C/C++ / Re:Motrar La Densidad Mayor y Menor
« en: Viernes 16 de Diciembre de 2011, 19:56 »
Gracias Por Nada a los que vieron y no me ayudaron la verdad no los entiendo si lo ven es porque algo tienen que entender de c/c++ pero me parace que este foro no ayuda mucho hasta luego el programa lo termine con ayuda de un amigo el cual por culpa de ustedes lo moleste en sus vacaiones. GRACIAS POR NADA!!!!!!!

En este foro la ayuda es gratuita, asi que no puedes venir a exigir que se te ayude solo porque tienes un problema que te urge resolver.

La mayoria de los que ayudamos aqui trabajamos, y solo respondemos preguntas en nuestro tiempo libre.

En mi caso tengo en estos momentos una carga de trabajo bastante alta, y no me da tiempo de estar aportando mucho, en el caso de tu problema requeria dedicarle una hora por lo menos, para revisar codigo compilar, y publicar una respuesta.

Si quieres ayuda garantizada, pagale a alguien para que lo haga, y a esa persona si exigele si no te lo hace en un tiempo razonable.

No creas que porque es un foro de programacion estamos obligados a contestarte, la ayuda es un privilegio, no un derecho.

Por el tipo de codigo que publicas deduzco que eres estudiante, asi que solo te dire que cuando trabajes lo comprenderas, y veras que no es tan facil tener tiempo libre una vez que trabajas, y que tampoco tienes obligacion en contestar puesto que no recibes dinero a cambio, si acaso a veces las gracias nada mas, y digo a veces, porque la mayoria de veces les contestas sus dudas y ni las gracias te dan, como si fuera nuestra obligacion contestar y dar una respuesta.

Solo recuerdalo la proxima vez que publiques una duda, si es que lo llegas a hacer.

Saludos :)

15
C# / Re:creacion de dll
« en: Martes 6 de Diciembre de 2011, 03:49 »
Publicaste tu codigo, pero me queda la pregunta ¿cual es tu duda en este caso? ¿te marca algun error? ¿o que problema tienes con esto?

16
C# / Re:creacion de dll
« en: Domingo 4 de Diciembre de 2011, 21:38 »
Hola Picyo, disculpa por no haber contestado antes, pero no he entrado al foro por causa de mi trabajo.

Bueno, revisando tu codigo, te dire que tiene los siguientes errores:

1. En el primer bloque te falta cerrar una llave, tienes 3 llaves "{", pero solo dos "}", agrega la que te falta

2. El nombre de tu namespace esta equivocado, en el primer bloque es Clases_propias y en el segundo bloque ClasesPropias, debe ser igual en los dos bloques, ya sea que corrijas el primero o el segundo, en los dos se debe escribir exactamente igual, respetando guiones, mayuscula y minusculas.

3. En el segundo bloque, la definicion y asignacion de tu variable miembro se encuentran fuera de la clase, la definicion debe ir dentro de la clase, y la asignacion dentro de un metodo, de hecho el error que mencionas lo dice claramente:

Citar
A namespace does not directly contain members such as fields or methods

Traducido:

Citar
Un namespace no contiene directamente miembros como campos (las variables miembro se consideran campos) o metodos


O sea que tu codigo debe quedar asi:

Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ClasesPropias;

namespace UsoDeClasePropia
{
    // instanciar y declarar objeto de mi clase
    public partial class Form1 : Form
    {
        // Definicion de tu variable miembro Persona1
        // dentro de la clase Form1
        ClasePersona Persona1;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // Asignacion de tu variable Miembro
            // dentro del metodo Form1_Load
            Persona1 = new ClasePersona();

        }
    }
}

Saludos y suerte :)

17
Visual C++ / Re:Configurar VC para proyecto "limpio"
« en: Sábado 12 de Noviembre de 2011, 21:36 »
Hola Raul100.

Mira, desafortunadamente los archivos que mencionas son necesarios para el funcionamiento optimo del entorno de Visual Studio, y la mayoria no pueden ser eliminados completamente.

Por ejemplo, los .ilk son archivos de compilacion incremental, estos te ayudan para que cuando modifiques un proyecto y lo recompiles, la siguiente vez sea mas rapida la compilacion. En proyectos pequeños no notaras la diferencia, pero en proyectos grandes con decenas de archivos y miles de lineas de codigo si hay una gran diferencia en el tiempo que tarda la compilacion.

Los archivos .pdb son archivos que contienen la informacion de depuracion de tu programa, sin este archivo, no puedes usar la depuracion paso a paso (linea por linea) en tu codigo fuente.

Y asi cada archivo tiene su lugar e importancia.

A continuacion te dejo un enlace con los diferentes tipos de archivos creados por Visual Studio para que estes mas enterado de para que sirve cada archivo :)

http://msdn.microsoft.com/en-us/library/3awe4781%28v=vs.80%29.aspx

Como veras, la mayoria son necesarios, son creados automaticamente cada vez que compilas un proyecto, y pues desafortunadamente tendras que hacerte a la idea de que ahi estaran.

La buena noticia, es que si te preocupa el espacio, en caso de que quieras llevarte el proyecto de una a otra maquina de trabajo y que no sea tan grande todo lo que te llevas, te dire que en ese caso, puedes omitir esos archivos al copiarlos a otra maquina. Como mencione antes, al recompilar un proyecto, si esos archivos  no existen, visual estudio los volvera a crear desde un principio.

Al llevarte un proyecto de una maquina a otra, los unicos archvos indispensables que tendras que copiar son:

Archivos de solucion: .sln.

Archivos de proyecto: .vcproj, .vcxproj

Archvios de codigo fuente: .c, .cpp, .h

Archivos de recursos: .rc.

El resto puedes omitirlos al copiarlos como dije antes, ya que cuando recompiles en la maquina nueva, volveran a ser creados.

Saludos :)

18
C/C++ / Re:Problema con enunciado de un problema en C
« en: Lunes 10 de Octubre de 2011, 03:39 »
Hola lanset, bueno, lo que yo entiendo que te esta pidiendo el enunciado es que digas el total de datos que estan arriba del promedio, es decir, primero tienes que sacar el promedio de los datos de la lista, y despues deberas contar cuantos datos son mayor al promedio.

Ejemplo si los datos son 5, 6, 7

El promedio seria 6 ((5+6+7)/3).

El numero de datos mayor al promedio seria uno, o sea, el 7.

Bueno, asi es como yo entiendo el enunciado.

Saludos :)

19
C# / Re:ObjectDisposedException, dibujar en picturebox, herencia visual
« en: Martes 4 de Octubre de 2011, 16:09 »
Hola Sined99.

Si dices que tienes problemas porque se cierra el formulario, porque en lugar de cerrarlo, mejor solamente lo ocultas con el metodo Hide(), y cuando necesites mostrarlo, utiliza el metodo Show().

Puedes utilizar ademas el evento FormClosing que se lanza cuando se trata de cerrar el formulario, y ahi cancelar el cerrado y utilizar el Hide() ahi.

Saludos :)

20
Visual C++ / Re:datos en arreglo
« en: Viernes 30 de Septiembre de 2011, 10:22 »
No se hacen tareas :)

21
Visual C++ / Re: Codigo de Matriz Inversa y Método de Gauss
« en: Sábado 24 de Septiembre de 2011, 16:30 »
Citar
no rayes el código
, hay partes que no se entienden
En realidad el no lo rayo a proposito, si te fijas tambien aparece con letra inclinada en algunas partes, simplemente olvido encerrar el codigo, si no lo encierras, entonces los [ s] y los [ i] se convierten a subrayados e inclinados respectivamente.

Si te interesa el codigo, te lo dejo a continuacion correctamente encerrado.

Inversa de una Matriz
Código: [Seleccionar]
#include <iostream>
using namespace std;

int i,j, k, s;
float m1[1000][1000], coef, aux[1000], elemento;
     
int main()
{
cout << "ntBienvenido al Generador de Matrices Inversasn";
cout << "Por favor introduzca el tamaño de la matrizn";
cin >> k;

for (i=0;i<k;i++)
{
for (j=0;j<k;j++)
{
cout << "Ingrese el valor de [" <<i<<"]["<<j<<"]";
cin >> m1 [i][j];
}
}

for (i=0;i<k;i++)
for(j=k;j<2*k;j++)
{
if(i==(j-k))
m1[i][j]=1;
else
m1[i][j]=0;
}
//Iteraciones
for (s=0;s<k;s++)
{
elemento=m1[s][s];
for (j=0;j<2*k;j++)
m1[s][j]=m1[s][j]/elemento;

for(i=0;i<k;i++)
{
if (i==s)
;
else
{
coef= m1[i][s];
for (j=0;j<2*k;j++)
aux[j]=m1[s][j]*(coef*-1);
for (j=0;j<2*k;j++)
m1[i][j]=m1[i][j]+aux[j];
}
}
}
//Imprimir la matriz inversa

for (i=0;i<k;i++)
{
for(j=k;j<2*k;j++)
cout << "t"<<m1[i][j];
if (j==k)
cout <<"n";
}

}

Método de Gauss
Código: [Seleccionar]
#include <iostream>
using namespace std;

int i,j,k,l,s;
float m1[1000][1000], coef, aux[1000], elemento;
     
int main()
{
cout << "ntBienvenido al Solucionador de ecuaciones 2010n";
cout << "Por favor determine el numero de incognitas a resolver: ";
cin >> k;
l=k+1;

for (i=0;i<k;i++)
{
for (j=0;j<l;j++)
{
cout<<"nAhora introduzca los coeficientes de ["<<i<<"]["<<j<<"]";
cin >> m1 [i][j];
}
}

for (s=0;s<k;s++)
{
elemento=m1[s][s];
for (j=0;j<l;j++)
m1[s][j]=m1[s][j]/elemento;
for (i=0;i<k;i++)
{
if (i==s)
;
else
{
coef=m1[i][s];
for (j=0;j<l;j++)
aux[j]=m1[s][j]*(coef*-1);
for (j=0;j<l;j++)
m1[i][j]=m1[i][j]+aux[j];
}
}
}

//Imprimir las soluciones
for (i=0;i<k;i++)
{
cout << "t x ["<<i<<"] "<<m1[i][k] <<"n";
}

}

Saludos :)

22
C/C++ / Re:Violacion de segmento al modificar el contenido de un puntero
« en: Sábado 24 de Septiembre de 2011, 16:04 »
Hola sergio_, bienvenido al foro :)

Estas cometiendo el clasico error al trabajar con punteros, usar punteros sin inicializar.

Por si no lo sabias, un puntero es un tipo especial de variable que guarda direcciones de memoria, nada mas. Para poder utilizarlo sin problemas debemos decirle que guarde (apunte) una direccion de memoria libre. Esto se hace por medio de la funcion malloc (si trabajas con C) que se encuentra en la libreria stdlib.h o el operador new (si trabajas con C++). Cuando termines de utilizar el apuntador, debes liberar la memoria. Si usaste malloc debes usar free para liberar, y si usaste new debes usar delete. Si no le decimos que apunte a una direccion especifica, apuntara a una direccion al azar de la memoria, es por eso que obtienes un segfault, ya que tu puntero apunta a una direccion de memoria no valida y tratas de cambiar su contenido.

Hay otro error ademas de ese en tu codigo, estas definiendo tu variable buffer como un arreglo de char de 8, cuando en realidad tu cadena contiene 9 caracteres, ya que todas las cadenas contienen obligatoriamente el caracter nulo '\0' (aunque tu no lo veas) al finalizar la cadena, para indicar que es el fin de la cadena. Aunque al inicializar arreglos de char no es necesario colocar el tamaño del arreglo, ya que el compilador lo deduce automaticamente, bien pudiste haber escrito  char buffer[] = "hola com"; y el compilador automaticamente deduce que el tamaño del arreglo es de 9 caracteres. Si quieres especificar el tamaño de tu arreglo y despues asignarle el valor la forma de hacerlo es por medio de la funcion strncpy() que esta definida en la libreria string.h:

Código: [Seleccionar]
char buffer[9];
strncpy(buffer, "hola com", 9);

Te dejo un ejemplo de como debes inicializar correctamente los punteros:

Código: [Seleccionar]
#include <cstdio>
#include <cstdlib>
#include <cstring>

int main()
{
    char buffer[] = "hola com";

    // Utiliza malloc si trabajas con C
    //char* buffer2 = (char*) malloc(sizeof(char) * 9);
    char* buffer2 = new char[9];
    strncpy(buffer2, "hola com", 9);

    buffer[0]='a';
    buffer2[0] = 'a';

    //int* a = (int*) malloc(sizeof(int));
    int* a = new int();
    *a = 123;
    *a = 245;

    // Si utilizaste malloc, usa free para liberar
    //free(buffer2);
    //free(a);
    delete buffer2;
    delete a;


    return 0;
}

Saludos :)

23
C/C++ / Re:Problema con punteros el O.S. cierra el programa
« en: Lunes 19 de Septiembre de 2011, 00:12 »
Aunque seguramente sea muy tarde, dejo la solución a los problemas:


Nunca es tarde, a alguien mas le puede servir al informacion ;)

Por cierto, saludos brother :) y disculpa, no lei tu mensaje antes, si no te hubiera apoyado :P

24
C/C++ / Re:No encuentro mi error
« en: Domingo 18 de Septiembre de 2011, 20:49 »
Hola portirijillo.

El problema que tienes ocurre debido al redondeo de los valores de tipo float.

Desafortunadamente, las computadoras solo entienden digitos binarios enteros (0 y 1), para representar los numeros de tipo flotante se escoge una codificacion para reprensentar un numero por medio de un exponente y una mantisa, pero al hacer esta conversion, en muchos casos el numero equivalente obtenido no es exactamente el numero que queremos almacenar, siempre habra un error de redondeo.

Puedes comprobarlo tu mismo, imprimiendo el valor guardado y veras que a veces no coincide el valor capturado/calculado con el valor verdadero:

Código: [Seleccionar]
void captura(){
    float monto,pago,cambio=0;
    printf("Programa que calcula el cambio con monedas");
    printf("\nInserte el total a pagar >");
    scanf("%f",&monto);
    // Lo probe y en mi caso capture 4.63, pero guardo
    // 4.6300001144, como podras notar tu mismo con .10f
    printf("%.10f\n", monto);
    printf("Inserte el dinero recibido >");
    scanf("%f",&pago);
    printf("%.10f\n", pago);
    cambio=pago-monto;
    // al poner .10f notaras que el valor de cambio en
    // realidad es 5.3699998856 y no 5.37 como pensabas
    printf("Su cambio es %.10f",cambio);
    monedas(cambio);
}

Por desgracia, no hay forma de evitar ni de predecir este error en el redondeo utilizando valores de tipo flotante.

La solucion que se me ocurre que podrias emplear es separar los centavos de las pesos (o dolares, quetzales, euros o cualquiera que sea la moneda que utilices, ya que no dices de que pais eres, en mexico nuestra moneda es el peso, asi que por eso digo pesos ;)), y tratar los centavos como si fueran cantidades enteras y no flotantes, es decir, en lugar de decir 0.10 pesos, dirias y capturarias 10 centavos. Luego para las cantidades en pesos multiplicalas por 100, de esa forma trabajaras solo con centavos, o sea en el caso de 5 pesos serian 500 centavos, luego sumale los centavos, y utiliza variables y operaciones enteras, al trabajar con enteros no hay problemas de redondeo, y obtendrias la cantidad en monedas exacta.

Tomando tu ejemplo, dirias algo como "deme la cantidad en pesos" y capturas 4, luego "dame la cantidad en centavos" y capturarias 63, luego multiplicas 4*100, da 400 y le sumas los centavos, da 463, y entonces haces las operaciones utilizando 463 en lugar de 4.63, obviamente restarias 25, 10, 5 y 1 en lugar de 0.25, 0.10, 0.5 y 0.1, no se si me di a entender.

Saludos y suerte :)

25
SQL Server / Re:Consulta SQL
« en: Viernes 9 de Septiembre de 2011, 01:04 »
Tienes que hacer una consulta "self-join", es decir, unir la tabla (join) consigo misma como si fueran dos tablas diferentes, por medio de aliases (as). Te dejo un ejemplo de como seria tomando como ejemplo la tabla que mencionas:

Código: [Seleccionar]
select c1.cliente from compra as c1 inner join compra as c2
on c1.cliente = c2.cliente
where c1.producto = 'manzanas' and c2.producto = 'peras';

Saludos :)

Páginas: [1] 2 3 ... 28