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

#1
Gracias x responder
Es que no tengo habilitado " Build Options " en Proyect; cómo lo activo ? ( existiría la posibilidad de añadir -std=gnu++17 (ó) -std=c++17 desde otro menú ?? )
Desde Settings / Compiler / Compiler Settings sólo tengo la flag -std=C17, la tildé y no me lo compila.  
De lo otro; así es, como vos decís, "  auto& [ k, v ] "
#2
Posiblemente consiguiera lo que busco si alguien me pudiera decir cómo setear correctamente Codeblocks 20.03 ( solamente para este archivo ) para compilar con C ++ 17 -- ya tengo instalada la ultima versión de MinGW, con ésta pude compilar de todo ....... hasta ahora.
Así como tengo seteado tanto Codeblocks como Dev C++ 5.11, este Código entra en un loop infinito.

Código (cpp) [Seleccionar]

#include <map>
#include <string>
using namespace std;

int main( )
{

map < string, string > ciudades = { { "123", "Lima" },
                                   { "234", "Tucson" },
                                   { "345", "Buenos Aires" }
};


// 1  INSERTAR UN ELEMENTO, un "  PAIR : ' Tipo, Tipo '  ' Key, Value '  "

ciudades.insert ( pair < string, string > ( "1", "Moscu" ) ); // Recién después de ( 2 ) se Mostrará a Moscú como 1er Elemento
                                                             // por tener su " Key " menor a las demás

ciudades.insert ( pair < string, string > ( "123", "Trujillo" ) );


// 2  MOSTRAR X PANTALLA
// I  " BUSCANDO " UN ELEMENTO MEDIANTE LA LLAVE

string key = "123";

cout << ciudades [ key ] << "\n"; // Mostrará " Lima " porque a Cada " Value " le corresponde una única " Key "



// II  RECORRIENDO EL MAPA ( Existen dos Posibilidades )
// a ) La Forma más " Tradicional " =   map  Tipo, Tipo :: DECLARANDO UN ITERATOR ( Y LUEGO ) " FOR CON PUNTEROS EN COUT "

map < string, string > :: iterator it;

for ( it = ciudades.begin( ); it != ciudades.end( ); ++it ) // Los " ( ) "  ' especifican ' " LO QUE EXISTA AL COMIENZO
                                                           // E INMEDIATAMENTE DESPUÉS ( x eso ' it != ' ) DEL FINAL ( "\0         " )
{

cout << it -> first << " = " << it -> second << "\n";

}


// b ) La forma más Fácil = "   AUTO&  ' Key  Value '  :  NombreDelMapa   "  ( Y LUEGO ) " FOR SIN PUNTEROS EN COUT "
// ESTA FORMA SÓLO SE CONSIGE  S E T E A N D O  este archivo p q sea compilado con C++ 17
// para aprovechar STRUCTURED BINDINGS de C++ 17

for ( auto& [k v] : ciudades )
{

cout << k << " = " << v << "\n";

}

*/
//3 MODIFICAR UN ELEMENTO = NombreDelMapa " . " FIND ( " Key " )

map < string, string > :: iterator it2 = ciudades.find("123");

if ( it2 != ciudades.end( ))
{
it2 -> second = "Trujillo";
}

for ( auto& [k v] : ciudades )
{

cout << k << " = " << v << "\n";

}

// 4 ELIMINAR UN ELEMENTO = NombreDelMapa " . " ERASE ( " Key " )

ciudades.erase("1");

for ( auto& [k v] : ciudades )
{

cout << k << " = " << v << "\n";

}


return 0;
}


Gracias x leeer el mensaje.




#3
Programación C/C++ / Re: Línea de Código : duda
18 Diciembre 2021, 02:51 AM
A mí esa línea de código no me arroja error .... quizás te referís a declaración de errores inexactas de algún IDE; Qué IDE usas ? En Codeblocks 20.03 no tuve problemas .... y mirá que es bastante " sensible "
#4
Programación C/C++ / Re: Línea de Código : duda
17 Diciembre 2021, 05:39 AM
Gracias totales !
Excelente explicación.
Sólo te presento aquí algunas Notas para que leas sobre ( y que me digas si no estoy en lo
correcto en los casos en que fuere ) tu Segundo Código, luego de la antepenúltima Línea :

Código (cpp) [Seleccionar]
// Como dije antes, aunque las variables globales se inicializan a 0 por defecto, es mejor especificarlo para facilitar su lectura
// Normalmente una variable sin inicializar se entiende que se le va a dar un valor concreto mas adelante y que no importa el valor
// que tenga en este momento
int variableGlobal = 0;
const int CONSTANTE_GLOBAL = 0;

void func() {
 int variableLocalFunc = 0;

 cout << "Variable global: " << variableGlobal << endl; // Como se llama en el main() despues de modificar el valor de variableGlobal -> Mostrara 10
//  cout << "Variable local main: " << variableLocalMain << endl; // ERROR: La variable local de main() no es accesible desde aqui
}

int main() {
 // Una variable local no se inicializa a 0 por defecto. Por lo tanto es necesario inicializarla explicitamente (dado el caso)
 // Al igual que antes, se puede dejar sin inicializar si se le va a dar un valor mas adelante (estando seguros de que no se va a usar esta variable antes de darle un valor)
 // Lo de inicializar siempre todas las variables al momento de declararlas ya depende de gustos
 int variableLocalMain = 0;

 variableGlobal = 10;
 cout << "Variable global: " << variableGlobal << endl; // Muestra: "Variable global: 10"

//  constanteGlobal = 10; // ERROR: Es una constante -> No se puede modificar  = = = = Debo anular la Línea, entiendo que es coherente hacerlo.
//  cout << "Constante global: " << constanteGlobal << endl; // Muestra: "Constante global: 0" = = = No muestra nada : Sólo arroja ERROR al compilar ( ? )


 // CIERRE DE PROGRAMA :
 // A C L A R A C I Ó N
 // Cerrando así, con " func(); ", CODE devuelve = " variableGlobal = 10 " pues tiene en cuenta tanto los Cuerpos ' int main( ) ' como ' void func( ) '
                                                // " variableGlobal = 10 "
 // P  E  R  O
 // Si cerrara con " return 0; " , CODE devuelve = " variableGlobal = 10 " pues tiene en cuenta sólo el Cuerpo ' int main( ) '

 func(); // X supuesto q para cerrar con " getch (); " se comportará como con " return 0; " pero habrá que ' dar Cabecera de #include <conio.h> '
}
#5
Programación C/C++ / Re: Línea de Código : duda
16 Diciembre 2021, 05:54 AM
Gracias x tu paciencia: Evidentemenete olvidé lo que me explicó Eternal Idol hace unas
semanas: que como " resultado " es una variable global, no hace falta inicializarla y por defecto
vale " 0 "
Ahora bien; reescribí el Código con todas Variables Locales, e inicializadas ( con excepción de " arreglo " pues espera que el usuario le ingrese Valores) : e igualmente funciona bien ......
Entonces, pues, si me podrías explicar si haber definido a "  ' resultado ' como Local y no Global " - aunque funcione bien el Código - sería un error conceptual ..... o en todo caso:
..... ¿ En qué caso/s específico/s es obligatorio definir a una variable como Global ?

Gracias y Saludos !




Cita de: Eternal Idol en 15 Diciembre 2021, 09:46 AM
No hay ninguna operador sobrecargado, es una elemental suma de enteros entre una variable global y un elemento de un array cuyo resultado se asigna a la variable global.

Es exactamente igual a esto:
Código (c++) [Seleccionar]
resultado += arreglo[a];

Me cito, cambia mayor por resultado.



Gracias : se me pasó que me lo habías recordado.
#6
Programación C/C++ / Línea de Código : duda
15 Diciembre 2021, 07:34 AM
La línea de código " resultado = resultado + arreglo[a] " no posee Operador + Sobrecargado,
cierto ? pues entiendo que no se está sumando un Elemento ( resultado ) del Array al mismo
Array ( arreglo[a] ) : Entonces, esto es lo que no entiendo ...... quizá si lo interpreto como   
" i = i + 1 " sea coherente ?? ; o entender que " si en resultado no hay ningún Valor, súmese a este un Valor del Array " (?) 

Código (cpp) [Seleccionar]
include <iostream>
using namespace std;


int a = 0; // Contador a 0

int resultado;

int cantidad; // Cantidad de Elementos del ARRAY



int main( )
{

cout << "\n\tIngrese la Cantidad de N\243meros que desea Sumar :";

cin >> cantidad;


int arreglo[ cantidad ]; // Nombre del ARRAY
                         // Se declara pues será utilizado en el WHILE
                         // reemplazando " a " POR " cantidad "


while ( a < cantidad ) // Mientras el Nro de veces que se va a repetir ( " a " )
                       // la cantidad de Nros ingresados SEA MENOR a la
                       // " cantidad " de Elementos del ARRAY
                       // ( ya q no queremos que se tenga en cuenta el " \0 " )


{

cout << "\n\tIngrese un N\243mero :";


cin >> arreglo[a];

a ++;

}

a = 0; // Se resetea el Contador pues será utilizado nuevamente


while ( a < cantidad )
{
resultado = resultado + arreglo [a];

a ++;

}

cout << "\n\tEL RESULTADO DE LA SUMA DE TODOS LOS NUMEROS INGRESADOS ES :" << "" << resultado << endl;

return 0 ;
}


Gracias x leer el Mensaje.
#7
2da ) Respuesta : Enorme explicación. Clara y precisa. Gracias !
Respecto de la 1era ) veré entonces cómo resolverlo. Saludos !


Ya logré el formato de Salida correcto. Faltaban ciertas llaves, y .... :
Código (cpp) [Seleccionar]

for ( i = 0; i < fa; i++ ) // BUCLE para las Filas " i " de A
{
for ( j = 0; j < cb; j++ ) // BUCLE para las Columnas " j " de B
{

cout << C[i][j] << " ";
}
cout << endl; // SALTO DE LÍNEA DEL FOR DE LAS FILAS
             // p q quede un " blank " e/ la 1er FILA y la 2da
}
}



MOD: No hacer doble post: Modificar el mensaje anterior para agregar lo que se quiera.
#8
Hola ! La sig Matriz C resultante del producto de A ( 2 Filas, 3 Columnas ) * B ( 3 Filas, 4 Columnas ) arroja los Valores correctos, pero no logro que la Matriz C salga por pantalla como debe ser, presentada bajo 2 Filas y 4 Columnas ya que es Condición del Producto entre dos Matrices que la Matriz Resultante tenga la misma cantidad de Columnas qude la 1 er Matriz ( Y )   la misma cantidad de Filas qude la 2 da Matriz .
//////
Por otra parte, si me explicaran porqué " el FOR de k " sólo tiene en cuenta las Columnas de A;
¿ No debería de haber a continuación " un FOR de k que recorra las Filas de " B " ????  
Lo digo porque:
"i" ( Y ) "j" recorren las Filas y Columnas de " C " ........ y ...
"k" realiza cada Operación recorriendo TANTO las Columnas de " A " ....
...... PERO TAMBIÉN las Filas de " B " !
El Comentario al lado " del FOR de k " lo tomé del razonamiento de quien explicó - súper didácticamente - el Código, pero, " que haya un único FOR de k " no lo entiendo

Código (cpp) [Seleccionar]

#include <iostream>
using namespace std;

int main( ){

  short int fa, ca, fb, cb, i, j, k;

  cout << "Ingrese Nro de Filas de la 1er Matriz: ";
  cin >> fa;

  cout << "Ingrese Nro de Columnas de la 1er Matriz: ";
  cin >> ca;


  cout << "Ingrese Nro de Filas de la 2da Matriz: ";
  cin >> fb;

  cout << "Ingrese Nro de Columnas de la 2da Matriz: ";
  cin >> cb;

  // DECLARACIÓN DE LAS TRES MATRICES
  int A[fa][ca];
  int B[fb][cb];
  int C[fa][cb];


  if ( ca == fb ) { // Si se cumple la Condición " 1 ) " del Producto e/ 2 Matrices se procede ...
    // Ingresar Valores de la matriz A
    cout << "\n\tIntroduzca los valores de la 1er Matriz: " << endl;

    for ( i = 0; i < fa; i++ ) // BUCLE para las Filas " i " de A
      // " i < fa " Porque fa va desde fa[0] hasta fa[\0] x lo q a todas las Filas de A le " sobrará fa[\0] "
      for ( j = 0; j < ca; j++ ) { // BUCLE para las Columnas " j " de A
      // " j < ca " Porque ca va desde ca[0] hasta ca[\0] x lo q a todas las Columnas de A le " sobrará ca[\0] "
        cout << "A["<<i<<"]["<<j<<"] :";
        cin >> A[i][j];
      }

    // Ingresar Valores de la matriz B
    cout << "\n\tIntroduzca los valores de la 2da Matriz: " << endl;

    for ( i = 0; i < fb; i++ ) // BUCLE para las Filas " i " de B
      for ( j = 0; j < cb; j++ ) { // BUCLE para las Columnas " j " de B
        cout << "B["<<i<<"]["<<j<<"] :";
        cin >> B[i][j];
      }

    // Cálculo de la Matriz C = A * B  ( C conformada a partir de Filas de A ( Y ) Columnas de B
    for ( i = 0; i < fa; i++ ) // BUCLE para las Filas " i " de A
      for ( j = 0; j < cb; j++ ) { // BUCLE para las Columnas " j " de B
        C[i][j] = 0;

        for ( k = 0; k < ca; k++ ) // PORQUÉ ????? sólo Col de A ...... y las Filas de B ? ; no era que k recorre ambas ??
          C [i][j]  =  C [i][j]  +  ( A [i][k]  *  B [k][j] );
      }

    cout << endl;

    for ( i = 0; i < fa; i++ ) // BUCLE para las Filas " i " de A
      for ( j = 0; j < cb; j++ ) // BUCLE para las Columnas " j " de B
        cout << C[i][j] << " ";

  } else cout << "\n\tLA MULTIPLICACIÓN ENTRE AMBAS MATRICES NO SE PUEDE REALIZAR" << endl;

  return 0;
}


Gracias x leer el mensaje.




MOD: Modificado el asunto del tema. No escribir todo en mayúsculas.
MOD: Indentar el código para que sea legible.
#9
Gracias x tu respuesta : intentaré encontrarle la vuelta.
#10
El resultado que devuelve este Producto me cuesta entenderlo : En principio intuyo que está mal por muchas razones ..... algunas, que el 1er resultado que debería de arrojar sería ( 32 + 35 + 16 = " 83 " ) Y además es notoria la diferencia entre los resultados 4to, 5to y 6to - Valores muy pequeños - respecto del resto de los resultados - Valores Enormes -

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

int main( )
{
int numerosmatrizA [3] [3] = { 4, 7, 2,
                              8, 9, 3,
                              1, 5, 5 };

int numerosmatrizB [3] [3] = { 8, 9, 1,
                              5, 6, 4,
                              8, 9, 2 };


int producto [3] [3];  // PRODUCTO DE DOS MATRICES  :  Se va multiplicando cada Elemento de la FILA de la 1er Matriz
                                                  //  con cada Elemento de la COLUMNA de la 2da Matriz
                                                  //  ( Cada Producto se suma al siguiente )
                                                  //  Ej = ((4*8) + (7*5) + (2*8)) + ...
                                                  //       ((4*9) + (7*6) + (2*9)) + ...


cout << "\n";                       // P q la Matriz PRODUCTO no quede pegada al borde sup
for ( int i = 0; i < 3; i = i + 1 ) // BUCLE para las Filas " i "
{
for ( int j = 0; j < 3; j = j + 1 ) // BUCLE para las Columnas " j "
{
for ( int k = 0; k < 3; k = k + 1 ) // BUCLE para q el Elemento que se ejecuta se vaya MOVIENDO
                                   // a través de las FILAS de la 1er Matriz y las Columnas de la 2da
{

cout << "\t";

producto [i] [j] = ( producto [i] [j] ) + ( numerosmatrizA [i] [k]  *  numerosmatrizB [k] [j] );

                                   // Queda fija la Fila i de numerosmatrizA mientras k se va desplazando por la misma de izq a der    ( LUEGO )

                                   // Queda fija la Columna j de numerosmatrizB mientras k se va desplazando por la misma de arr h ab


cout << producto [i] [j] << " " ;
}
}
cout << "\n";
}
return 0;
}


Gracias x leer el mensaje.