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

#261
Cita de: NOB2014 en  9 Septiembre 2014, 21:40 PMestoy trabado con la última parte la de intercambio de dígitos, lo he intentado de varias manera pero no me funciono.
Nada impide que proceses cada uno de los dígitos empezando con el menos significativo y terminando con el mas, lo usual mediante el uso del cociente y el residuo de la división entre diez. Una vez obtenido el nuevo dígito lo multiplicas por la potencia de diez necesaria para colocarlo en la posición correcta, de esta forma:
#include <stdio.h>

int main(void)
{
   int pot[] = {100, 1000, 1, 10};
   int num = 5724;
   int res = 0;
   int i;
   
   for (i = 0; i < 4; i++, num /= 10)
      res += (num + 7) % 10 * pot[i];
   
   printf("%d\n", res);
   
   return 0;
}


Un saludo
#262
Cita de: tmb90 en  9 Septiembre 2014, 21:29 PMQuisiera saber por qué tengo que  definir a "bloque" como un puntero.
Porque el resultado del operador new es la dirección en memoria donde se localiza el objeto creado (en tu caso un array de "cantbytes" caracteres), esa dirección se debe almacenar en una variable de tipo puntero porque en C y C++ "puntero" es el termino técnico para "dirección en memoria".

Un saludo
#263
Cita de: tmb90 en  9 Septiembre 2014, 00:51 AM¿Los bytes se insertan o reemplaza los ya existentes desde el primer offset al 50?
Remplazan los existentes.

Un saludo
#264
Programación C/C++ / Re: Duda básica sobre C:
9 Septiembre 2014, 00:24 AM
Cita de: superkorlas en  8 Septiembre 2014, 23:22 PMLo que no entiendo para qué sirve es el 2 y el 1 que hay delante de la "d" y detrás del "%".
El valor entero inmediatamente después del carácter '%' indica la anchura del campo con una alineación (predeterminada) a la derecha con el propósito de permitir una impresión en columnas.

Por ejemplo con este programa:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
   char *test[] = {
      "a",
      "bb",
      "ccc",
      "dddd"
   };
   size_t num_elem = sizeof test / sizeof test[0];
   size_t i;
   
   for (i = 0; i < num_elem; i++)
      printf("%5s %5d\n", test[i], (int) (i * pow(10, i)));
   
   return EXIT_SUCCESS;
}

Se genera la salida:
    a     0
   bb    10
  ccc   200
dddd  3000


Puedes encontrar mas ejemplos mediante el motor de búsqueda de los foros.

----

Cita de: netdrag0n en  8 Septiembre 2014, 23:40 PMEl 2 se refiere a la cantidad de numeros a mostrar ej 8885 va mostrar 88 nada mas
No. Si los caracteres generados sobrepasan la anchura del campo se imprimen tal cual, como si la anchura nunca se hubiera indicado.

----

Cita de: superkorlas en  8 Septiembre 2014, 23:57 PMcual sería la diferencia entre mostrar string y mostrar caracteres?
"%c" imprime un carácter mientras que "%s" imprime una cadena (secuencia de caracteres terminada con el carácter '\0'). Por ejemplo:
char ch = 'X';
char str[] = "Hola";

printf("%s %c\n", str, ch); /* Imprime "Hola X" */


Cita de: superkorlas en  8 Septiembre 2014, 23:57 PMYo algunas cosillas que he programado en c++ y lo que he aprendido en conclase, para las frases y demás utilizaba el tipo char, aunque más tarde me entere del tipo string en este foro, y me dijeron que era más correcto, por eso me gustaría saber la diferencia.
En el titulo del tema indicas que el lenguaje es C con "Duda básica sobre C:" pero ahora indicas que es C++, en el caso de este ultimo lo políticamente correcto es enfocarse en su biblioteca estándar: clase string, operadores ">>"/"<<" de las clases de entrada/salida, etc.

Un saludo
#265
En ese caso lo primero que debes hacer es revisar la documentación de la biblioteca que estas utilizando para saber que funciones de manejo de archivos provee, buscando por supuesto una función para obtener solo el nombre, es la forma mas fácil de resolver el problema.

Si por alguna extraña razón no se incluye esa función y tienes algo como "archivo.txt" nada impide sustituir los últimos tres caracteres con strcpy:
char nombre[] = "archivo.txt";
size_t len = strlen(nombre);

/* ... */

printf("Nombre: %s\n", nombre);
strcpy(nombre + len - 3, "xyz");
printf("Nombre: %s\n", nombre);


Un saludo
#266
Programación C/C++ / Re: Duda en programación C:
6 Septiembre 2014, 16:21 PM
Cita de: superkorlas en  6 Septiembre 2014, 11:55 AMLa figura C) es la que me falla, me sale una representación bastante distinta, es algo así:

**********
                *********
               ********
              *******
            *******
          *******
        *****
......
Cuando publiques un dibujo en texto por favor utiliza etiquetas [ code ] para preservar el espaciado. ¿No sera algo así?
          **********
         *********
        ********
       *******
      ******
     *****
    ****
   ***
  **
*

En este caso se imprimen diez lineas cada una con el mismo numero de espacios y asteriscos, empezando con diez y terminando con uno. Para hacerlo solo tienes que aplicar lo aprendido en los ejercicios anteriores.

Un saludo
#267
No entiendo el problema. ¿Porque no simplemente pides el nombre sin extensión?

Agregar a continuación la extensión es fácil, formas hay varias por ejemplo utilizando strcat (prototipo en <string.h>):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
   char nombre[FILENAME_MAX];
   
   puts("Indica el nombre:");
   scanf("%s", nombre);
   printf("Nombre: %s\n", nombre);
   
   strcat(nombre, ".txt");
   printf("Nombre con extension: %s\n", nombre);
   
   return EXIT_SUCCESS;
}


Un saludo
#268
Tal vez no me estoy explicando correctamente ya que no hay necesidad alguna de "recorrer" el array, simplemente se imprime el registro indicado cuyo indice obtienes con la función scanf.

Solo para estar seguro.

1) Al utilizar fread en esta forma:
fread(persona, sizeof persona[0], regs_a_leer, fichero);
Se le indica que lea el numero de registros indicado por "regs_a_leer", el objetivo de ello es leer todos los registros en el archivo y como máximo (el tercer argumento de la función) debes indicar la capacidad del array "persona". De nuevo se leen todos los registros.

2) La función puede leer menos bien porque se genere un error o porque simplemente no hay tantos registros en el archivo. Por eso la función retorna el numero de elementos leídos y almacenamos ese valor en la variable "regs_leidos":
regs_leidos = fread(persona, sizeof persona[0], regs_a_leer, fichero);

3) Si todo sale bien el valor de "regs_leidos" sera igual a "regs_a_leer" (si no es así hay un error tal vez lógico, tal vez en la lectura del archivo). Solo resta obtener el indice del registro e imprimirlo:
int i;

/* ... */

puts("Indice del registro a imprimir:");
scanf("%d", &i);

/* ... */

/* Se imprimen los campos del registro "persona[i]" */


Un saludo
#269
Porque "palindromo" es un puntero y cuando estos se convierten a booleanos los distintos de NULL resultan en true y los iguales en false, tu bucle se procesa de esta forma:
Código (cpp) [Seleccionar]
do {
   if (cadena[k] != cadena[j]){
      esPalindromo = false;
   }else {
      k++;
      j--;
   }
}while (k < j && true); // palindromo != NULL ==> true


Los resultados del operador && en los dos casos que nos importan son:
false && true ==> false
true && true ==> true


Como puedes ver (en este caso en particular) el segundo operando no importa, el resultado solo lo decide el primero, tenemos:
Código (cpp) [Seleccionar]
do {
   if (cadena[k] != cadena[j]){
      esPalindromo = false;
   }else {
      k++;
      j--;
   }
}while (k < j);


Por eso, si los caracteres a comparar en cualquier momento son distintos, se entra en un bucle infinito: para terminar se debe modificar el valor de los contadores "i" y "j" pero la rama de ejecución donde ello se realiza nunca se ejecuta.

Un saludo
#270
Cita de: el_lujo en  5 Septiembre 2014, 20:23 PMEstoy comenzando a estudiar programación.
Tengo la siguiente tarea:
Debo hacer una aplicacion en c++ que limpie la pantalla.
Requisitos:
-Que el comando que limpie la pantalla sea "limpiar".
-Que sin importar que se escriba mayuscula o minúscula haga la función sin reventarse.
Te piden que desarrolles un programa que acepte un argumento mediante la linea de comandos, verifique que sea igual a "limpiar", "LIMPIAR", "Limpiar", etc. (no hay distinción entre mayúsculas y minúsculas) y finalmente realice la operación indicada (limpiar la pantalla).

Para el primer paso utiliza el motor de búsqueda para revisar los temas relacionados con el paso de argumentos mediante la linea de comandos.

Para el segundo de nuevo utiliza el motor de búsqueda pero ahora para encontrar temas relacionados con las funciones tolower y toupper.

El ultimo paso no se debería realizar ya que si apenas empiezas deberías estar enfocado en la base (C++ estándar) y no en como realizar una operación especifica del SO (coméntale eso en buen plan a tu profesor).

Un saludo