Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

12/07/2007 #1


programación en C
Hola a todo el foro. Necesito ayuda con respecto a un problema q tengo en un pequeño programa de C en el cual aparece un error illegal use of floating point in function main y ya he buscado por internet pero no puedo solucionarlo. El programa se basa en cargar una matriz por punteros, pasar la matriz a un vector, ordenar el vector, pasar el vector ordenado a la matriz e imprimirla.
Desde ya muchas gracias.
El programa es el siguiente:


#include<stdio.h>
#include<conio.h>

void main (void)
{ int i,j,k,l,m;
float a[3][3][2],b[18],t;
l=0;
for(i=0;i<3;++i)
for(j=0;j<3;++j)
for(k=0;k<2;++k)
{ printf(" \n a[%d][%d][%d]: ",i,j,k);
scanf("%f",(a+l));
b[l]= *(a+l); // aca es donde aparece el error
++l;
}
do
{ m=0;
for(i=0;i<l-1;++i)
if(b[i]<b[i+1])
{ t=*(b+i);
*(b+i)=*(b+i+1);
*(b+i+1)=t;
m=1;
}
} while(m!=0);
m=0;
for(i=0;i<3;++i)
for(j=0;j<3;++j)
for(k=0;k<2;++k)
{ a[i][j][k]=*(b+m);
++m;
}
for(i=0;i<3;++i)
for(j=0,k=0;j<3;++j)
printf("%f",a[i][j][k]);
}
12/07/2007 #2


crequetengolarepuesta
no sera un problemas de librerias ????, decime si el error es en tiempo de ejecucion en tiempo de compilacion responde al Mejor leo las Normas de Participación@forosdeelectronica.com a Gabriel
13/07/2007 #3


Hace muchos años que no uso el C pero creo que el error puede estar aquí:
scanf("%f",&(a+l));

es decir, prueba a poner un "&" para indicar la dirección de memoria de (a+l)

Salu2
22/07/2007 #4

Avatar de Ardogan

Van algunos comentarios respecto al código que escribiste:

for(i=0;i<3;++i)
for(j=0;j<3;++j)
for(k=0;k<2;++k)

en estos for yo por las dudas pondria i++, j++ y k++ en vez de ++i, ++j y ++k. Creo que puede llegar a haber lío porque la diferencia entre i++ y ++i es que con i++ primero se toma el valor de la variable i, y después se la incremente; mientras que con ++i primero se incremente el valor de i y después se toma el valor (ya incrementado).

Pero sí, el quilombo está acá:
scanf("%f",(a+l));

porque definiste a como una matriz y l como un entero.
Estás sumando peras con manzanas. Por ahí el compilador lo toma, pero no es lo más recomendable, yo utilizaría en lugar de (a+l) lo siguiente:
&a[i][j][k]
Entiendo que lo querés hacer es cargar los valores de la matriz, y a la vez ir cargando el vector.

En donde está:

b[l]= *(a+l);

yo utilizaría:

b[i+j+k]= a[i][j][k];

Y hasta te olvidás de usar la variable l; y la sentencia l++.

Las instrucciones que siguen no las ví, ojalá te sirva.
Saludos
08/09/2010 #5

Avatar de Meliklos

Respuesta: programación en C
el problema es que "b" no esta declarado o inicializado en ningun lado!!
que es b???cuanto vale???

que tipo de variable es?? no lo dice en ningun lado...

aprovecho que estamos en el tema de "Programación en C" y acudo a la inteligencia y conocimientos de ustedes compañeros mios, para saber si de los que saben usar C
tienen idea de como copiar unas lineas de un archivo y pegarlas en otro creado...


tengo confusion....
08/09/2010 #6
Moderador

Avatar de Chico3001

Respuesta: programación en C
Seleccionas el texto a copiar y presionas simultaneamente CTRL y C
Despues te mueves al archivo donde lo quieres pegar y presionas simultaneamente CTRL y V

simple...
08/09/2010 #7

Avatar de Meliklos

Respuesta: programación en C
no pancho jejeje....
estoy haciendo un programa que haga lo siguiente:
tengo 64 archivos de capturas de un instrumento, y en cada archivo hay como 210 lineas con mediciones de parámetros... de esas 210, yo solo quiero 3 lineas...

la idea es copiar esas tres lineas de cada uno de los 64 archivos y pegarlos en un archivo nuevo creado, se supone que recibo las 64 capturas y ésto lo hace automático...

this is the cuestions!
08/09/2010 #8
Moderador

Avatar de Chico3001

Respuesta: programación en C
Ah... ps lo que tienes que hacer es usar fopen(), fclose(), fputs() y fread()
08/09/2010 #9

Avatar de Meliklos

Respuesta: programación en C
mmm...hasta ahora tengo hecho el menu y los bloques de las funciones...jeje esta preparadito para poner los comandos jejeje

bueno, tengo la parte de crear el archivo (fopen, fclose)
y lo de fread se como hacerlo...bueno, maso...porque, como elijo la linea especifica que quiero copiar???
porque supone que de las 210 lineas quiero copiar (por decir algo...) la 24, 69 y 136...???

y creo que el fputs funciona con un getc() que seria algo como un scanf, pero no voy a necesitar escribir nada...
08/09/2010 #10
Moderador

Avatar de Chico3001

Respuesta: programación en C
Me encontre este ejemplo:

Código PHP:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    
FILE *nombre;
    
int c;

    
nombre fopen("Prueba.htm""r");

    if (
nombre == NULL)
    {
        
printf("El archivo no existe \n");
        exit (
EXIT_FAILURE);
    }
    else
    {
        do
        {
            
getc(nombre); /* Obtiene un caracter del archivo */
            
putchar(c); /* Lo despliega en pantalla y continua... */
        
}
        while (
!= EOF); /* hasta encontrar EOF (el final del archivo)*/
    
}
    
fclose(nombre);

    return 
EXIT_SUCCESS;

http://www.modelo.edu.mx/univ/virtec...ac/clecesc.htm
08/09/2010 #11

Avatar de Meliklos

Respuesta: programación en C
igualito, igualito!!! pero como me tomada 1 caracter nada mas.....


y el link me vino al pelo!

por si te interesa un poquin, una de las 64 capturas es ésta, para el valor 000000...
la primera columna son frecuencias que van de 1GHz hasta 1,6GHz

y yo quiero la linea de 1.2GHz, 1.3GHz y 1.4GHz (o las mas proximas)...
y copiarlas a otro archivo que tambien lo crea el programa y armar tipo columnas para cada frecuencia segun los diferentes valores de bits...

ufff..... en eso ando...
Archivos Adjuntos
Tipo de Archivo: txt 000000.txt (30,5 KB (Kilobytes), 6 visitas)
08/09/2010 #12

Avatar de Eduardo

Respuesta: programación en C
Meliklos dijo: Ver Mensaje
...bueno, tengo la parte de crear el archivo (fopen, fclose)
y lo de fread se como hacerlo...bueno, maso...porque, como elijo la linea especifica que quiero copiar???
porque supone que de las 210 lineas quiero copiar (por decir algo...) la 24, 69 y 136...???
Necesitás conocer el formato del archivo.
Si las líneas son de longitud fija NL , te posicionás con fseek(streamptr,NL*Linea,SEEK_SET).
Pero si es un archivo de texto común, la única forma es ir leyendo desde el principio contando caracteres de fin de línea, que también pueden variar según el formato.
08/09/2010 #13

Avatar de Dr. Zoidberg

Respuesta: programación en C
Meliklos dijo: Ver Mensaje
estoy haciendo un programa que haga lo siguiente:
tengo 64 archivos de capturas de un instrumento, y en cada archivo hay como 210 lineas con mediciones de parámetros... de esas 210, yo solo quiero 3 lineas...
la idea es copiar esas tres lineas de cada uno de los 64 archivos y pegarlos en un archivo nuevo creado, se supone que recibo las 64 capturas y ésto lo hace automático...
Lo que necesitas hacer es muuuuyyyyy simple hacerlo con AWK.
Acá tenes algo para leer: http://es.wikipedia.org/wiki/AWK
Este lenguaje tiene la misma sintaxis del C, es interpretado, lo podés bajar para Windows (es GNU) y está específicamente preparado para hacer lo que necesitas.
Yo usualmente proceso unos 60 archivos de log de servidores de impresión, poniendo y sacando campos, y tengo que generar otro archivo delimitado por comas para que lo importen en EXCEL...creo que son 25 líneas de AWK

Edito:
ACá te pego el código para que lo veas...
Código:
BEGIN {
    FS=","
}
{
# Salteamos los dos primeros registros por que tienen basura
if( NR > 2) {
    # Estos campos hay que enderezarlos por que estan luego del titulo
    # que puede tener comas adentro
    isduplex = 12
    filesize = 14
    pchost = 7
    # Buscamos solo el titulo que esta entre comillas
    comilla = index( $0, "\"" )
    restolinea = substr( $0, comilla + 1 )
    comilla = index(restolinea, "\"")
    titulodoc = substr( restolinea, 1, comilla - 1 )
    # Ahora contamos cuantas comas tiene adentro
    tmp = titulodoc
    ncomas = 0
    poscoma = index( tmp, "," )
    while( poscoma != 0 ) {
        ncomas++
        tmp = substr( tmp, poscoma + 1 )
        poscoma = index( tmp, "," )
        }
    # Y corregimos la posicion de los campos
    isduplex += ncomas
    filesize += ncomas
    pchost += ncomas
    # Le quitamos el nombre de dominio a las PC que lo tengan
    nomhost = $pchost
    ppunto = index( $pchost, "." )
    if( ppunto != 0 ) {
        nomhost = substr( $pchost, 1, ppunto - 1 )
        }
    hoja="2"
    if( $isduplex == "NOT DUPLEX" ) {
        hoja = "1"
        }
    tamanio = substr( $filesize, 1, length($filesize) - 2 )
    print $1 "," toupper( nomhost ) "," $3 "," $4 ",\"" titulodoc "\"," hoja "," tamanio
    }
}
14/09/2010 #14

Avatar de Meliklos

Respuesta: programación en C
muuuchas gracias chicos por sus aportes!!!
todos se tuvieron en cuenta!
pero me alegra decirles que ya lo resolvi!!

y en c no mas...asi que si a alguien le interesa subo esa parte del código...aun me queda por hacer!!

Código:
/* Recopila los datos de cada par*metro para determinadas frecuencias
preseteadas y guarda los valores, seg£n la frecuencia
en un archivo direfente.
*/

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

void
void main(void)
{
    char cadena[2014];
    FILE *f=fopen("c:\\tc\\fase\\000000.s2p","r");
    FILE *tabla1=fopen("c:\\tc\\tabla1.txt","w");
    FILE *tabla2=fopen("c:\\tc\\tabla2.txt","w");
    FILE *tabla3=fopen("c:\\tc\\tabla3.txt","w");
    unsigned long frec;
    clrscr();
    if(f==NULL){
        perror("El archivo no existe\n");
        return;
    }
    while(!feof(f)){
        fgets(cadena, 3000,f);
        sscanf(cadena,"%lu",&frec);
        if(frec==1201000000)fputs(cadena,tabla1);
        if(frec==1300000000)fputs(cadena,tabla2);
        if(frec==1399000000)fputs(cadena,tabla3);
    }
    /*while(fgets(cadena,2014,f)!=NULL){
        if(){
            fputs(cadena,tabla);
        }
    }*/
    fclose(f);
    fclose(tabla1);
    fclose(tabla2);
    fclose(tabla3);
}
éste código tiene que ver con uno de los archivos que subi en el post #11, tengo muchas lineas que cada una representa valores de parametros en cierta frecuencia (la frecuencia es la primera columna) y elijo las que quiero y las guardo en archivos diferentes, segun la frecuencia!

saludos!!! y gracias
16/09/2010 #15

Avatar de Meliklos

Respuesta: programación en C

nuevamente con dificultades y no encuentor la solución....

ezevalla me tiro una ayuda con awk, pero lo necesito en c y me cuesta relacionar los códigos...

todavia no logro conseguir la parte que me permita ir abriendo archivo por archivo y copiar lo que necesito....la parte de abrir es el problema....

se me ocurre hacer un bucle...

int i;
..
for(i=0;i<64;i++){
f=fopen("c:\\"i".txt","r");

o: f=fopen("c:\\%d.txt",i);

pero no puedo escribirlo asi...tendria que ser parecido...pero he probado muchisimas formas (ovbiamente leyendo las librerias, otros comandos,etc...) pero no sale....
16/09/2010 #16

Avatar de Eduardo

Respuesta: programación en C
Meliklos dijo: Ver Mensaje
...
todavia no logro conseguir la parte que me permita ir abriendo archivo por archivo y copiar lo que necesito....la parte de abrir es el problema....
Los nombres de los archivos los vas leyendo con findfirst y findnext.
findfirst acepta búsquedas con caracteres * y ?

Este es un ejemplo de un Help.

Código:
/* findfirst and findnext example */

#include <stdio.h>
#include <dir.h>

int main(void)
{
   struct ffblk ffblk;
   int done;
   printf("Directory listing of *.*\n");
   done = findfirst("*.*",&ffblk,0);
   while (!done) 
   {
      printf("  %s\n", ffblk.ff_name);
      done = findnext(&ffblk);
   }

   return 0;
}
16/09/2010 #17

Avatar de Meliklos

Respuesta: programación en C
justamente ese mismo ejemplo habia probado y lo descarte porque crei que no podias especificar el directorio...solo me mostraba los archivos que estaban donde ejecuto el programa, pero me di cuenta que se podia especificar..... colgueti!!

ahora estoy ensamblando un poco con ésto que me decis!
16/09/2010 #18

Avatar de Eduardo

Respuesta: programación en C
Respecto a esto:

Meliklos dijo: Ver Mensaje
se me ocurre hacer un bucle...

int i;
..
for(i=0;i<64;i++){
f=fopen("c:\\"i".txt","r");

o: f=fopen("c:\\%d.txt",i);
Para que eso funcione tiene que ser así:

Código:
char nombre[0x80]  ;
......
for(i=0;i<64;i++){
    sprintf(nombre,"c:\\%d.txt",i);
    f=fopen(nombre,"r");
16/09/2010 #19

Avatar de Meliklos

Respuesta: programación en C
edu, sigo los pasos al pie de la letra, pero lo loco es que solo me copia las lineas del archivo nº 3....ni registra los otros...
16/09/2010 #20

Avatar de Eduardo

Respuesta: programación en C
Meliklos dijo: Ver Mensaje
edu, sigo los pasos al pie de la letra, pero lo loco es que solo me copia las lineas del archivo nº 3....ni registra los otros...
Podes mostrar el código y un listado del directorio ?
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.