/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Problema pasando secuencia como argumento de función

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
sur58



Registrado: 05 Abr 2014
Mensajes: 3

MensajePublicado: 05/04/2014 8:24 am
Título: Problema pasando secuencia como argumento de función

Hola a todos:

El código que adjunto más abajo recibe como entrada una secuencia seq de caracteres terminada con 'F', y en función de esa secuencia determina si la ficha de un tablero de ajedrez está dentro o fuera del tablero.

La secuencia tiene el formato siguiente:11rh5F, donde los dos primeros caracteres serían la posición inicial de fila y columna, el tercer caracter(r, q) indicaria si se trata de un movimiento de torre o reina, el cuarto caracter(h,v,u,d) indicaria el sentido del movimiento(horizontal, vertical, etc), el quinto caracter el valor del movimiento y el sexto indicaría finalización (si es 'F') o volveria a pedir movimiento torre o reina.

Se pedía que el programa principal se convirtiera en función y retornara un caracter 'C' si estaba dentro y un caracter 'U' si estaba fuera. Para hacer esto, lo que hice fue modificar el código del main y añadir la linea "return result".

Ahora vienen mis dudas: no sé si lo que he hecho de añadir la linea return result; al cuerpo del main puede considerarse transformarlo en función o no.

Por otra parte, piden crear un algorismo en C que aprovechando la función anterior y dada la secuencia game <num seq1seq2seq3...seqn>, donde num sea el número de secuencias seq que dan como resultado 'C' y el número que dan como resultado 'U'. La verdad, no sé por dónde empezar...

Agradezco cualquier idea..

Muchas gracias!!

Código:

#include <stdio.h>



#define ENDSEQ 'F'
#define BOARD_SIZE 8


typedef enum {FALSE, TRUE} bool; /*definim el tipus boolea*/


void queenMov(int *row,int *column, char direction, int displacement);
void rookMov(int *row,int *column, char direction, int displacement);



int main(void) {

   int row, column;
   int displacement;
   char movement, direction;
   bool correct;
   char temp;
   int sign;
   char result;

   
   scanf("%c", &temp);
      
   row=(int)temp-'0';
   
   scanf("%c", &temp);
   
   column=(int)temp-'0';
   
   scanf("%c", &movement);
   
   correct=TRUE;
   
while(correct && movement!=ENDSEQ){
   scanf("%c", &direction);
   scanf("%c", &temp);
   sign=1;

   if(temp=='-'){
      scanf("%c", &temp);
      sign=-1;
      }


   displacement=(int)(temp-'0')*sign;
   
   if(movement=='q'){
      queenMov(&row, &column,direction,displacement);
      }
   
   if(movement=='r'){
      rookMov(&row, &column, direction, displacement);
      }

         
   if(row>BOARD_SIZE || column>BOARD_SIZE || row<1 || column<1){
      correct=FALSE;
      }
      
   scanf("%c", &movement);
   }
   
   if(!correct){
      while(movement!=ENDSEQ){
         scanf("%c", &movement);
         }
      }
      
   if(correct){
      result='C';
      }
      else{
         result='U';
         }
   fprintf(stderr, "El valor de result és %c\n", result);
   return result;
   
   }
   
   
void queenMov(int *row,int *column, char direction, int displacement){
      
   if(direction=='u'){
      *row=*row+displacement;
      if(displacement>0){
         *column=*column+displacement;
         }
         else{
            *column=*column+((-1)*displacement);
            }
      }
      else {
         *row=*row+displacement;
         if(displacement<0){
            *column=*column+displacement;
            }
            else {
               *column=*column+((-1)*displacement);
               }
         }
   }   
   
void rookMov(int *row,int *column, char direction, int displacement){
   
   if(direction=='v'){
      *column=*column+displacement;
      }
      else{
         *row=*row+displacement;
         }
   }
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com