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

#21
Programación C/C++ / Re: error al compilar
18 Mayo 2012, 17:25 PM
 Al parecer estas tratando de definir la funcion dentro de otra, eso no puede suceder, debes colocar todo el codigo una fuera de la otra:


#include <iostream>
#include <unistd.h>

char cookie[8];
int numbercookies=1;
bool bucle=true;

void funcion(void);

int main()
{
     while(bucle==true) funcion();
     return 0;
}

void funcion(void)
{
    cout << "I WANT A COOKIE\t" << endl;
    numbercookies++;
    cin >> cookie;
    if (cookie=="cookie") numbercookies--;

    else ;

    if (numbercookies==0) bucle=false;


    sleep(2);
}
#22
 De acuerdo a lo que dices, he corregido errores potenciales del codigo, aunque no estoy conforme porque no se ajusta a especificaciones estandar.

No lo he probado pero creo que esta bien, sin embargo observa las correcciones que hice.


#include <conio.h>
#include <stdio.h>
#define TAM 3

typedef struct
{
  int tipo;
  float produccion;
  float valor;
}t_parcela;

void ver_archivo(FILE*);
void cargar_matriz(t_parcela*[][TAM]);

void main()
{
  int i,j;
  FILE*pf;
  t_parcela parcela[TAM][TAM];
  cargar_matriz(parcela);
  pf=fopen("campo.dat","w+b");
  {
     for(i=0;i<TAM;i++)
        for(j=0;j<TAM;j++)
        {
           if(parcela[i][j].produccion!=0 && parcela[i][j].tipo!=99)
           {
              fseek(pf,((i*TAM)+j)*sizeof(t_parcela),SEEK_SET);
              fwrite(&parcela[i][j],sizeof(parcela),1,pf);
           }
        }
  }
  fclose(pf);
  ver_archivo(pf);
  getch();
}

void cargar_matriz(t_parcela p[TAM][TAM])
{
  int i,j;
  for(i=0;i<TAM;i++)
     for(j=0;j<TAM;j++)
        {
            puts("Escriba el tipo de grano(entero de 1 a 5)");
            scanf("%d",&p[i][j].tipo);
            puts("Escriba la produccion obtenida");
            scanf("%f",&p[i][j].produccion);
            puts("Escriba el valor de la produccion");
            scanf("%f",&p[i][j].valor);
        }
}

void ver_archivo(FILE*pf)
{
  t_parcela parcela;
        pf=fopen("campo.dat","rb");
        fread(&parcela,sizeof(t_parcela),1,pf);
        while(!feof(pf))
        {
           printf("%d",parcela.tipo);
           printf("%f",parcela.produccion);
           printf("%f",parcela.valor);
           fread(&parcela,sizeof(t_parcela),1,pf);
        }
        fclose(pf);
}


Antes te sugiero que modifiques las salidas de los printf() agregando espacios como saltos de lineas para que puedas leer mejor los resultados.

Saludos
#23
 Buena iniciativa. Imagino que tambien lo haces para afianzar tus conocimientos, por lo tanto cuando tenga tiempo voy a analizar tus exposiciones y comentar cualquier errata si es que encuentro alguna.

Saludos
#24
 El desensamblador IDA tiene una herramienta para obtener un codigo fuente equivalente de un ejecutable, aun asi es muy basico, eso creo. Segun tengo entendido, para obtener un codigo fuente de cualquier ejecutable primero tendras que comprender que es lo que hace el compilador ante determinadas sentencias. Osea que te veras en la tarea de aprender assembly, C/C++, las API de windows y quisas una que otra cosa mas. Lo que quieres hacer es la tarea comun de los analistas de malware.

En alguna parte del servidor de Ricardo Narvaja hay una serie de archivos .doc donde realiza el analisis del codigo obtenido en ensamblador a partir de codigos en C.

No se mucho sobre el tema, pero alguna vez tuve la curiosidad de aprender a reversar.

Saludos
#25
 No puedes hacer que una variable este vacia.. por convencion, a la hora de programar es comun que el valor NULL, cero,'\0' o cualquier caracter de escape, EOF, o -1 sean los que señalizen algun estado o suceso
#27
 El codigo seria


void instruccion( string cad, string instruct, int *n , int *k )

{

   cout<<"INSTRUCCION: ";



   for( ; isspace(cad[n])==0 && cad[n]!=59 && cad[n];  ++(*n),++(*k) )  
   {

       instruct.insert( *k, cad, *n, 1 );

       cout<<cad[n];

   }

       cout<<endl;

}


En concepto, la unica diferencia seria lo que pasas como argumento en cada llamada a la funcion. Sin embargo, en realidad dentro del sistema suceden procesos totalmente diferentes. Es un tema de arquitectura de computadores

Saludos
#28
 El error se encuentra en la palabra "instruccion". Tanto el nombre de la variable como el de la funcion son iguales y esto no debe ser asi. Cambiandole el nombre al parametro String instruccion creo que ya lo tendras solucionado.

Cita de: Kasswed en 15 Mayo 2012, 02:27 AM
¿Qué es lo que quieres conseguir con la función instruccion?

Si mal no entiendo, recorre el primer string y almacena cada caracter en el segundo y a la vez lo imprime en pantalla. Todo eso siempre y cuando no sea un espacio, un punto y coma ni el caracter de final de cadena '\0'. Pero no le veo utilidad alguna en que tenga que recibir un puntero a los indices de cada string.

Saludos
#29
 La idea acerca del uso de funciones es la portabilidad en la mayor medida de lo posible. En este caso las funciones que muestras dependen estrictamente de seis instancias de una clase llamada vector. Por otro lado, noto que el dominio de valores posibles para index es mayor al realmente valido en func_vec_add y func_vec_list.

Con respecto a las librerias, para el ejemplo que muestras no necesitas las librerias string, fstream.h y windows.h

Solo son pequeños detalles que yo no dejaria pasar por alto. Lejos de eso, interesante ilustracion.

Saludos
#30
 El ANSI/ISO C Standard ("C99") especifica que siempre main() debe retornar int. Esto permite que un dispositivo u otro software pueda obtener informacion acerca de como termina un programa en C, de lo contrario se ignora y listo.

Puedes tambien escribir el main() sin anteponerle el int y el compilador tiene que entender que esta implicito, osea que estas obligado a retornar un valor entero desde main().