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

Traducir de pascal a C

Estas en el tema de Traducir de pascal a C en el foro de C/C++ en Foros del Web. Buenas amigos, yo en pascal ya estoy excelente, he comenzado con C, pero aun estoy de novata por asi decirlo, este codigo lo debo pasar ...
  #1 (permalink)  
Antiguo 08/05/2013, 20:22
Avatar de andre18agf  
Fecha de Ingreso: mayo-2007
Mensajes: 13
Antigüedad: 17 años
Puntos: 0
Traducir de pascal a C

Buenas amigos, yo en pascal ya estoy excelente, he comenzado con C, pero aun estoy de novata por asi decirlo, este codigo lo debo pasar a C++, espero me puedan ayudar.

program Conjuntos;
type Letras = set of char;
const Vocales : Letras = ['A','E','I','O','U','a','e','i','o','u'];

const tam = 10;
type Arreglo = array[1..tam] of char;

var
A : Arreglo;
r : boolean;
k, c : integer;

function todasVocales (N : integer; var L : Arreglo) : boolean;
var i : integer;
begin
i := 1;
while ((i <= N) and (L[i] in Vocales)) do
i := i + 1;
todasVocales := i > N;
end;

function cuentaVocales (N : integer; var L : Arreglo) : integer;
var i, c : integer;
begin
c := 0;
for i := 1 to N do
if (L[i] in Vocales) then
c := c + 1;
cuentaVocales := c;
end;

begin
for k := 1 to tam do
begin
write('Inserte el caracter ', k, ' de ', tam, ' de la lista L: ');
readln(A[k]);
end;
r := todasVocales(tam, A);
writeln(r);
c := cuentaVocales(tam, A);
write('Con ', c, ' vocales de ', tam, ' posibles');
readln;
end.

Espero a ver que me puedan ayudar
  #2 (permalink)  
Antiguo 08/05/2013, 23:11
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Traducir de pascal a C

Exactamente que parte no sabes hacer en C/C++? Ya tienes claro de que lenguaje es el ejercicio? En algunos lados has puesto C y en otros C++ y son lenguajes parecidos pero no iguales.
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 10/05/2013, 13:32
Avatar de andre18agf  
Fecha de Ingreso: mayo-2007
Mensajes: 13
Antigüedad: 17 años
Puntos: 0
Respuesta: Traducir de pascal a C

Sé que esta en Pascal, pero debo pasarlo a C++, si se que son diferentes. Yo no sé como cambiarlo, la sintaxis de C me tiende a confundir mucho.
  #4 (permalink)  
Antiguo 10/05/2013, 16:06
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: Traducir de pascal a C

Te dijo que en algunos lados pusiste C y en otros C++, no hablaba de pascal.

Con respecto a tu tema, no tengo la menor idea de Pascal, pero a simple vista se pueden ver algunas cosas que se traducirían algo así:

Código C:
Ver original
  1. const int tam = 10;
  2. int Arreglo[tam];

En ese caso el Arreglo va a ir de 0 a 9, y no de 1 a 9 (o 10) como, al parecer, especificaste en tu código de pascal.

Para las funciones write y readln, tenes las estándares de C, que son análogas a esas, printf y scanf, respectivamente.

La creación de una función es fácil:

Código C:
Ver original
  1. tipo_dato_retorno nombre_function (tipo_var1 var1, tipo_var2 var2) {
  2.     /* ... */
  3. }

Por lo que:

Código Pascal:
Ver original
  1. function todasVocales (N : integer; var L : Arreglo) : boolean;

Sería:

Código C:
Ver original
  1. #include <stdbool>
  2. bool todasVocales(int N, Arreglo L)

Por cierto acabo de ver que al parecer "Arreglo" es un tipo de dato que vos creaste, que en C se hace con typedef.

Por lo que puedo ver diría que la palabra "in" en Pascal es para verificar si lo expresado en su izquierda se encuentra en la lista de la derecha, no? Bueno, si no me equivoco, en C vas a tener que ir item por item verificando. Por lo que:

Código Pascal:
Ver original
  1. if (L[i] in Vocales) then

Sería algo como esto:

Código C:
Ver original
  1. int j;
  2.  
  3. for (j = 0; j < sizeof(Vocales); j++)
  4. {
  5.     if (Vocales[j] == L[i]) {
  6.         /* Tu código */
  7.         break;
  8.     }
  9. }

Espero que te sirva de algo!


Última edición por carbon; 11/05/2013 a las 07:44
  #5 (permalink)  
Antiguo 12/05/2013, 13:44
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 11 años, 9 meses
Puntos: 22
Respuesta: Traducir de pascal a C

Hola.

Dado que C y C++ no cuentan con un tipo de datos para trabajar conjuntos como el Set de Pascal, creo que es mas sencillo tratar de entender la lógica del código e implementarla en C o C++.
Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. #define ESVOCAL(x) (x)=='A'||(x)=='E'||(x)=='I'||(x)=='O'||(x)=='U'||(x)=='a'||(x)=='e'||(x)=='i'||(x)=='o'||(x)=='u'
  4. #define TAM 10
  5. #define FALSE 0
  6. #define TRUE  1
  7.  
  8. typedef char vecchar[10];
  9.  
  10. int todasvocales(int N, vecchar v)
  11. {
  12.   int i=0, r = TRUE;
  13.   for(i=0; i<N ;i++)
  14.     r = ESVOCAL(v[i]);
  15.   return r;
  16. }
  17.  
  18. int cuentavocales(int N, vecchar v)
  19. {
  20.   int i,r=0;
  21.   for(i=0; i<N ;i++) r += ESVOCAL(v[i]);
  22.   return r;
  23. }
  24.  
  25. int main()
  26. {
  27.   vecchar v;
  28.   int i;
  29.   for(i=0; i<TAM; i++){
  30.     printf("Inserte el caracter %d de %d de la lista L: ",i+1,TAM);
  31.     v[i] = getchar();
  32.     while(getchar()!='\n');
  33.   }
  34. /*--------
  35.   r := todasVocales(tam, A);
  36.   writeln(r);
  37.   ---------
  38.   Supongo que estas líneas se encargarían de mostrar si se
  39.   ingresaron todas vocales..., mismo efecto en C:
  40. */
  41.   if (todasvocales(TAM, v))
  42.    printf("TRUE\n");
  43.   else
  44.    printf("FALSE\n");
  45.  
  46.   printf("%d\n",cuentavocales(TAM, v));
  47.   printf("Con %d de %d posibles",cuentavocales(TAM,v),TAM);
  48.   getch();
  49.   return 0;
  50. }

Saludos

Etiquetas: int, pascal, traducir
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 14:33.