Autor Tema: Ayuda con este código en C DOS  (Leído 9155 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Ayuda con este código en C DOS
« en: 17 de Julio de 2008, 17:21:45 »
Hola:

Tengo un código desde hace años atrás, nunca lo he podido hacer funcionar hasta anoche, que
declaré unas variables y medio ejecutó. Pero me dice algo de una indirección, creo que es un array
que debo declarar, pero estoy muy confundido. Si alguien gusta probar y ayudarme, se lo agradezco.

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

//#define ma 10
//#define ra 24
//#define mb 10
//#define rb 24

/***********************************************************
*   Prototipo de funciones                                 *
***********************************************************/
void obteserie(void);

int main()
{
 obteserie();
 return 0;
}

//Recordatorio:
//rc resistencia calcular, ctr counter, r1 resistencia uno,
//valor, multiplo, r2 resistencia dos, rs resistencia serie,
//porcentaje, e, rt resistencia paralelo.
void obteserie(void)
{
int ma, ra, mb, rb;
int ctr;
float valor, multiplo, rc;
float  r1, r2, rs, e, rt;
const porcentaje = 25;

printf("\nIntroduzca el valor deseado en Ohms\n");
scanf("%f", &rc);
clrscr();
ctr=0;
for(ma=0; ma<10; ma++)
{
for(ra=0; ra<24; ra++)
{
for(mb=0; mb<10; mb++)
{
for(rb=0; rb<24; rb++)
{

//// <==========Aquí r1 y r2 me da error de indirección. es como un arreglo o algo así.

r1(valor[ra]*multiplo[ma]);
r2(valor[rb]*multiplo[mb]);

rs=r1+r2; // Resistencia en serie
if(r1<=r2&&rc<=rs+(rs*porcentaje/100)&&rc>=
  rs-(rs*porcentaje/100))
{
if((rc!=r1) && (rc!=r2))
{
e=((rs-rc)/rc)*100;
if(e<=porcentaje)
{
printf("%.3f + %.3f =

%.4f %.4f %% error.\n",
  r1, r2, rs, e);
ctr++;
}
}
}
rt=((r1 * r2)/(r1 + r2)); // Resistencia en

paralelo
if(r1<=r2&&rc<=rt+(rt*porcentaje/100)&&rc>=
  rt-(rt*porcentaje/100))
{
if((rc != r1) && (rc != r2))
{
e=((rt - rc)/rc)*100;
if(e<=porcentaje)
{
printf("%.3f || %.3f =

%.4f %.4f %% error\n",
  r1, r2, rt, e);
ctr++;
}
}
}
if(ctr >= 24)
{
printf("\nMAS VALORES -");
ctr=0;
getch();
}
}
}
}
}

getch();
clrscr();
};


Es parte de otro programa más grande, que luego quiero pasarlo a VB.
Y dejar este, en este subforo.

Bye('_')...
« Última modificación: 17 de Julio de 2008, 17:30:47 por IAO »
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Ayuda con este código en C DOS
« Respuesta #1 en: 17 de Julio de 2008, 18:39:20 »
Esto es lo que parece no tener mucho sentido:

r1(valor[ra]*multiplo[ma]);
r2(valor[rb]*multiplo[mb]);

¿deberían ser asignaciones a flotante?
De ser así,"valor" y "multiplo" no están declarados como arrays,sin embargo,esas dos sentencias los tratan como tales.

Aparte,la asignación tendría que ser así:


r1 = (valor[ra]*multiplo[ma]);
r2 = (valor[rb]*multiplo[mb]);

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Ayuda con este código en C DOS
« Respuesta #2 en: 17 de Julio de 2008, 21:17:27 »
Hola:

Gracias, sr. Modulay, voy a probar a ver que tal.. Luego te comento

Bye('_')..
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Ayuda con este código en C DOS
« Respuesta #3 en: 18 de Julio de 2008, 01:23:08 »
Sería más sencillo si comentaras qué hace el programa (o qué se supone que debe hacer) :).

Creo que podría funcionar cambiando esto:

Código: C
  1. r1(valor[ra]*multiplo[ma]);
  2. r2(valor[rb]*multiplo[mb]);

por esto:

Código: C
  1. r1 = ra * ma;
  2. r2 = rb * mb;
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Ayuda con este código en C DOS
« Respuesta #4 en: 18 de Julio de 2008, 20:33:37 »
Hola:

Disculpen la tardanza hoy he estado muy ocupado.
Ya logré compilar el código, pero me dió error de overflow.

Según su autor Virgilio Gómez Negrete coloco lo que el escribió.
Citar
Se entiende la imposibilidad de fabricar resistencias de todos los valores posibles, en lugar de ésto se recurre a una serie de valores predeterminados definidos por la Asociación de Industrias de Electrónica (EIA por sus siglas en inglés), los rangos van desde E6 hasta E96, sin embargo el más utilizado es el E24, cuyos valores básicos son: 1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.7, 3.0, 3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, y 9.1. Los diferentes valores de resistencia se obtienen de submúltiplos y múltiplos de éstos valores. (24 valores.)

La última opción de cálculo de nuestro programa nos permite obtener un valor de resistencia especificado utilizando una combinación de dos resistencias del rango E24 en serie y paralelo con una precisión menor de 0.25%.

Nunca en años he podido hacer esto y lo tengo desde varios años atras.

Así lo puse, según comentario que hizo sr. Modulay, pero compila más no culmina como debiera.
Es parte de un programa que se llama "OhmWatts", de dicho autor.

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

#define maxir 10
#define raxir 24

/***********************************************************
*   Prototipo de funciones                                 *
***********************************************************/
void obteserie(void);

int main()
{
 obteserie();
 return 0;
}

void obteserie(void)
{
int ma, ra, mb, rb;
int ctr;

float multiplo[maxir];
float valor[raxir];

float  r1, r2, rs, e, rt, rc;
const porcentaje = 25;

printf("\nIntroduzca el valor deseado en Ohms\n");
scanf("%f", &rc);
clrscr();
ctr=0;
for(ma=0; ma<10; ma++)
{
for(ra=0; ra<24; ra++)
{
for(mb=0; mb<10; mb++)
{
for(rb=0; rb<24; rb++)
{

r1=(valor[ra]*multiplo[ma]);
r2=(valor[rb]*multiplo[mb]);

rs=r1+r2; // Resistencia en serie
if(r1<=r2&&rc<=rs+(rs*porcentaje/100)&&rc>=
  rs-(rs*porcentaje/100))

..............Igual a lo del post de arriba.

Todos los int, float, const o variables se las he puesto yo hace dos dias atrás para que pudiera medio compilar. jejeje
Bueno puede que no sea tan importante, pero es el tipo de cosas que te bloquean y no puedes continuar..

Bye('_')..
« Última modificación: 18 de Julio de 2008, 20:42:52 por IAO »
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Ayuda con este código en C DOS
« Respuesta #5 en: 19 de Julio de 2008, 03:11:47 »
Si no te funcionó, ¿por qué no has probado con lo que puse :??
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Ayuda con este código en C DOS
« Respuesta #6 en: 19 de Julio de 2008, 03:37:17 »
Overflow???

Pero qué es lo que se overflowea?? :)

Si pasteas el error que te da quizá localicemos el fallo

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Ayuda con este código en C DOS
« Respuesta #7 en: 20 de Julio de 2008, 12:01:02 »
Holaaa:

Sr. Geo:
 :D :D :D Si lo probe y me da un error domain igual.
Solo que por un comentario del sr. Modulay me da la impresión que era más correcto por algo que dice el autor
de dicho programa. Pero no omití su propuesta, disculpe pero si lo intenté. :) Gracias.

Aqui les dejo el link original de todo eso. Logre hacer funcionar todo menos esta última parte.
http://www.modelo.edu.mx/univ/virtech/electro/circui01.htm

Este pequeño programa me ayudó a entender un poco el lenguaje C y me ayudó también a abandonarlo. :D :D

Aquí les dejo la imagen del error. La segunda foto es con la propuesta del Sr. Geo.


Pero de verdad, me averguenza tener que gastar el tiempo de ustedes en tan insignificante problema.

Bye('_')....
« Última modificación: 20 de Julio de 2008, 12:21:25 por IAO »
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Ayuda con este código en C DOS
« Respuesta #8 en: 20 de Julio de 2008, 12:08:20 »
Creo que se te olvidó poner la imagen.
El link que pusiste del señor Negrete tampoco me funciona :(

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Ayuda con este código en C DOS
« Respuesta #9 en: 20 de Julio de 2008, 12:25:37 »
Disculpen es que me traje una portatil con windows vista y me tiene loco.
Este sistemita operativo me desespera un poco.

Aqui les dejo el programa modificado, no ejecuten la opción 14, ya que les dará un error.

Pueden ver arriba ya corregí como pude los link.

Bye('_').
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Ayuda con este código en C DOS
« Respuesta #10 en: 20 de Julio de 2008, 12:32:19 »
Qué compilador se necesita?
Sube el ejecutable si puedes.
El primer link sigue sin funcionarme

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Ayuda con este código en C DOS
« Respuesta #11 en: 20 de Julio de 2008, 12:50:52 »
He ojeado el código y parece que no tienes muy claro el tema de los arrays.
Has vuelto a dejar las variables "valor" y "multiplo" declaradas como tipo de dato simple (tipo flotante):

float valor, multiplo;

...sin embargo, después las usas como si fueran arrays (un array es un tipo compuesto...compuesto por varios elementos de tipo simple en este caso):

r1 = (valor[ra]*multiplo[ma]);

Viendo la rutina que escribe sobre las variables "r1" y "r2", deduzco que "valor" y "multiplo" deberían ser arrays, ya que de ser de tipo simple,se volcarían sobre "r1" y "r2" los mismos valores en todas las iteraciones de los bucles,lo cual sería redundante:

for(......)
   {
   r1 = valor*multiplo;
   .....
   .....
   }

Es más,tal y como está el código que has subido no debería ni compilar.

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Ayuda con este código en C DOS
« Respuesta #12 en: 20 de Julio de 2008, 12:51:51 »
Hola:

Yo uso el BorlandC 3.1. Pero según corre con cualquier compilador, por lo del standart C, o ansi C algo así es la yuca que leí.

Que extraño a mi me agarro el link así.
Trata de copiarlo en la barra de direcciones del explorardor. Es una buena página para principiantes.

Si te subo el executable. Pero este no tiene la última modificación, porque la realicé
en un módulo aparte que también te lo subo, no tengo problemas.

Luego se puede borrar para no saturar el foro.

Bye('_')

"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Ayuda con este código en C DOS
« Respuesta #13 en: 20 de Julio de 2008, 12:55:24 »
Si modulay:

En el que tiene el .ZIP, está el ohm-e24.c, que allí si tiene declarado los array.
Lo puse aparte, para no tener que buscar entre tanto código, y llegar al sitio exacto sin tanto
desplazamiento en el código.

Bye('_').
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Ayuda con este código en C DOS
« Respuesta #14 en: 20 de Julio de 2008, 13:06:36 »


Prueba con este link a ver que tal.
En la parte de Circuitos de corriente contínua

Pienso, que r1 y r2 podrían ser funciones que no están mostradas y por eso también falla.
El link dice que se puede descargar el archivo, con el código completo, pero por 4 ó 5 años he intentado
bajarlo y nunca lo logré. :D :D :D :D :D

Bye('_')...

"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.


 

anything