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

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Mensajes
Páginas: 1 ... 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 [115] 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 ... 161
1141  Programación / Programación C/C++ / Re: Crear matriz partiendo de un vector ingresado en: 5 Octubre 2016, 21:08 pm
bucle j desde i - 1 hasta 0:
Código:
for( j = i-1; j >= 0; --j)
1142  Programación / Programación C/C++ / Re: Crear matriz partiendo de un vector ingresado en: 5 Octubre 2016, 20:46 pm
Te lo voy a dar en seudocódigo.
Un bucle que recorra las filas, índice i.
Un bucle que recorra las columnas de una forma especial, índice j.
Una variable llamada size guarda el tamaño del vector
Código:
Bucle i desde 0 hasta size - 1:
    tabla[i,i] = vector[i]
    var suma = vector[i]
    Bucle j desde i - 1 hasta 0
        suma = suma + vector[j]
        tabla[i,j] = suma
    suma = vector[i]
    Bucle j desde i + 1 hasta size - 1:
        suma = suma + vector[j]
        tabla[i,j] = suma
o usando triquiñuelas
Código:
Bucle i desde 0 hasta size - 1:
    tabla[i,i] = vector[i]
    var suma = vector[i]
    Bucle j desde i - 1 hasta 0
        suma = suma + vector[j]
        tabla[i,j] = suma
        tabla[j,i] = suma

Al terminar la tabla estará rellenada.
1143  Programación / Programación C/C++ / Re: Problema ejercicio básico. Lenguaje C. en: 5 Octubre 2016, 17:22 pm
Código
  1. for(i=0; i<4; i++) {
  2.    scanf("%i",&ed);
  3.    if(ed>=18 && ed<=45) {
  4.        cont++;
  5.        scanf ("%i",&ed); // <-- Te sobra esta instrucción
  6.    }
  7. }

Cuando entres en el if al dar una edad que cumpla la condición, además de contabilizar, vas a pedir un dato que no se va a tener en cuenta porque al salir del if e iterar otra vez el bucle, vas a llegar al scanf del inicio que te machacará lo que hubiera puesto en el anterior en ed.

Si sigues el flujo del programa verás que el segundo scanf no tiene razón de ser. Sobra. Por eso te pedía datos de más.
1144  Programación / Programación C/C++ / Re: Arreglo de cadenas con memoria dinámica (realloc) lenguaje C. en: 4 Octubre 2016, 17:42 pm
La opción %m está incluida en el estándar POSIX.1-2008: http://pubs.opengroup.org/onlinepubs/9699919799/

Si se usa con %ms no recogerá toda la línea ya que el modificador %s se detiene en el primer carácter en blanco. Para ello se usa el %[^\n] que recoge toda la línea hasta el final o hasta encontrarse un carácter de nueva línea.

Como nota adicional el %*c al final de la cadena de control hace que se recoja el carácter de nueva línea pero no se asigne a ningún sitio, así se quita del buffer de entrada.
1145  Programación / Programación C/C++ / Re: Arreglo de cadenas con memoria dinámica (realloc) lenguaje C. en: 4 Octubre 2016, 15:44 pm
Como verás hace uso de argumentos no tan comunes en scanf, pero con ellos obtengo el dato que quiero y además me libero de \n en el buffer, todo en la misma línea.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void limpiar( void ){
  5.    system("cls||clear");
  6. }
  7.  
  8. int main( void ){
  9.    size_t tam_frases = 0, i;
  10.    char **frases = NULL, salir;
  11.  
  12.    do {
  13.        limpiar();
  14.        frases = realloc(frases, (tam_frases + 1) * sizeof(char*));
  15.        if(!frases) {
  16.            fprintf(stderr, "\n\n *** Error al adquirir memoria ***\n\n");
  17.            exit(1);
  18.        }
  19.  
  20.        printf("\nIngrese frase....: ");
  21.        scanf("%m[^\n]%*c", &frases[tam_frases]);
  22.        ++tam_frases;
  23.  
  24.        printf("\nPara continuar \"S\" para finalizar \"N\"....: ");
  25.        scanf("%c%*[^\n]%*c", &salir);
  26.    } while(salir != 'n' && salir != 'N');
  27.  
  28.    printf ("\n Frases introducidas.....: ");
  29.  
  30.    for(i = 0; i < tam_frases; ++i)
  31.        printf("\n>> %s", frases[i]);
  32.  
  33.    for(i = 0; i < tam_frases; ++i)
  34.        free(frases[i]);
  35.  
  36.    return 0;
  37. }
1146  Programación / Programación C/C++ / Re: Arreglo de cadenas con memoria dinámica (realloc) lenguaje C. en: 4 Octubre 2016, 11:30 am
Un array de cadenas es fijo, no podrá crecer más si así lo necesita.

En unas horas te voy a pasar un código ejecutable que pone en práctica lo que te he dicho.
1147  Programación / Programación C/C++ / Re: Arreglo de cadenas con memoria dinámica (realloc) lenguaje C. en: 4 Octubre 2016, 01:07 am
frases no es un array de cadenas, es solo una cadena, prueba de ello es su definición:
char *frases

para que sea un array dinámico de frases deberías hacer
char **frases

después a cada frase nueva haces crecer el puntero con calloc

Código:
char frases = calloc(frases, (tam_frases + 1) * sizeof(char*))

seguidamente cargas la nueva frase al array

Código:
scanf("%m[^\n]%*c", &frases[tam_frases]);

y actualizas tam_frases

Código:
++tam_frases

Para acabar acuérdate de liberar toda la memoria adquirida por scanf para cada cadena.
Código:
for(i = 0; i < tam_frases; ++i)
    free(cadena[i])
1148  Programación / Programación C/C++ / Re: Cortar Cadena en: 30 Septiembre 2016, 16:12 pm
No entendí que querías hacer.
1149  Programación / Programación C/C++ / Re: Ayuda con ejercicio en C en: 29 Septiembre 2016, 23:55 pm
Tiene su lógica. Si te fijas a cada inicio del triángulo, o punta de flecha, como se quiera llamar, es una letra menos del grupo anterior.

Esta es la salida y ejecución del programa:

Del ejemplo:
Código:
Indica la letra por la que empezar: X
Indica el tamaño de la cadena más larga: 5
X
 YY
  ZZZ
   AAAA
    BBBBB
   AAAA
  ZZZ
 YY
X
W
 XX
  YYY
   ZZZZ
  YYY
 XX
W
V
 WW
  XXX
 WW
V
U
 VV
U
T


------------------
(program exited with code: 0)
Press return to continue

Otra configuración. Más extremo.
Código:
Indica la letra por la que empezar: A 
Indica el tamaño de la cadena más larga: 10
A
 BB
  CCC
   DDDD
    EEEEE
     FFFFFF
      GGGGGGG
       HHHHHHHH
        IIIIIIIII
         JJJJJJJJJJ
        IIIIIIIII
       HHHHHHHH
      GGGGGGG
     FFFFFF
    EEEEE
   DDDD
  CCC
 BB
A
Z
 AA
  BBB
   CCCC
    DDDDD
     EEEEEE
      FFFFFFF
       GGGGGGGG
        HHHHHHHHH
       GGGGGGGG
      FFFFFFF
     EEEEEE
    DDDDD
   CCCC
  BBB
 AA
Z
Y
 ZZ
  AAA
   BBBB
    CCCCC
     DDDDDD
      EEEEEEE
       FFFFFFFF
      EEEEEEE
     DDDDDD
    CCCCC
   BBBB
  AAA
 ZZ
Y
X
 YY
  ZZZ
   AAAA
    BBBBB
     CCCCCC
      DDDDDDD
     CCCCCC
    BBBBB
   AAAA
  ZZZ
 YY
X
W
 XX
  YYY
   ZZZZ
    AAAAA
     BBBBBB
    AAAAA
   ZZZZ
  YYY
 XX
W
V
 WW
  XXX
   YYYY
    ZZZZZ
   YYYY
  XXX
 WW
V
U
 VV
  WWW
   XXXX
  WWW
 VV
U
T
 UU
  VVV
 UU
T
S
 TT
S
R


------------------
(program exited with code: 0)
Press return to continue
1150  Programación / Programación C/C++ / Re: Diferencia con puntero a vector en lenguaje C (dentro y fuera de main). en: 29 Septiembre 2016, 22:04 pm
ptrVector es el nombre de la variable tipo int (*)[MAX].

Es lo mismo que a
Código:
void f(int a);
la llamas con
Código:
int a;
// ...
f(a);
Páginas: 1 ... 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 [115] 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 ... 161
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines