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 - HardForo

#131
Deberias ofrecer cash $$$  ;D


EDIT: creí que era una consigna de la cátedra que hicieras el cambio pero como dices que no .... te lo resuelvo
#132
Tamaño de los archivos a modificar ?

Que has planteado hasta ahora ? muestra algo
#133
En si....


MIENTRAS (TRUE)
{
   SI (NO HAY DATOS) BREAK;
   next(dato)
   PUSH (dato, vector1)

   SI (NO HAY DATOS) BREAK;
   next(dato)
   PUSH (dato, vector2)

   SI (NO HAY DATOS) BREAK;
   next(dato)
   PUSH (dato, vector3)

   SI (NO HAY DATOS) BREAK;
   next(dato)
   PUSH (dato, vector4)
}


Puedes hacer un solo bucle o dividirlo en N bucles si tienes N-vectores o arreglos, ejemplo en C:


#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;

const int elems = 20;
const int nv = 4;

int main ()
{
    int ary[] = { 1,2,3,4,
                  5,6,7,8,
                  9,10,11,12,
                  13,14,20
                };

    int* vec[nv];   
    int dl[nv]; // dimesiones logicas
    int i,j, limit;
   
    // reserva de memoria (new) e inicializaciones
    for (j=0;j<nv;j++){
        vec[j] = (int*) malloc(elems * sizeof(int));
        dl[j] = 0;
    }       
   
    limit = sizeof(ary)/sizeof(ary[0]);
   
    for (j=0;j<nv;j++)   
        for (i=j; i< sizeof(ary)/sizeof(ary[0]) ;){
       vec[j][dl[j]] = ary[i];   
   i+=nv;dl[j]++;
    }   
   
       
    // Imprimo

    for (j=0;j<nv;j++){
        cout << "V1 = ";
        for (i=0; i<dl[j]; i++)
           cout << vec[j][i] << " ";
        cout << endl;
    }   

   
    return 0;
}



Y la otra forma que te comentaba (siempre en C)


#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;

const int elems = 20;
const int nv = 4;

int main (void)
{
    int ary[] = { 1,2,3,4,
                  5,6,7,8,
                  9,10,11,12,
                  13,14,20
                };

    int* vec[nv];   
    int dl[nv]; // dimesiones logicas
    int i,j, limit;
   
    // reserva de memoria (new) e inicializaciones
    for (j=0;j<nv;j++){
        vec[j] = (int*) malloc(elems * sizeof(int));
        dl[j] = 0;
    }       
   
    limit = sizeof(ary)/sizeof(ary[0]);
   
    for (i=0;i<limit; ){   
        for (j=0;j<nv;j++){         
           vec[j][dl[j]] = ary[i];
           dl[j]++; i++;
           if (i==limit-1) goto outside;
        }   
    }

    outside:   
   
    // Imprimo

    for (j=0;j<nv;j++){
        cout << "V1 = ";
        for (i=0; i<dl[j]; i++)
           cout << vec[j][i] << " ";
        cout << endl;
    }   
   
    return 0;
}


No uso vector y menos una libreria como T++ pero creo se puede ver la logica de cualquiera de los ejemplos.

Salu2
#134
Gracias, me pareció interesante tu codigo y el enlace a StackOverflow   ;)
#135
Compañero @xiruko : te consulto por el uso de sscanf() con "%d"

Tu sabras si es mas eficiente que usar atoi() ?
#136
i,j o e,i son variables de control de lazo (bucle, ciclo)

Se podria haber hecho con un solo while() si sabes cuantos caracteres esperas al final:


#include <iostream>
using namespace std;

int main(void)
{
   int num = 5, pad, inc, row, tmp;
   char c = '*';    

// cantidad de caracteres =  suma de los n primeros naturales: n(n+1)/2
pad = num * (num+1) * 0.5;

inc = 0; row =1; tmp = 1;
while (inc<pad){
cout << c;
if (tmp==row){
cout << endl;
tmp=0;
row++;
}
inc++;
tmp++;
}

   return 0;
}



Este tipo de problemas se puden resolver con 2 bucles pero tambien con 1 bucle + 1 if() interno y seria como hacer una transformacion del mundo (x,y) al (u,v) :


(bucle externo, bucle interno) ---> (bucle externo 2, if interno)


El bucle externo no es el mismo y por tanto el if() interno no reemplaza (estoy editando mi respuesta) al bucle interno. Por esto se puede hablar de transformación en sentido matematico.


PD:  ya habia dado una respuesta......... pero no daré respuestas a ejercicios completos en otros hilos.  Me disculpo por eso.
#137
Si solo quieres sacar por pantalla juntos ciertos valores....... es muy simple:


cout << a << b << c << d .... << ... << endl;



Si verdaderamente necesitas concatenar porque vas a devolver eso en una funcion, etc...


#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

using namespace std;

// se puede generalizar
char* concatnum(int a, int b){
char as[10], bs[10];
static char out[30];

itoa(a,as,10);
itoa(b,bs,10);

strcpy(out,as);
strcat(out,bs);

// podria devolver un "string" (char*) o un entero
return out;
}


int main(void){
cout << concatnum(2,0);
}



EDIT: La funcion que puse no tiene verdadera utilidad (solo te sirve para mirar como funcionan strcpy y strcat) porque solo recibe 2 valores, iba a generalizar pero me tuve que ir a dormir y otro compañero ya te dio una respuesta mejor ahora.
#138
Podrias hacerlo con la funcion strok()
#139
Las definiciones de las funciones (que son opcionales en ciertos casos) se pueden colocar en un archivo aparte de "headers" (de extension .h y con el mismo nombre que tu .c)


// palindromos.c

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

using namespace std;

/*
Capicupa (palindromo) ?

*/

// todo esto podria estar en palindromos.h
const char* r_bool(bool b);
bool es_capicua(int x);
void print_capicua_rango(int a, int b);


int main(void)
{
cout << r_bool(es_capicua(10000)) << endl; // false
cout << r_bool(es_capicua(10001)) << endl; // true
cout << r_bool(es_capicua(10501)) << endl; // true
cout << r_bool(es_capicua(807)) << endl; // false
cout << r_bool(es_capicua(808)) << endl; // true

print_capicua_rango(19,100);

getchar();
}

void print_capicua_rango(int a, int b){
int i,count=0;
for (i=a; i<b; i++){
if (es_capicua(i)){
cout << i << endl;
count++;
}
}
cout << "El numero de terminos capicua es " << count;
}

bool es_capicua(int x){
char buffer [10];
int i;
bool exito = true;

itoa(x,buffer,10);

int len = strlen(buffer);
for (i = 0; i<(int)len/2 && exito; i++)
exito = buffer[i]==buffer[len-1-i];

return exito;
}

const char* r_bool(bool b){
  return (b ? "true" : "false");
}



Se convierte en......


// palindromos.h

const char* r_bool(bool b);
bool es_capicua(int x);
void print_capicua_rango(int a, int b);




// palindromos.c

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "palindromos.h"

using namespace std;

/*
Capicupas (palindromos)
*/


int main(void)
{
cout << r_bool(es_capicua(10000)) << endl; // false
cout << r_bool(es_capicua(10001)) << endl; // true
cout << r_bool(es_capicua(10501)) << endl; // true
cout << r_bool(es_capicua(807)) << endl; // false
cout << r_bool(es_capicua(808)) << endl; // true

print_capicua_rango(19,100);

getchar();
}

void print_capicua_rango(int a, int b){
int i,count=0;
for (i=a; i<b; i++){
if (es_capicua(i)){
cout << i << endl;
count++;
}
}
cout << "El numero de terminos capicua es " << count;
}

bool es_capicua(int x){
char buffer [10];
int i;
bool exito = true;

itoa(x,buffer,10);

int len = strlen(buffer);
for (i = 0; i<(int)len/2 && exito; i++)
exito = buffer[i]==buffer[len-1-i];

return exito;
}

const char* r_bool(bool b){
  return (b ? "true" : "false");
}

#140

#include <iostream>
using namespace std;

int main(void)
{
   int cols = 7,e,i;
   char c = '*';    

e = 0;  
while (e<cols){    
            i = 0;
            while (i<e){
        cout << c;
        i++;
    }
    cout << endl;
    e++;
   }        

   return 0;
}