Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rir3760

#771
Cita de: amchacon en 21 Junio 2013, 15:13 PM
Cita de: xiruko en 21 Junio 2013, 14:58 PMPues diciéndomelo tan seguro me esperaba que cambiara, pero si te soy sincero la salida de p1 es la del principio, sin la 'z' modificada xD

EDITO:

De hecho poder se puede:

http://stackoverflow.com/questions/9127246/copy-struct-to-struct-in-c

Cierto, creo que ya he pillado el problema (un array no responda igual que un puntero al parecer).
No hay problema en utilizar el operador de asignación '=' para copiar estructuras pero se debe tener en cuenta el resultado de este:

A) Al copiarse un array se copia este como una unidad (el valor de todos sus elementos).

B) Al copiarse un puntero (para el caso cualquier objeto) se copia el valor almacenado.

En el ultimo caso y tratándose de punteros la dirección en memoria sera la misma y por ende un cambio en el objeto apuntado tendrá efecto en todas las estructuras (ya que todas apuntan a ese objeto).

Un saludo
#772
No es necesario utilizar la función strlen ya que basta con verificar si el carácter a procesar es el '\0' (ello indica el fin de la cadena) y para imprimir con printf el carácter '%' basta con doblarlo:
#include <stdio.h>

int main(void)
{
   char str[1024];
   int i;
   
   puts("Enter the text");
   scanf("%1023[^\n]", str);
   
   for (i = 0; str[i] != '\0'; i++)
      printf("%%%02x", str[i]);
   putchar('\n');
   
   return 0;
}


Un saludo
#773
Cita de: BeFree en 19 Junio 2013, 19:33 PM
Hola, tengo que hacer un algoritmo que ordene N números naturales generados en forma aleatoria. Tiene que ejecutarse para 1000, 10000 y 100000. Escribí un código y al ejecutarlo lo hace sin problemas para 1000 y 10000, pero para 100000 no me muestra el resultado, y no puedo hallar el error.
Ese problema puede generarse debido a la declaración del array "ordenar" en la función principal:
unsigned long int MAX=100000;

/* ... */

/*Principal*/
int main()
{
   unsigned long int ordenar[MAX];

/* ... */

Un tema relacionado donde se explica el porque es Error al ejecutar un programa en C que he compilado [Windows 8]

Un saludo
#774
Cita de: Jotajotajota75 en 12 Junio 2013, 18:52 PM(menos el Visual C que lo instalé hace años y me revolucionó todo el PC teniendo que formatearlo). No sé qué fue lo que pasó, quizá me lo pasaron con virus.
Lo recomiendan mucho en estos foros, yo solo lo utilizo mediante linea de comandos para verificar el código fuente.

Cita de: Jotajotajota75 en 12 Junio 2013, 18:52 PM¿del tema que preguntaba arriba de programar el puerto serie sabes algo?
Lo siento pero no puedo ayudarte (la interacción con el hardware no es mi fuerte).

Un saludo
#775
Cita de: Jotajotajota75 en 12 Junio 2013, 16:05 PMWindows XP SP3. También me gustaría que me recomendarais un emulador de C bueno porque tengo uno muy viejo para MSDOS.
Supongo te refieres a un compilador de C, ¿Cierto?

Varios IDEs para MS Windows incluyen el compilador como Lcc-win32, Pelles C, Code::Blocks y Visual C++.

Otra opcion es utilizar solo el compilador, por ejemplo las versiones para MS Windows de gcc como MinGW y CygMing (la version de gcc para Cygwin).

Un saludo
#776
Programación C/C++ / Re: Cadenas c++
11 Junio 2013, 16:35 PM
Cita de: jaimeramirez10 en 11 Junio 2013, 15:50 PMel problema es que si pongo las letras en desorden no dice que son iguales
Antes de la comparacion debes ordenar el contenido de las dos cadenas. Si se trata de arrays de caracteres puedes utilizar la función qsort (prototipo en <cstdlib>) y una propia, para objetos de la clase string la función sort (el encabezado aquí es <algorithm>).

Cita de: jaimeramirez10 en 11 Junio 2013, 15:50 PMsi se pone espacio en la primera cadena se salta de una vez
Eso sucede porque al utilizar el operador "<<" este lee una palabra. En su lugar utiliza la función getline.

En el caso de utilizar la clase string es relativamente fácil:
Código (cpp) [Seleccionar]

#include <iostream>
using std::cin;
using std::cout;
using std::endl;

#include <string>
using std::string;
using std::getline;

#include <algorithm>
using std::sort;

int main()
{
   cout << "Primera cadena: ";
   string a;
   getline(cin, a);
   
   cout << "Segunda cadena: ";
   string b;
   getline(cin, b);
   
   sort(a.begin(), a.end());
   sort(b.begin(), b.end());
   
   cout << "Las cadenas ";
   if (a != b)
      cout << "NO ";
   cout << "estan formadas por los mismos caracteres" << endl;
   
   return 0;
}


Un saludo
#777
En el cifrado de Cesar para encontrar los sustitutos puedes utilizar el operador de modulo (ya hay ejemplos) o bien se pueden colocar todos los caracteres en un array, con ello la operación termina como una suma (o resta si la operación es descifrar).

Por ejemplo:
#include <stdio.h>
#include <stdlib.h>

#define ABC  "abcdefghijklmnopqrstuvwxyz"

int main(void)
{
   char ch[] = ABC  ABC;
   size_t max_despl = sizeof(ABC) - 1;
   unsigned despl;
   unsigned i;
   
   printf("Desplazamiento: ");
   fflush(stdout);
   if (scanf("%u", &despl) != 1 || despl > max_despl)
      return EXIT_FAILURE;
   
   for (i = 0; i < max_despl; i++)
      printf("%c ==> %c\n", ch[i], ch[i + despl]);
   
   return EXIT_SUCCESS;
}


----

Cita de: Royca3 en 10 Junio 2013, 23:13 PMLo que yo necesito es un programa que pida una palabra o frase y que cambie las letras ejemplo A por H b por X y asi entiendes?
Para eso debes colocar todos los caracteres a buscar en un array y sus sustituciones en otro, mas o menos así:
char  in[] = "Ab";
char out[] = "HX";

Buscas cada carácter en el array "in" para conocer su indice, una vez lo obtienes (el indice, claro) lo sustituyes por el carácter correspondiente (mismo indice) del array "out".

La solución ya la tienes en el programa de CCross, una opción ligeramente distinta es utilizando la función strchr para realizar la búsqueda:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
   char  in[] = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
   char out[] = "XJOPZWAUÑLDQSFRBMVHKNYTIEGC";
   char cadena[30];
   char *p;
   int i;
   int j;
   
   printf("Ingrese una cadena en Mayuscula: ");
   fflush(stdout);
   if (scanf("%s", cadena) != 1)
      return EXIT_FAILURE;
   
   for (i = 0; cadena[i] != '\0'; i++){
      p = strchr(in, cadena[i]);
      putchar(p == NULL ? cadena[i] : out[p - in]);
   }
   putchar('\n');
   
   return EXIT_SUCCESS;
}


Un saludo
#778
Cita de: leosansan en  9 Junio 2013, 09:13 AM
Cita de: rir3760En el bucle:
Código (cpp) [Seleccionar]
for (i=0;palabra[i]!='\0';i++)
   if (palabra[i]==palabra2[i])
      continue;

El condicional no tiene efecto.

tiene efecto, combinado con la línea que le sigue. Fíjate bien en el if con la i, y si no pruébalo
Para explicarlo mejor, el bucle es:
Código (cpp) [Seleccionar]
int i;
for (i = 0; palabra[i] != '\0'; i++)
   if (palabra[i] == palabra2[i])
      continue;

if (i==2)
   cout <<"Hola mundo";

El cuerpo de este es una sola sentencia, el condicional:
Código (cpp) [Seleccionar]
if (palabra[i] == palabra2[i])
   continue;

Si se cumple la condición (los caracteres son iguales) se pasa a la siguiente iteracion del bucle (debido a la sentencia "continue;") y si no se cumple como no hay mas que ejecutar ... también.

En algunas ocasiones utilizas bucles como este:
Código (cpp) [Seleccionar]
for (i = 0; palabra[i] != '\0'; i++)
   if (palabra[i] == palabra2[i])
      continue;
   else
      break;

Supongo la intención con el programa (de este tema) es la misma.

Un saludo
#779
En el bucle:
Código (cpp) [Seleccionar]
for (i=0;palabra[i]!='\0';i++)
   if (palabra[i]==palabra2[i])
      continue;

El condicional no tiene efecto.

Debería ser:
Código (cpp) [Seleccionar]
for (i = 0; palabra[i] != '\0'; i++)
   if (palabra[i] != palabra2[i])
      break;

O:
Código (cpp) [Seleccionar]
for (i = 0; palabra[i] != '\0' && palabra[i] == palabra2[i]; i++)
   ;


Así al terminar el bucle basta con comparar los últimos caracteres para saber si las cadenas son iguales.

Un saludo
#780
Cita de: Puntoinfinito en  7 Junio 2013, 22:43 PM
A lo que me refiero con "0-9", es que debe mirar si el carácter coincide con algún número del 0 al 9. No se si con números lo de hacer "0-9" funciona
No, no funciona.

Si la idea es verificar si un carácter es un dígito se puede utilizar un operador lógico, por ejemplo:
Código (cpp) [Seleccionar]
if (msg[i] >= '0' && msg[i] <= '9'){
   // Es un digito
}


O bien la función (usualmente implementada como macro) isdigit (prototipo en <ctype.h> en C y <cctype> en C++):
Código (cpp) [Seleccionar]
if (isdigit(msg[i])){
   // Es un digito
}


Un saludo