TODOPIC

Lenguajes de programación para PC => C, C#, C++ => Mensaje iniciado por: IAO en 17 de Julio de 2008, 17:21:45

Título: Ayuda con este código en C DOS
Publicado por: IAO 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('_')...
Título: Re: Ayuda con este código en C DOS
Publicado por: Modulay 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]);
Título: Re: Ayuda con este código en C DOS
Publicado por: IAO en 17 de Julio de 2008, 21:17:27
Hola:

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

Bye('_')..
Título: Re: Ayuda con este código en C DOS
Publicado por: Geo 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;
Título: Re: Ayuda con este código en C DOS
Publicado por: IAO 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('_')..
Título: Re: Ayuda con este código en C DOS
Publicado por: Geo en 19 de Julio de 2008, 03:11:47
Si no te funcionó, ¿por qué no has probado con lo que puse :??
Título: Re: Ayuda con este código en C DOS
Publicado por: Modulay 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
Título: Re: Ayuda con este código en C DOS
Publicado por: IAO 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.
(http://img391.imageshack.us/img391/9492/overflownk1.png)

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

Bye('_')....
Título: Re: Ayuda con este código en C DOS
Publicado por: Modulay 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 :(
Título: Re: Ayuda con este código en C DOS
Publicado por: IAO 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('_').
Título: Re: Ayuda con este código en C DOS
Publicado por: Modulay en 20 de Julio de 2008, 12:32:19
Qué compilador se necesita?
Sube el ejecutable si puedes.
El primer link sigue sin funcionarme
Título: Re: Ayuda con este código en C DOS
Publicado por: Modulay 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.
Título: Re: Ayuda con este código en C DOS
Publicado por: IAO 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('_')

Título: Re: Ayuda con este código en C DOS
Publicado por: IAO 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('_').
Título: Re: Ayuda con este código en C DOS
Publicado por: IAO 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  (http://www.modelo.edu.mx/univ/virtech/frontal/telec.htm)

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('_')...

Título: Re: Ayuda con este código en C DOS
Publicado por: Modulay en 20 de Julio de 2008, 13:18:20
He ejecutado OHMWATTS.EXE y todo marcha bien a excepción de la opción 14 que no hace nada (solo se borra la pantalla), pero no tira error ninguno.

En el código que hay dentro del fichero .zip me he encontrado esto:

r1=ra*ma;
r2=rb*mb;

Lo cual creo que no tiene mucho sentido,ya que "ra", "rb", "ma" y "mb" no parece que tengan otra finalidad que hacer las funciones de índices para acceder a los elementos de un array....desde luego no tienen pinta de contener valores de resistencia,que es lo que se supone que albergan las variables "r1" y "r2" ¿no?

Sigo sin ver claro cual es el problema que tienes y en qué circunstancias se te da...si con "valor" y "multiplo" declarados como arrays; si declarados como flotante; si haciendo acceso a un array de flotantes cuando el array no existe; si haciendo un acceso a flotante cuando el flotante en realidad está declarado como array de flotantes....

Título: Re: Ayuda con este código en C DOS
Publicado por: Modulay en 20 de Julio de 2008, 13:21:15
r1 y r2 podrían ser funciones,pero...
¿por qué están declaradas entonces como variables de tipo flotante? O son una cosa o son la otra
¿dónde están implementadas? Los ficheros auxiliares que usas son genéricos,no me suena que ninguno contenga funciones con esos nombres
Título: Re: Ayuda con este código en C DOS
Publicado por: IAO en 20 de Julio de 2008, 15:05:21
 :D :D

Sr. Modualy, me preguntas cosas que no te podré contestar.
Si logras entrar a la página del sr. Virgilio Gómez Negrete, te darás cuanta que hice un
milagro con todo ese código. :D

Me llevó mucho tiempo hacer las modificaciones para que ejecutara hasta el #13.
En el #14 paré. En estos dias me recordé y decidí intentarlo.
Me recordé de la parte de C en este foro y dije voy a pedir ayuda. Esto no me vencerá.

Ahora entiendo que falta algo más en ese código. Viendo las sentencias printf, pude observar
que solo me informan de error y solicitud de entradas.

Déjelo, no gaste tiempo én eso. Estoy seguro que falta algo más porque no veo los printf del resultado
del cálculo. Esta es mi apreciación.

Gracias por la ayuda, al menos aprendí a realizar un array :-).

Voy a compilar hasta el #13 y paso el .C y el  .EXE hasta el #13.

Espero puedas entrar en la página de V. G. Negrete, quien quita que desde españa puedas bajar el archivo,
que nunca pude descargar  :D :D :D

Bye('_').
Título: Re: Ayuda con este código en C DOS
Publicado por: Modulay en 20 de Julio de 2008, 15:41:58
He conseguido entrar en la página.El código está incompleto...faltan,al menos,las declaraciones de las variables implicadas en esa parte del programa.


Estoy seguro que falta algo más porque no veo los printf del resultado
del cálculo


printf("%.3f + %.3f = %.4f %.4f %% error.\n", r1, r2, rs, e);   // Resultado

printf("%.3f || %.3f = %.4f %.4f %% error\n", r1, r2, rt, e);    // Resultado

Título: Re: Ayuda con este código en C DOS
Publicado por: IAO en 20 de Julio de 2008, 16:02:56
Hola:

 :D
Pensé que hacía referencia a un error y no al resultado final.
Pero como verá hice mucho en llegar hasta allí. :D

El numero 13, me dió dolores de cabeza en su tiempo. porque no entendía y
debía agregar unas variables y algo más que tampoco aparecen, en el código original.

Gracias nuevamente.

Bye('_').
Título: Re: Ayuda con este código en C DOS
Publicado por: ma4826 en 20 de Julio de 2008, 19:55:37
Aquí tienes el enlace al programa original http://www.modelo.edu.mx/univ/virtech/activo/ohmwatt.zip (http://www.modelo.edu.mx/univ/virtech/activo/ohmwatt.zip), en el enlace original pone ohmwatt.ZIP y como el servidor diferencia mayúsculas y minúsculas no lo encuentra. Comente las llamadas a las funciones específicas de borland y compiló sin problemas con el gcc.

Código: [Seleccionar]
ma4826@maamd:/tmp$ gcc -o ohmwatt ohmwatt.c -lm
ma4826@maamd:/tmp$ ./ohmwatt
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Seleccione una opcion:
Salir del programa...........................................0
Ley de Ohm: Calcular voltaje (E).............................1
Ley de Ohm: Calcular corriente (I)...........................2
Ley de Ohm: Calcular resistencia (R).........................3
Potencia (P) en terminos de voltaje y corriente..............4
Potencia (P) en terminos de corriente y resistencia..........5
Potencia (P) en terminos de voltaje y resistencia............6
Voltaje (E) en terminos de potencia y corriente..............7
Voltaje (E) en terminos de potencia y resistencia............8
Corriente (I) en terminos de potencia y voltaje..............9
Corriente (I) en terminos de potencia y resistencia.........10
Resistencia (R) en terminos de potencia y corriente.........11
Resistencia (R) en terminos de voltaje y potencia...........12
Resistencia (R) en serie y paralelo.........................13
Resistencia (R) exacta con dos resistores de rango E24......14

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
14

Introduzca el valor deseado en Ohms
455
24.000 + 430.000 = 454.0000 -0.2198 % error.
470.000 || 15000.000 = 455.7207 0.1584 % error
510.000 || 4300.000 = 455.9252 0.2033 % error
560.000 || 2400.000 = 454.0540 -0.2079 % error
910.000 || 910.000 = 455.0000 0.0000 % error

Presione cualquier tecla para regresar al menu


Saludos,

Miguel Ángel.


Título: Re: Ayuda con este código en C DOS
Publicado por: IAO en 20 de Julio de 2008, 20:40:40
Holaaaaa:

Gracias sr. ma4826:
Jajajaja 5 años esperando poder ver que diablos hacia ese código.

Gracias Modulay, Gracias Geo.

G r a c i a s  :-/  :-/  :-/  :-/


No me venció, después de todo..... :D :D :D

Bye('_')....
Título: Re: Ayuda con este código en C DOS
Publicado por: Geo en 20 de Julio de 2008, 23:48:09
Con lo que había comentado la primera vez había podido compilarlo y probarlo en Linux, eliminando las funciones específicas de Borland. El programa calculaba varios valores de resistencias comerciales para aproximarse a un valor deseado de resistencia.

Qué bien que pudiste resolverlo :).