Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Traduccion de c a c++ Simpson 3/8

Estas en el tema de Traduccion de c a c++ Simpson 3/8 en el foro de C/C++ en Foros del Web. Hola, como verán es mi primer Post y estoy atorado con una tarea. Tengo que hacer el método Simpson 3/8 en c++, la cosa es ...
  #1 (permalink)  
Antiguo 30/05/2010, 13:10
 
Fecha de Ingreso: mayo-2010
Mensajes: 2
Antigüedad: 13 años, 11 meses
Puntos: 0
Traduccion de c a c++ Simpson 3/8

Hola, como verán es mi primer Post y estoy atorado con una tarea.
Tengo que hacer el método Simpson 3/8 en c++, la cosa es que me dieron el programa en c pero estoy tendiendo problemas para entender algunas cosas y ojala me pudieran ayudar a traducirlo.
El programa en c completo es así:
Código:
program simpson 3/8;
uses ctr;

var
  s1,s2,st:real;
  n,c:integer;
  a,b,h:real;
  i:integer;

function f(x:real):real;
 begin
  f:=x;
  end;

	begin
	clrscr;
	writeln('Dame a,b y n, n debe ser multiplo de 3');
	readln(a,b,n);
	h:=(b-a)/n;
	s1:=0
	s2:=0
	
	for i:=0 to n-1 do
	begin
	 
	 c:= i mod 3;
	 
	 if c= 0 then
	  
	  s1:=s1+2*f(a+i*h);
	  else
	  s2:=s2+3*f(a+i*h);
	
	 end;
	
	st:=((3*h)/8(f(a)+s1+s2+f(b));
	writeln('El area es:',st:5:8);
	
	delay(500);
	end;
Según tengo entendido el tipo de dato Real en c++ puede ser usado como Float entonces he declarado mis variables de esta forma:
int n,i,c;
float a,b,h,s1,s2,st;

Pero mi primer error viene a comprender la primer función en el programa en c dice :
Código:
function f(x:real):real;
 begin
  f:=x;
  end;
Según lo entiendo, es una función llamada f que regresara un dato tipo real y que usara una variable x real, entonces lo traduzco en c++ de esta forma

Código:
float f(float x)
{
      f=x;
      return;
      }
Pero me marca un error 9 cannot convert `float' to `float ()(float)' in assignment

Creo que puede tratarse de que yo estoy usando un operador = y en el programa original están usando un operador := pero no se que signifique esto.

Mi segunda duda es en el loop FOR
En el programa original dice:
for i:=0 to n-1 do

Si es un For en c++ quedaría
For (i=1;n-1;i++)

Me suena a que es más un do while pero no entiendo esa condición n-1.

Y pues eso es todo , gracias a todos y felicidades por este grandioso foro, en otras ocasiones solo había consultado pero creo que esta vez si necesito un poco de ayuda personalizada.
  #2 (permalink)  
Antiguo 30/05/2010, 15:08
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Traduccion de c a c++ Simpson 3/8

Para empezar el programa parece hecho en pascal! no en C.

Los operadores ":=" y "=" son la igualacion. Pero que cada lenguaje adopto su sintaxys.

Segundo en pascal, en el cuerpo de la funcion, el nombnre de la funcion, se usa como si fueses una variable mas. Cuando termina la funcion, el valor que quedo ahi es el retorno. En cambio en c, el nombre de la variable no se usa. Directamente se usa la instruccion "return expresion".
En tu ejemplo:

Código C++:
Ver original
  1. float f(float x)
  2. {
  3.       return x;
  4.       }

Por ultimo la sentencia For en C quedaria asi:

for (i=1;i<n-1;i++)

Un for llevado a un While seria:

i=1;
while(i<n-1) {
SENTENCIAS DEL FOR;
i++;
}

Si te fijas primero se hace la asignacion. Liuego se buclea mientras que la expresion del medio(i<n-1) sea Verdadera. Y cada vez que se termina de iterar se hace la tercera expresion(i++)
  #3 (permalink)  
Antiguo 30/05/2010, 18:13
 
Fecha de Ingreso: mayo-2010
Mensajes: 2
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Traduccion de c a c++ Simpson 3/8

Muchas Gracias Sam, quedo todo muy claro, el programa por si alguine se topa con este maestro quedo asi:

Código:
//#include "stdafx.h"
 #include <iostream>
 
 using namespace std;
int n,i,c;
float a,b,h,s1,s2,stt;
float f(float x)
{
      
      return x;
      }
 int main(int argc, char* argv[])
 {

 cout <<"Dame a,b y n" << endl;
 cout <<"n debe ser un multiplo de 3" << endl;
 cin >> a >> b >> n;
h=(b-a)/n;
i=0;
s2=0;


for (i=1;i<n-1;i++)
{
    c= i%3;
	 
	 if (c=0)
	  
	  s1=s1+2*f(a+i*h);
	  else
	  s2=s2+3*f(a+i*h);
}
 stt=(((3*h)/8)*(f(a)+s1+s2+f(b)));
 cout<<"S1:"<<s1<< endl;
 cout<<"S2:"<<s2<< endl;
	cout<<"El area es:"<<stt<< endl;

	
system("pause"); 	
 	return 0;
 }

Etiquetas: traduccion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:27.