ayuda con aritmetica de punteros

Iniciado por leo soto, 16 Marzo 2017, 23:57 PM

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

leo soto

alguien que me oriente en terminar esto
#include <stdio.h>
#include <stdlib.h>
#define VOCALES 5
#define TAMANOMAXIMO 20

void main(void)
{
   int i;

   char A[TAMANOMAXIMO]={0};
   char B[TAMANOMAXIMO]={0};
   char C[TAMANOMAXIMO]={0};
   char vocales[VOCALES];
   int VA=0,VB=0,VC=0; // estos son los que cuentan las vocales por cada arreglo

   char *puntero=0;
   //se agregan las vocales al arreglo

   vocales[0]="a";
   vocales[1]="e";
   vocales[2]="i";
   vocales[3]="o";
   vocales[4]="u";
   //nota: solo funciona con minusculas para mayusculas seria otro apuntador con otro arreglo pero utilizando mayusculas


       printf("Ingresa palabra no mayor a 20 silabas\n");

       fgets(A,TAMANOMAXIMO, stdin);// esta funcion toma una cadena ingresada por el usuario y la guarda en un arreglo
       //los parametros que se ingresan en la funcion es el arreglo(A), el tamaño del arreglo (TAMANOMAXIMO) y de que tipo es (stdio)

       printf("\n\n");


       printf("Ingresa palabra no mayor a 20 silabas\n");

       fgets(B,TAMANOMAXIMO, stdin);// esta funcion toma una cadena ingresada por el usuario y la guarda en un arreglo
       //los parametros que se ingresan en la funcion es el arreglo(B), el tamaño del arreglo (TAMANOMAXIMO) y de que tipo es (stdio)

       printf("\n\n");


       printf("Ingresa palabra no mayor a 20 silabas\n");

       fgets(C,TAMANOMAXIMO, stdin);// esta funcion toma una cadena ingresada por el usuario y la guarda en un arreglo
       //los parametros que se ingresan en la funcion es el arreglo(C), el tamaño del arreglo (TAMANOMAXIMO) y de que tipo es (stdio)

 printf("\n\n");
 int j;
 for(j=0;i<VOCALES;j++)
 {
   puntero=&vocales[j];

   for(i=0;i<TAMANOMAXIMO;i++)
   {

     if(A[i]==*puntero)
     {
       VA++;
     }
     if(B[i]==*puntero)
     {
       VB++;
diganme que me falta (es en c) y lo que tengo que realizar es que al ingresar una palabra en cada arreglo, me de el numero de vocales de cada una,

#include <stdio.h>
#define COLUMNAS 5
#define FILAS 5

void main(void)
{
   int i,j;
   
   int A[COLUMNAS][FILAS]={0};
   int B=0;
   int *puntero=0;//este puntero va a ver la posicion A[i][j]
   int *puntero2=0;//este puntero va a ver la posicion A[j][i]



   for(i=0;i<COLUMNAS;i++)
   {
     for(j=0;j<FILAS;j++)
     {
       printf("Ingresa numero para A [%d][%d] \n",i,j );

       scanf("%d", &A[i][j]);
     }

     

   }    
 printf("\n\n");


   for(i=0;i<COLUMNAS;i++)
   {
     for(j=0;j<FILAS;j++)
     {
       printf("[%d] ",A[i][j]);

     }
     printf("\n" );
    }  



int encontrado;
encontrado=1;//encontrado tiene 2 valores únicos 0 y 1, donde 0 no encontrado y 1 encontrado, se inicializa en verdadero suponiendo que
 // la matriz es simetrica
i=0;
 j=0;


      while(i<COLUMNAS && encontrado==1)
   {
     while(j<FILAS && encontrado==1)
     {
       puntero=&A[i][j];
       puntero2=&A[j][i];
       if(*puntero2!=*puntero)
       {
         encontrado=0;
       }else{
         j++;

       }

     }
     i++;


   }

if (encontrado==0)
printf("\n\nLa matriz no es simetrica\n\n");
if (encontrado==1)
printf ("\n\nLa matriz es simetrica\n\n");



}

en este usando aritmetica de punteros debo determinar si la matriz ingresada es simetrica o no

#include <stdio.h>
#define COLUMNAS 5

void main(void)
{
   int i;
   
   int A[COLUMNAS]={0};
   int B=0;
   int *puntero=0;


   for(i=0;i<COLUMNAS;i++)
   {

       printf("Ingresa numero para A [%d] \n",i );

       scanf("%d", &A[i]);

    }    
 printf("\n\n");


   for(i=0; i<COLUMNAS; i++)
   {
      printf("%d\t", A[i]);
   }
 printf("\n\n");
    printf("ingrese valor que busca \n");
       scanf("%d",&B);

int encontrado;
encontrado=0;//encontrado tiene 2 valores únicos 0 y 1, donde 0 no encontrado y 1 encontrado
i=0;


      while(i<COLUMNAS && encontrado==0)
   {
    puntero=&A[i];
if(B==*puntero)
       {
encontrado=1;
}
       else
         {
          i++;

         }

   }

if (encontrado==0)
printf("elemento no econtrado\n");
if (encontrado==1)
printf ("elemento encontrado A[%d]= %d \n",i, B);



}


en esta usando aritmetica de punteros, el programa debe indicar la posicion en el arreglo del elemento parado como parametro, en caso de que el elemento no se encuentre y devolver el tamaño en bytes del arreglo ingresado por el usuario

TODO ES EN C, LES AGRADECERIA SU AYUDA


· Los códigos deben ir en etiquetas GeSHi
· Los títulos deben ser descriptivos
>aquí las reglas del foro
-Engel Lex

AlbertoBSD

Muy buen dia.

Realmente no termine de leer el programa por que no me queda claro que es lo que hace.

Cuando pidas ayuda con este tipo de problemas de apuntadores busca un Ejemplo basico pero que exprese lo que no entiendes.

Ejemplo

¿Como puedo incrementar la direccion a la que apunta mi apuntador en 1 bytes?

#include<stdio.h>

int main() {
char *cadena = "Esta es una direccion de memoria que contiene caracteres ascii";
char *ptr;
ptr = cadena;
*ptr++;
printf("Cadena apunta a %p y ptr apunta a %p",cadena,ptr);
return 0;
}


Salida en mi computadora
Cadena apunta a 0040A064 y ptr apunta a 0040A065

Espero que respondas tu duda nuevamente mejor redactada y con un ejemplo de tup problema y con gusto te ayudamos.

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

MAFUS

En el último código hay una instrucción que crea código pero no tiene efecto. Es este:
*ptr++;
El asterisco hace que devuelva lo que hay dentro del puntero, pero como no hay nada que lo reciba se pierde.
La instrucción debería ser
ptr++;