elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  dándole vueltas a un problemilla c++ necesito un poco de ayuda
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: dándole vueltas a un problemilla c++ necesito un poco de ayuda  (Leído 4,386 veces)
el gusanillo

Desconectado Desconectado

Mensajes: 20


Ver Perfil
dándole vueltas a un problemilla c++ necesito un poco de ayuda
« en: 5 Junio 2018, 09:58 am »

Buenos días, estoy haciendo este ejercicio de c++ y me he atascado.Dice así:

Escribir un programa que dado un array de 10 caracteres (introducidos a mano en el código)calcule cuantas veces aparecen dos caracteres iguales seguidos, considerando que un carácter no puede pertenecer a dos parejas.

#include<stdio.h>
#include.conio.h>
int main()
{
int x,contador=0;
for(x=0;x<10;x++)//bucle para recorrer el array
{
/*si el carácter en la posición x es igual al carácter en la posición x+1 incrementamos contador en 1 unidad y descartamos el próximo carácter por pertenecer a una pareja
Caracteres: P  A  R  E  J J  A
Indices:     0 1  2  3  4     6  */
if(Caracteres
  • ==Caracteres[x+1])
{
Contador++;
x++;
}
}

Esto es lo que llevo. A ver si me podeis echar una mano.

Un saludo y gracias.



En línea

SrMcLister

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Re: dándole vueltas a un problemilla c++ necesito un poco de ayuda
« Respuesta #1 en: 5 Junio 2018, 16:29 pm »

Buenas el problema de tu código sería que no compruebas si esa pareja ya ha existido anteriormente, está muy bien pero te faltaría eso...
Aquí te dejo un código que he hecho referente a tu tarea
Espero que te ayude.

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. bool noEncontrado(char letra, const char usadas[], int longitud){
  5.    for(int i=0;i<longitud;i++)
  6.        if(letra==usadas[i])
  7.            return false;
  8.    return true;
  9. }
  10.  
  11.  
  12. int main(int argc, char const *argv[]){
  13.  
  14.    const int MAXLETRAS=10;
  15.    int contadorusadas=0;
  16.    char palabra[MAXLETRAS] = {'A','A','D','F','A','A','S','S','R','U'};
  17.    char usadas[MAXLETRAS];
  18.  
  19.    for(int i=0;i<MAXLETRAS;i++){
  20.        if(palabra[i]==palabra[i+1])
  21.            if(noEncontrado(palabra[i],usadas,contadorusadas)){
  22.                usadas[contadorusadas]=palabra[i];
  23.                contadorusadas++;
  24.            }
  25.    }
  26.  
  27.    cout << "Han aparecido " << contadorusadas << " letras con parejas" << endl;
  28.    cout << "Letras con parejas encontradas" << endl;
  29.    for(int i=0;i<contadorusadas;i++) cout << usadas[i] << endl;
  30.    return 0;
  31. }

PD: Acostumbrate a poner el código entre etiquetas propias de código.
Un saludo.


« Última modificación: 5 Junio 2018, 16:38 pm por SrMcLister » En línea

Código
  1. return((u.areHappy() && u.knowIt()) ? u.clapYourHands() : u.goFuckYourself());
el gusanillo

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: dándole vueltas a un problemilla c++ necesito un poco de ayuda
« Respuesta #2 en: 7 Junio 2018, 19:28 pm »

Buenas tardes, lo primero darle las gracias por la ayuda. Me he puesto a darle caña y de paso he escrito el programa que me envió y me da fallo en la compilación de la linea 20. Sigo dándole vueltas porque no me parece un ejercicio sencillo,creo que tiene miga.

Un saludo
En línea

SrMcLister

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Re: dándole vueltas a un problemilla c++ necesito un poco de ayuda
« Respuesta #3 en: 7 Junio 2018, 19:46 pm »

Buenas gusanillo.
A ver, te comento...
Lo primero, ¿me podrías especificar el error que te da al compilar?;He compilado el mismo código que te he puesto y me sale perfecto.
Segundo, ¿a que te refieres que sigues dándole vueltas? el ejercicio es simple. Dado un array de caracteres, encontrar parejas, la miga reside en que si encuentras una pareja ya se pone como "usada", o en este caso, entra al array de usadas.
Un saludo.
En línea

Código
  1. return((u.areHappy() && u.knowIt()) ? u.clapYourHands() : u.goFuckYourself());
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: dándole vueltas a un problemilla c++ necesito un poco de ayuda
« Respuesta #4 en: 7 Junio 2018, 21:05 pm »

Un ejemplo en C.
Verás que solo es moverse por el array y las parejas son el elemento actual y el siguiente. Para evitar que un elemento se cuente dos veces seguidas se hace un salto manual.
Código
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.    char array[] = "AMESDIFPPDKEJSDDDJKPPPP";
  5.  
  6.    // Esto es para cualquier tipo de array unidimensional
  7.    unsigned parejas = 0;
  8.    size_t n_elementos = sizeof(array)/sizeof(array[0]);
  9.    for(size_t i=0; i<n_elementos-1; ++i) { // el -1 es para no salirme del array después
  10.        if(array[i]==array[i+1]) {
  11.            ++i; // Esto hace que un elemento no pertenezca a dos parejas
  12.            ++parejas;
  13.        }
  14.    }
  15.    printf("Hay %d parejas de caracteres", parejas);
  16. }
« Última modificación: 7 Junio 2018, 21:34 pm por MAFUS » En línea

Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: dándole vueltas a un problemilla c++ necesito un poco de ayuda
« Respuesta #5 en: 10 Junio 2018, 20:07 pm »

Código
  1. #include <iostream>
  2. #include <string.h>
  3.  
  4. using namespace std;
  5.  
  6. const int MAX=10;
  7. typedef char tarreglo[MAX];
  8.  
  9. void cargar_arreglo(tarreglo &n, int &ocupado);
  10. void mostrar_arreglo(tarreglo n, int ocupado);
  11. void calcular_parejas(tarreglo n, int ocupado);
  12.  
  13. int main()
  14. {
  15. tarreglo palabra;
  16. int lleno=0;
  17. cargar_arreglo(palabra, lleno);
  18. mostrar_arreglo(palabra, lleno);
  19. calcular_parejas(palabra, lleno);
  20. system("pause");
  21. return 0;
  22. }
  23.  
  24. void cargar_arreglo(tarreglo &n, int &ocupado)
  25. {
  26. for(int i=0; i<MAX; i++){
  27. cout << "Ingrese caracter(0 para finalizar): ";
  28. cin >> n[i];
  29. if(n[i]=='0'){
  30. break;
  31. }
  32. ocupado++;
  33. }
  34. }
  35.  
  36. void mostrar_arreglo(tarreglo n, int ocupado)
  37. {
  38. for(int i=0; i<ocupado; i++){
  39. cout << n[i];
  40. }
  41. cout << endl;
  42. }
  43.  
  44. void calcular_parejas(tarreglo n, int ocupado)
  45. {
  46. int parejas=0;
  47. for(int i=0; i<ocupado; i++){
  48. if(n[i]==n[i+1]){
  49. parejas++;
  50. i++;
  51. }
  52. }
  53. cout << "Parejas: " << parejas << endl;
  54. }
  55.  
En línea

7w7
dijsktra

Desconectado Desconectado

Mensajes: 110


Mr Edsger Dijsktra (Tribute to)


Ver Perfil
Re: "carcateres adyacentes por parejas"
« Respuesta #6 en: 12 Junio 2018, 10:46 am »

A ver, gusanillo, este problema ya lo preguntaste aquí ( y creo que resuelto)

https://foro.elhacker.net/programacion_cc/buenos_diastengo_muchas_dudas_con_un_ejercicio_de_caracteres-t480917.0.html;msg2155561#msg2155561

Si ponemos "caracteres adyacentes por parejas" o algo similar en el tema, podremos localizarlo mejor
En línea

Si la depuración es el proceso de eliminar fallos en el software, entonces programar debe ser el proceso de ponerlos dentro. (Edsger Dijsktra)
Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: dándole vueltas a un problemilla c++ necesito un poco de ayuda
« Respuesta #7 en: 13 Junio 2018, 20:05 pm »

Quizás no le parezca solucionado, porque no obedece a lo que él espera, y en tal caso, lo que falla es su especificación de pareja.

En teoría es pareja si dos caracteres son adyacentes, así: "carro" tiene una pareja de "r", pero, ...luego señala que "si ya pertenece a una pareja no puede pertenecer a otra"... esto resulta ambiguo, porque puede interpretarse de diferentes maneras, y no queda claro, cual es de su interés...:

Ejemplo 1: "carrro", al llevar 3 'r' serían dos parejas, pero parece encajar en la restricción impuesta, luego si aparece una pareja, trió, cuarteto, etc... equivale a solo una pareja?

Ejemplo 2: "el carro arrolló al peatón", en teoría hay 3 parejas "r", "r" y "l". Nuevamente la pregunta es, encaja en la restricción impuesta?. Es decir ¿si la "r" ya forma parte de una pareja, no se cuenta de nuevo si forma parte de otras parejas en lo sucesivo?.

Según el planteamiento, exige soluciones distintas. Qué especifique con claridad la consideración de pareja... puede que así tenga solucionado su problema o aún no.
En línea

dijsktra

Desconectado Desconectado

Mensajes: 110


Mr Edsger Dijsktra (Tribute to)


Ver Perfil
Re: dándole vueltas a un problemilla c++ necesito un poco de ayuda
« Respuesta #8 en: 20 Junio 2018, 18:52 pm »

Quizás no le parezca solucionado, porque no obedece a lo que él espera, y en tal caso, lo que falla es su especificación de pareja.[...]

Según el planteamiento, exige soluciones distintas. Qué especifique con claridad la consideración de pareja... puede que así tenga solucionado su problema o aún no.

Exacto!,  ;-)  esa es la cuestión. Especificar sin ambigüedad. Por eso yo intento siempre dar una especificación formal, sin ambigüedades. Mi propuesta era:

Código:
/*
 
 
  P : N >= 0
  Q : count = #i : 0 <= i < N-1: twin(V,N,i)
 
  where twin(V,N,i) ::= V[i]==V[i+1]) &&
                        ((i==0) ||
                        ((i>0) and V[i]!=V[i-1]) ||
                        (i>1) and V[i-1]==V[i-2])
 
*/

"Ahí" dice que un caracter es adyacente (twin no es la palabra mejor, en fin...) al siguiente  V[n]==V[n+1]) si no está atado ya inmediatamente anterior V[n]!=V[n-1]. Es posible que no esté atado (aun siendo igual) si ya el anterior estaba atada al anterior del anterior...El razonamiento se aplica a cualquiera, menos al primero (n == 0)  que no tiene anterior"

Uno puede estar de acuerdo con ella o no, (las definiciones se proponen, pero no se demuestran) pero si se escoje, el programa dado en

https://foro.elhacker.net/programacion_cc/buenos_diastengo_muchas_dudas_con_un_ejercicio_de_caracteres-t480917.0.html;msg2155561#msg2155561


 cumple lo que se le pide.
En línea

Si la depuración es el proceso de eliminar fallos en el software, entonces programar debe ser el proceso de ponerlos dentro. (Edsger Dijsktra)
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: dándole vueltas a un problemilla c++ necesito un poco de ayuda
« Respuesta #9 en: 20 Junio 2018, 20:46 pm »

Yo entendí, y así lo plasmé en el código es que si hay tres letras iguales seguidas por orden de lectura las dos primeras forman pareja, como la de en medio ya se ha usado para pareja no puede juntarse con la que le sigue, con lo que la segunda y la tercera no forman pareja.
Pero si hubiera 4, y siguiendo el razonamiento anterior, la tercera sí formaría pareja con la cuarta. La tercera no ve a la segunda, por formar ésta última una pareja con otra, pero si ve la última y por tanto se empareja.
Siguiendo el razonamiento anterior, si hubiera 5 la última no formaría pareja.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Necesito un poco de ayuda
Multimedia
firw 1 1,744 Último mensaje 25 Octubre 2005, 06:55 am
por aNexos
Necesito 1 poco de ayuda con el pic... « 1 2 »
Electrónica
Hellhole 12 7,396 Último mensaje 3 Junio 2008, 20:37 pm
por skapunky
Problemilla con rundll32.exe... necesito ayuda « 1 2 »
Windows
dieki 15 8,324 Último mensaje 14 Noviembre 2015, 21:55 pm
por dieki
Dándole vueltas al ejercicio anterior...necesito vuestra ayuda para seguir
Ejercicios
el gusanillo 5 5,507 Último mensaje 12 Marzo 2018, 21:58 pm
por dijsktra
Es normal dandole vueltas a la cabeza con estos pendamientos? (Sed Sinceros)
Foro Libre
win_7 7 3,981 Último mensaje 20 Noviembre 2020, 00:18 am
por simorg
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines