10 Tipos de variables II: Arrays

Empezaremos con los tipos de datos estructurados, y con el más sencillo de ellos: los arrays.

Nota: siguiendo con los términos en inglés, array es otro que no se suele traducir. El término arreglo no es en realidad una traducción, sino un anglicismo (un palabro, más bien, un término que no existe en español). Podríamos traducir array como colección, selección, o tal vez mejor, como formación. En este curso, de todos modos, usaremos el término array.

Los arrays permiten agrupar datos usando un único identificador. Todos los elementos de un array son del mismo tipo, y para acceder a cada elemento se usan índices.

Sintaxis:

<tipo> <identificador>[<núm_elemen>][[<núm_elemen>]...];

Los corchetes en negrita no indican un valor opcional: deben aparecer, por eso están en negrita. La sintaxis es similar que para las cadenas, de hecho, las cadenas no son otra cosa que arrays de caracteres (tipo char).

Desde el punto de vista del programador, un array es un conjunto de datos del mismo tipo a los que se puede acceder individualmente mediante un índice.

Por ejemplo, si declaramos un objeto de este modo:

    int valor;

El identificador 'valor' se refiere a un objeto de tipo int. El compilador sólo obtendrá memoria para almecenar un entero, y el programa sólo podrá almacenar y leer un único valor en ese objeto en cada momento.

Por el contrario, si declaramos un array:

    int vector[10];

El compilador obtendrá espacio de memoria suficiente para almacenar 10 objetos de tipo int, y el programa podrá acceder a cada uno de esos valores para leerlos o modificarlos. Para acceder a cada uno de los valores se usa un índice, que en este caso podrá tomar valores entre 0 y 9. Usando el valor del índice entre corchetes, por ejemplo: vector[0] o vector[4].

Es importante también tener en cuenta que el espacio de memoria obtenido para almacenar los valores de un array será contiguo, esto es, toda la memoria usada por un array tendrá direcciones consecutivas, y no estará fragmentada.

Otro detalle muy importante es que cuando se declaran arrays, los valores para el número de elementos deben ser siempre constantes enteras. Nunca se puede usar una variable para definir el tamaño de un array.

Nota: aunque la mayor parte de los compiladores permiten usar variables para definir el tamaño de un array, la norma no lo contempla. El hecho de que funcione no debe tentarnos a la hora de declarar arrays, nada nos asegura que en otros compiladores o en futuras versiones del que ahora usemos se mantenga ese funcionamiento.

Se pueden usar tantas dimensiones (índices) como queramos, el límite lo impone sólo la cantidad de memoria disponible.

Cuando sólo se usa un índice se suele hablar de vectores, cuando se usan dos, de tablas. Los arrays de tres o más dimensiones no suelen tener nombres propios.

Ahora podemos ver que las cadenas de caracteres son un tipo especial de arrays. Se trata en realidad de arrays de una dimensión de objetos de tipo char.

Los índices son números enteros, y pueden tomar valores desde 0 hasta <número de elementos>-1. Esto es muy importante, y hay que tener mucho cuidado, porque no se comprueba si los índices son válidos. Por ejemplo:

int Vector[10];

Creará un array con 10 enteros a los que accederemos como Vector[0] a Vector[9].

Como índice podremos usar cualquier expresión entera.

C++ no verifica el ámbito de los índices. Para poder hacerlo, el compilador tendría que agregar código, ya que los índices pueden ser variables, su valor debe ser verificado durante la ejecución, no durante la compilación. Esto está en contra de la filosofía de C++ de crear programas compactos y rápidos. Así que es tarea nuestra asegurarnos de que los índices están dentro de los márgenes correctos.

Si declaramos un array de 10 elementos, no obtendremos errores al acceder al elemento 11, las operaciones de lectura no son demasiado peligrosas, al menos en la mayoría de los casos. Sin embargo, si asignamos valores a elementos fuera del ámbito declarado, estaremos accediendo a zonas de memoria que pueden pertenecer a otras variables o incluso al código ejecutable de nuestro programa, con consecuencias generalmente desastrosas.

Ejemplo:

int Tabla[10][10];
char DimensionN[4][15][6][8][11];
...
DimensionN[3][11][0][4][6] = DimensionN[0][12][5][3][1]; 
Tabla[0][0] += Tabla[9][9];

Cada elemento de Tabla, desde Tabla[0][0] hasta Tabla[9][9] es un entero. Del mismo modo, cada elemento de DimensionN es un carácter.

Inicialización de arrays

Los arrays pueden ser inicializados en la declaración.

Ejemplos:

float R[10] = {2, 32, 4.6, 2, 1, 0.5, 3, 8, 0, 12}; 
float S[] = {2, 32, 4.6, 2, 1, 0.5, 3, 8, 0, 12}; 
int N[] = {1, 2, 3, 6}; 
int M[][3] = { 213, 32, 32, 32, 43, 32, 3, 43, 21}; 
char Mensaje[] = "Error de lectura";
char Saludo[] = {'H', 'o', 'l', 'a', 0};

Cuando se inicializan los arrays en la declaración no es obligatorio especificar el tamaño para la primera dimensión, como ocurre en los ejemplos de las líneas 2, 3, 4, 5 y 6. En estos casos la dimensión que queda indefinida se calcula a partir del número de elementos en la lista de valores iniciales. El compilador sabe contar y puede calcular el tamaño necesario de la dimensión para contener el número de elementos especificados.

En el caso 2, el número de elementos es 10, ya que hay diez valores en la lista.

En el caso 3, será 4.

En el caso 4, será 3, ya que hay 9 valores, y la segunda dimensión es 3: 9/3=3.

Y en el caso 5, el número de elementos es 17, 16 caracteres más el cero de fin de cadena.

Operadores con arrays

Ya hemos visto que se puede usar el operador de asignación con arrays para asignar valores iniciales.

El otro operador que tiene sentido con los arrays es sizeof.

Aplicado a un array, el operador sizeof devuelve el tamaño de todo el array en bytes. Podemos obtener el número de elementos, si lo necesitamos, dividiendo ese valor entre el tamaño de uno de los elementos.

int main()
{
   int array[231];
   int nElementos;
   
   nElementos = sizeof(array)/sizeof(int);
   nElementos = sizeof(array)/sizeof(array[0]);
   return 0;
}

Las dos formas son válidas, pero la segunda es, tal vez, más general.

La utilidad de esta técnica es, como mucho, limitada. Desde el momento en que se deben usar constantes al declarar los arrays, su tamaño es siempre conocido, y por lo tanto, su cálculo es predecible.

Algoritmos de ordenación, método de la burbuja

Una operación que se hace muy a menudo con los arrays, sobre todo con los de una dimensión, es ordenar sus elementos.

Tenemos una sección dedicada a los algoritmos de ordenación, pero ahora veremos uno de los más usados, aunque no de los más eficaces. Se trata del método de la burbuja.

Este método consiste en recorrer la lista de valores a ordenar y compararlos dos a dos. Si los elementos están bien ordenados, pasamos al siguiente par, si no lo están los intercambiamos, y pasamos al siguiente, hasta llegar al final de la lista. El proceso completo se repite hasta que la lista está ordenada.

Lo veremos mejor con un ejemplo:

Ordenar la siguiente lista de menor a mayor:

15 3 8 6 18 1

Empezamos comparando 15 y 3. Como están mal ordenados los intercambiamos, la lista quedará:

3 15 8 6 18 1

Tomamos el siguiente par de valores: 15 y 8, y volvemos a intercambiarlos, y seguimos el proceso...

Cuando lleguemos al final la lista estará así:

3 8 6 15 1 18

Empezamos la segunda pasada, pero ahora no es necesario recorrer toda la lista. Si observas verás que el último elemento está bien ordenado, siempre será el mayor, por lo tanto no será necesario incluirlo en la segunda pasada. Después de la segunda pasada la lista quedará:

3 6 8 1 15 18

Ahora es el 15 el que ocupa su posición final, la penúltima, por lo tanto no será necesario que entre en las comparaciones para la siguiente pasada. Las sucesivas pasadas dejarán la lista así:

3 6 1 8 15 18
3 1 6 8 15 18
1 3 6 8 15 18

Nota: para mayor información sobre algoritmos de ordenación puedes consultar la sección dedicada en nuestra página: http://c.conclase.net/orden/ realizada por Julián Hidalgo.

Problemas (creo que ya podemos empezar :-)

  1. Hacer un programa que lea diez valores enteros en un array desde el teclado y calcule y muestre: la suma, el valor promedio, el mayor y el menor.
  2. Hacer un programa que lea diez valores enteros en un array y los muestre en pantalla. Después que los ordene de menor a mayor y los vuelva a mostrar. Y finalmente que los ordene de mayor a menor y los muestre por tercera vez. Para ordenar la lista usar una función que implemente el método de la burbuja y que tenga como parámetro de entrada el tipo de ordenación, de mayor a menor o de menor a mayor. Para el array usar una variable global.
  3. Hacer un programa que lea 25 valores enteros en una tabla de 5 por 5, y que después muestre la tabla y las sumas de cada fila y de cada columna. Procura que la salida sea clara, no te limites a los números obtenidos.
  4. Hacer un programa que contenga una función con el prototipo bool Incrementa(char numero[10]);. La función debe incrementar el número pasado como parámetro en una cadena de caracteres de 9 dígitos. Si la cadena no contiene un número, debe devolver false, en caso contrario debe devolver true, y la cadena debe contener el número incrementado.
    Si el número es "999999999", debe devolver "0". Cadenas con números de menos de 9 dígitos pueden contener ceros iniciales o no, por ejemplo, la función debe ser capaz de incrementar tanto la cadena "3423", como "00002323".
    La función main llamará a la función Incrementar con diferentes cadenas.
  5. Hacer un programa que contenga una función con el prototipo bool Palindromo(char palabra[40]);. La función debe devolver true si la palabra es un palíndromo, y false si no lo es.
    Una palabra es un palíndromo si cuando se lee desde el final al principio es igual que leyendo desde el principio, por ejemplo: "Otto", o con varias palabras "Anita lava la tina", "Dábale arroz a la zorra el abad". En estos casos debemos ignorar los acentos y los espacios, pero no es necesario que tu función haga eso, bastará con probar cadenas como "anitalavalatina", o "dabalearrozalazorraelabad".
    La función no debe hacer distinciones entre mayúsculas y minúsculas.

Puedes enviar las soluciones de los ejercicios a nuestra dirección de correo: ejercicioscpp@conclase.net. Los corregiremos y responderemos con los resultados.

Comentarios de los usuarios (89)

oswaldo jimenez
2010-04-06 21:59:18

Respetados señores

Estoy haciendo un curso de iniciación en la programación en C++ en el SENA de Colombia y allí nos comentaron que podíamos tener mayor información en la página de ustedes (c.conclase.net) y he estado estudiando pero les comentó que son muy pocos los ejercicios resultos que le puedan servir al estudiante como guía.

Actualmente estudio el capítulo 10: Variables II: Arrays donde hay varios ejercios (problemas) pero ninguno está resuledo.

Comedidamente les pido el favor si me pueden dar la solución del alguno de ellos porque me servirá de guía

Cordialmente,

Oswaldo Jiménez

Cali - Colombia

Christian
2010-05-15 18:01:46

Hola.

Estoy aprendiendo a programar, y en nuestro avance estamos en bucles for while do while , pero siento que el avance va muy lento porque muchos de mi salon estan perdidos o talvez es el poco interes que le ponen al curso pero en fin lo que es yo encontre esta pagina y estuve leyendo y aprendiendo muchas cosas y me interese por este tema de arrays pese a que aun no me lo han enseñado me atrevi a entender la logica de su empleo y hice el ejercicio 1 para el man de Colombia , ahora no presumo saber pero si me interesa aprender espero que este bien y si no ojala alguien lo corrija, uso la plataforma c++ CODELITE. saludos

#include \"iostream\"
using namespace std;
int main ()
{
	int n,suma,pro,ma,me,array[10];
	suma=0; ma=0; me=99999999;
	cout<<\"Ingrese los 10 numeros del arreglo :\"<<endl;
	for (int c=0;c<10;c++) {
	cin>>n;
	array[c]=n;
	suma+=array[c];
	if (array[c]>ma) {
		ma=array[c];
	}
	if (array[c]<me) {
		me=array[c];
	}
	array[c]++;
	}
	cout<<\"la suma es : \"<<suma<<endl<<\"el promedio es : \"<<suma/10<<endl<<\"El mayor es :\"<<ma<<endl<<\"El menor es :\"<<me;
}

PD:para compilar el codigo eliminar los slash \\

Christian
2010-05-15 19:04:12

Hola.

Conforme voy aprendiendo debo corregir q ese array[c]++; esta mal y de mas pese a que no afecta al proceso por ser reemplazado cada vez que se repite el bucle por la variable n ya que en el bucle ya habia considerado que la ubicacion de los valores para el array[c] aumente de 1 en 1 cada vez que se repita el bucle.

Javi
2010-06-14 01:56:47

Hola a todos. Queria aportar mi versión del ejercicio 2 de ordenación. No será el más optimizado pero funciona bien. Un saludo.

/*
	Ejercicio 2. Tema 10. C conclase
	Hecho por Javier Cancio
*/

#include 

using namespace std;

int numeros[10];

void burbuja (int ordenacion);


int main () {

	cout << \"Introduzca 10 enteros... \" << endl;

	for (int i=0; i<10; i++) {

		cout << \"Introduzca el número para la posición \" << i << \": \";
		cin >> numeros[i];
	}

	for (int i=0; i<10; i++)
		cout << numeros[i] << \" \";

	cout << endl;

	burbuja(0);

	for (int i=0; i<10; i++)
		cout << numeros[i] << \" \";

	cout << endl;

	burbuja(1);

	for (int i=0; i<10; i++)
		cout << numeros[i] << \" \";

	cout << endl;

}


/*
* Esta funcion ordena un array de mayor a menor o de menor a mayor en función del valor del argumento:
* 0: De menor a mayor
* 1: De mayor a menor
* 
* Cualquier otro valor asumirá una ordenación 1
*/
void burbuja(int ordenacion){

	// Ordenamos de menor a mayor, aplicando el metodo de burbuja


		int pasada=0;		
		int aux, necesario;

		do {
			necesario=0;
			for (int i=0; (i<(9-pasada)); i++) {

				if (ordenacion == 0) {
					if (numeros[i] > numeros[i+1]){
						aux=numeros[i];
						numeros[i]=numeros[i+1];
						numeros[i+1]=aux;			
						necesario=1;
					}
				} else {
					if (numeros[i] < numeros[i+1]){
						aux=numeros[i];
						numeros[i]=numeros[i+1];
						numeros[i+1]=aux;			
						necesario=1;
					}
				}
			}
			pasada++;
		} while (necesario);

}
b0ch0n
2010-09-09 21:04:25
/*
* Copypaste(p)2010 by b0ch0n XD
* 1.  Hacer un programa que lea diez valores enteros
* en un array desde el teclado y calcule y muestre:
* la suma, el valor promedio, el mayor y el menor.
*/

Nota del administrador: Hemos eliminado el código ya que las soluciones a los problemas no se han incluido de forma intencionada. La idea es que cada uno haga sus propios problemas a su modo.

b0ch0n
2010-09-09 23:10:34

Algo más de práctica

Nota del administrador: Hemos eliminado el código ya que las soluciones a los problemas no se han incluido de forma intencionada. La idea es que cada uno haga sus propios problemas a su modo.

Saludos

b0ch0n
2010-09-10 01:37:28

Nota del administrador: Hemos eliminado el código ya que las soluciones a los problemas no se han incluido de forma intencionada. La idea es que cada uno haga sus propios problemas a su modo.

b0ch0n
2010-09-11 18:13:42

poco optimizado pero funca

Nota del administrador: Hemos eliminado el código ya que las soluciones a los problemas no se han incluido de forma intencionada. La idea es que cada uno haga sus propios problemas a su modo.

b0ch0n
2010-09-11 19:19:45

Cuando iba por el tercero vi que los ejercicios se podian mandar por e-mail jeje...pero ya que estaba seguí hasta el último.

Nota del administrador: Hemos eliminado el código ya que las soluciones a los problemas no se han incluido de forma intencionada. La idea es que cada uno haga sus propios problemas a su modo.

Ceci
2011-03-09 20:40:05

Hola buenas tardes tengo un problema con este codigo:

la idea de mi programa es rellenar una matriz NxM

de la siguiente manera

1 3 6 9 el siguiente codigo solo rellena la matriz hasta

2 5 8 11 la mitad, es decir, hasta la diagonal principal

4 7 10 12 el problema esta en rellenar la otra mitad ya que deberia ser un ciclo similar pero cuando lo intento se daña el primer ciclo, aqui esta la funcion relleno

void Relleno( int A[10][10], int Clim, int Flim) //funcion para rellenar la matriz

{int cont,col,K,i;

cont=1;

K=0;

while(K<Clim&&K<Flim)

{

for( i=0;i<=K;i++)

{

A[K-i][i]=cont;

cont++;

col=1;

}

K++;

};

Ceci
2011-03-09 20:41:38

omitir col=1; del codigo :)

jose agustin arroyo
2011-03-16 07:01:30

mire quisiera observar la respuesta el problema 5 de arrays me urge por favor

Ramon Ant Caraballo
2011-03-23 00:19:50

Los trabajo estan bien realizado pero le fartan un destalle

abrir los espacio

Gerard
2011-03-25 21:07:32

Es la primera vez que entro, y me gusta el curso, para el resto de los alumnos estoy probando los codigos y funcionan correctamente. De momento lo único que encuentro mal es que cuando escribes el texto de explicación no se diferencia entre o y 0, esto es por el tipo de letra.

Alberto Marquez
2011-05-18 04:18:07

Con respecto a los arrays, y matrices, tanto tiempo queriendo dominar esto mi miren lo que me salio, jeje, me quedo al peluche:

//BloodSheet DEV C++ hecho por: Alberto Márquez
int main
{
int a=0; int b=0;
int matriz[3][3]={{3,6,9},{15,8,10},{20,12,4}};
    matriz[3][3]=0; //Como ya esta declarada, digo su valor
                    //asi como hice con int a=0 y b=0
                    //no se si sea valido pero me funciona:-)
for(a=0;a<3;a++){
for(b=0;b<3;b++){
printf(" %d ",matriz[a][b]);
}cout << "\n";}
//Parte 2 va aqui
//Parte 3 va aqui
system ("PAUSE"); return EXIT_SUCCESS;
}

Y si quiero sumar dos valores hago asi (Parte 2):

//matriz[3][3]=0;
matriz[3][3]= matriz[0][0] + matriz[3][2]
printf("Suma de 2 Valores: %d \n", matriz[3][3]);

Y si quiero multiplicar toda una diagonal hago asi (Parte 3);

//matriz[3][3]=0;
matriz[3][3]=matriz[0][0] * matriz[1][1]*matriz[2][2]
printf("Suma de la Diagonal: %d \n", matriz[3][3]);

Es decir, puedo elegir que valores puedo usar y que hacer con ellos, como veran ese //matriz[3][3], era porque tenia que decir su valor inicial, pero luego dije, sera que puedo decir su valor, justo despues de ser declarada, y pues, me funciona tambien.

Steven R. Davidson
2011-05-19 02:34:02

Hola Alberto,

Al escribir:

matriz[3][3] = 0;
estás accediendo al array de índice 3 para acceder al entero de índice 3, para luego asignar el valor de 0 (cero). El problema es que estos índices sobrepasan el intervalo de valores válidos para los índices de un array. Recuerda que los índices SIEMPRE empiezan por 0 (cero). Este array, 'matriz', es de 3 arrays de 3 enteros. Por lo tanto, los índices van de 0 á 2. Esto significa que el último elemento de la matriz es:
matriz[2][2]
Espero haber aclarado el tema.

Steven

Dario
2011-06-20 01:08:31

Hola ! quisiera saber como puedo hacer para ordenar datos e ingresar datos al mismo tiempo , mientras ordena poder ingresar mas datos al arreglo .. se me ocurre con hilos pero no se como puedo programar eso .. Saludos!

berAS
2011-06-22 07:10:22

1.- Hacer un programa que lea diez valores enteros en un array desde el teclado y calcule y muestre: la suma, el valor promedio, el mayor y el menor.

Solución:

/*
Autor: berAS.
Fecha: junio 22, 2011.
Descripción: Lee 10 números del teclado y muestra su suma total y promedio además del menor y el mayor.
*/
#include <iostream>
using namespace std;

int main() {
    int array[10], sum = 0, higher, lowest;

    /* Lee 10 valores del teclado y los guarda en "array". */
    cout << "Introduce 10 valores enteros:\n\n";
    for (int i=0; i<10; i++) {
        cin >> array[i];
    }

    /* Cálculos. */
    higher = lowest = array[0];
    for (int i=0; i<10; i++) {
        sum += array[i];
        if (higher < array[i]) {higher = array[i];}
        if (lowest > array[i]) {lowest = array[i];}
    }

    /* Resultados. */
    cout << "\n--\n\nTotal: " << sum << endl << "Media: " << (float)sum/10 << endl << "Mayor: " << higher << endl << "Menor: " << lowest << endl;
}
Carlos
2011-06-28 21:39:02

Hola a todos!! Primero enhorabuena por la página, está genial. Ahora el asunto de mi comentario:

Hoy debo de estar out porque no entiendo el enunciado del ejercicio 4, a ver si la funcion debe recibir un array de caracteres de 10 elementos, ¿como le doy el valor 0? no debe de tener siempre 10 elementos? o esa podria transformarla en 0000000000 pero no en 0. Lo mismo pasa si le pasamos un array con menos de 10 digitos,Por ejemplo si pasamos el numero 012, (yo declaro diversos arrays de chars en main para pasarlos como parametros) y en la funcion tenemos un for hasta 10 (el tamaño supuesto del array) nos va acceder a fuera de nuestro array original. A lo mejor me he perdido la lección donde sale como averiguar el tamaño de un array, pero de lo poco que se de C ahi no se podia, si en Java que ya hay definido un metodo. Espero haberme hecho entender y a ver si me ayudais que estoy hecho un lio.

Gracias.

Steven R. Davidson
2011-06-28 23:50:13

Hola Carlos,

Vayamos por pasos y te contesto a cada pregunta.

En primer lugar, estás confundiendo la cantidad máxima de elementos de un array con la cantidad actual de elementos que usaremos de un array. Por ejemplo,

int nums[100];

nums[0] = 4;
nums[1] = -3;
nums[2] = 17;

for( int i=0; i<3; i++ )
  cout << nums[i] << ' ';

cout << endl;

Aquí hemos creado un array de 100 enteros, pero hemos decidido usar solamente los tres primeros elementos del array. Nadie nos obliga a usar los 100 que es la cantidad máxima.

En general, mantendríamos otra variable para indicar la cantidad actual del "subarray" que queremos usar. Por ejemplo,

int nums[100];
int nCantActual = 3;

nums[0] = 4;
nums[1] = -3;
nums[2] = 17;

for( int i=0; i<nCantActual; i++ )
  cout << nums[i] << ' ';

cout << endl;

En el caso de una cadena de caracteres, tenemos algo parecido. Sin embargo, no es necesario mantener una variable aparte para indicar la cantidad actual de caracteres. Esto es porque se implemente otra técnica que se basa en la auto-terminación. Es decir, un carácter especial indica el final de la información; es decir, el final de la cadena. Por ejemplo,

char cadena[100];

cadena[0] = 'H';
cadena[1] = 'o';
cadena[2] = 'l';
cadena[3] = 'a';
cadena[4] = '\0';

cout << cadena << endl;

Aquí saldra en pantalla: Hola, porque el primer carácter nulo encontrado indica el final de la cadena. Sin embargo, el array 'cadena' puede contener hasta 100 caracteres que es la cantidad máxima. En nuestro caso, nos interesa usar 4 caracteres seguidos del carácter nulo, para indicar el final de la información.

En segundo lugar, no se trata de dar el valor de 0 (cero), sino de "0"; es decir, la cadena que contiene el carácter '0' seguido del carácter nulo. Lo comento, por si acaso no te habías fijado que se trata de un carácter.

Como se trata de una cadena de caracteres, el final de la información - de la cadena en sí - es el carácter nulo. Este carácter debe aparecer irrelevantemente de la cantidad de elementos del array. Nos fijamos en este carácter la primera vez que aparece para saber que la cadena termina.

En el ejemplo que das, con una cadena que contenga "012" representada como un array de 10 caracteres, no te vas a sobrepasar los límites del array, pero sí los de la cadena, porque la información (la cadena en sí) es de 3 caracteres seguidos de un carácter nulo. Si rebasamos el 4º carácter para llegar hasta el décimo, entonces nos encontraremos caracteres sin sentido, porque no pertenecen a la cadena, pero sí están guardados en el array.

Por cierto, para estas cuestiones y cualesquier otras acerca de los ejercicios del curso, recomendamos enviar un correo-e a: ejercicioscpp@conclase.net

Espero haber aclarado las dudas.

Steven

Carlos
2011-06-29 00:54:18

Gracias Steven, creo que mi problema es que las cadenas que pasaba como parámetros las declaraba como char prueba1[] = {0,1,2} por ejemplo y por lo que entiendo debo declararlas como char prueba1[] = {'0','1','2'}. Perdón por poner aquí la duda, pensaba que el correo era solo para cuando los tuviese resueltos enviarlos para corrección, cuando los tenga todos hechos los envío y si tengo alguna duda con este os la comento.

De nuevo, gracias

Carlos
2011-06-29 01:02:05

Se me olvidó incluir que debo añadir el caracter nulo de terminación al declarar los arrays de prueba xDD

Steven R. Davidson
2011-06-29 01:11:55

Hola Carlos,

Podrías inicializar la cadena como un array o como una cadena de caracteres. Esto es,

char cad[10] = "012";

que es más fácil de escribir, entender, y además agrega el carácter nulo al final de la cadena dada.

Aconsejo que veas el capítulo 8 ( http://c.conclase.net/curso/index.php?cap=008#inicio ) que introduce el concepto de una cadena de caracteres.

En cuanto a la dirección de correo-e, ésta sirve para los ejercicios del curso, que puede ser para enviarlos para que los corrijamos como también puede ser para aclarar alguna duda sobre ellos. Es decir, cualquier tema acerca de los ejercicios.

Hasta pronto,

Steven

josep
2011-06-30 10:41:08

hola, estoy intentando hacer el problema dos de arrays.

el caso es que he hecho una función para imprimir un array en pantalla y otra para ordenar arrays ; recibe array y un bool para indicar si en orden ascendente o descendente.

pero no se exactamente que pasa que no me deja compilar. he aqui el codigo:

/*Hacer un programa que lea diez valores enteros en un array y los muestre en pantalla.

Después que los ordene de menor a mayor y los vuelva a mostrar. Y finalmente que los

ordene de mayor a menor y los muestre por tercera vez. Para ordenar la lista usar una

función que implemente el método de la burbuja y que tenga como parámetro de entrada el

tipo de ordenación, de mayor a menor o de menor a mayor. Para el array usar una

variable global.*/

#include <iostream>

using namespace std;

/*declare la meva primera funció en c++!!!!!!!!!!!*/

int OrdenaNum ( int llistapaordenar[], bool creixodecreix)/*ordena pel metode de la bombolla*/

{

int numauxiliar, iteracions;

for (iteracions=sizeof(llistapaordenar); iteracions>1;iteracions--){

for (int i=0; i<iteracions ;i++){/*ojo que no se quin rollo pot haver xq si s'entra el array per teclat o es defineix en la declaració,*/

/* pot haver o no un 0 al final, per exemple pa ficar deu num. fem un array[11] ho dic per lo del sizeof*/

if (creixodecreix=1) /*si li hem dit que ordene de - a +, ordre ascendent*/

{ if (llistapaordenar[i]> llistapaordenar[i+1])/*aci el que es fa es guardar el numero en numauxiliar, posar el gran a i+1 i després numauxiliar en i*/

{

numauxiliar=llistapaordenar[i+1];

llistapaordenar[i+1]=llistapaordenar[i];

llistapaordenar[i]=numauxiliar;

}}

else

if (llistapaordenar[i]< llistapaordenar[i+1]) /*ordena en descendent*/

{

numauxiliar=llistapaordenar[i+1];

llistapaordenar[i+1]=llistapaordenar[i];

llistapaordenar[i]=numauxiliar;

}

}}

return llistapaordenar;

}

int TrauLlistaPantalla( int arrall[]){ /*funcio per a imprimir en pantalla el array*/

int dim=sizeof (arrall);

{for (int i=0;i<dim; i++);/*for per a mostrar la llista tal cual la captem)*/

cout << arrall[dim] <<" ";

return 0;

}}

int main(){

int llista[11];

cout << "Introdueix 10 numeros, moniato." << endl;

for (int i=0; i<11;i++)/* for per a capturar el array llista de 10 num*/

{

cin >> llista[i];

}

TrauLlistaPantalla(llista);

/*ara en ordre creixent*/

llista= OrdenaNum(llista,1) ;

TrauLlistaPantalla(llista);

/*ara en decreixent*/

llista= OrdenaNum (llista,0);

TrauLlistaPantalla(llista);

system ("pause");

return 0;

}

He leido que no se puede devolver un array de una función, que en todo caso sería un puntero. Entonces, si la función devuelve un puntero, el compilador decía algo así como que hay un problema debido a que no se conoce el tamaño del array (claro, porque está en una fución que quiere ser valida para cualquier tamaño de array).

Como puedo hacer lo de el puntero para no usar una variable global que sea compartida por main y otras funciones?

Agradecería que alguien que me echase una mano.

juan Carlor
2011-08-09 02:53:54

hola

porfa me puede

ayudar a guardar una variable

coon letra

para q el mensaje me imprima el nombre

cuando le `ponga el nombre del usuario

porfa lo necesito

Steven R. Davidson
2011-08-09 20:05:02

Hola Juan Carlor,

Como un nombre se compone de varias letras, lo que pides es guardar varios caracteres. Para guardar varios caracteres y tratarlos como una entidad, necesitas un array de 'char' para representar una cadena de caracteres.

Explicamos las cadenas de caracteres en el capítulo 8 y aquí, en el capítulo 10, hablamos de los arrays, en general. Sugiero que eches un vistazo al capítulo 8 ( http://c.conclase.net/curso/?cap=008#inicio ) y a los ejemplos del capítulo 9 ( http://c.conclase.net/curso/?cap=009p#resueltos8_9 ).

Te doy un breve ejemplo,

char szNombre[32] = "";

cout << "Nombre: ";
cin >> szNombre;

Espero que esto te oriente.

Steven

lady
2011-08-29 23:09:25

Como podria realizar este ejercicio?

gracais

Se desea Obtener el promedio de "g" grupos que estan en un mismo año escolar; siendo que cada grupo puedo tener "n" alumnos que cada alumno puede llevar "m" materias y que en todas las materias se promedian tres calificaciones para obtener el promedio de la materia.

Loque se desea desplegar es el promedio de los grupos el promedio de cada grupos y promedio de cada alumno.

lady
2011-08-29 23:09:25

Como podria realizar este ejercicio?

gracais

Se desea Obtener el promedio de "g" grupos que estan en un mismo año escolar; siendo que cada grupo puedo tener "n" alumnos que cada alumno puede llevar "m" materias y que en todas las materias se promedian tres calificaciones para obtener el promedio de la materia.

Loque se desea desplegar es el promedio de los grupos el promedio de cada grupos y promedio de cada alumno.

agus
2011-10-15 19:19:21

hola estoy trabajando en mi proyecto de programacion y debo hacer un programa para un Banco que guarde los depositos de 23 clientes y los muestre.

recien estoy iniciando me podrian ayudar??

GRACIAS

Jack
2011-11-07 21:42:52

Ejercicio :1

#include<iostream>

int main(int argc, char* argv[])

{

using namespace std;

int num[10];

//Ingresando los valores del arreglo

for(int i=0;i<10;i++){

cin>>num[i];

}

//La suma del arreglo

int s;

s=num[0]+num[1]+num[2]+num[3]+num[4]+num[5]+num[6]+num[7]+num[8]+num[9];

cout<<"La suma del arreglo es :"<<s<<endl;

//El promedio del arreglo

int prom;

prom=s/10;

cout<<"EL promedio del arreglo es :"<<prom<<endl;

int menor;

menor=num[0];

for(int j=1;j<10;j++){

if(menor>num[j])

{

menor=num[j];

}

}

cout<<"El menor numero del arreglo es :"<<menor<<endl;

int mayor;

mayor=num[0];

for(int k=1;k<10;k++){

if(mayor<num[k])

{

mayor=num[k];

}

}

cout<<"El mayor numero del arreglo es :"<<mayor<<endl;

system("pause");

return 0;

}

gustavo ruiz apodaca
2011-11-09 05:19:01

ola amigos de esta pagina tengo una gran duda no se como multiplicar en un arreglo unidimensional termino por termino es para multiplicar 2 polinomios

Steven R. Davidson
2011-11-09 12:36:49

Hola Gustavo,

Para realizar esta tarea, necesitas recorrer ambos arrays. Esto significa que tienes que ir elemento a elemento de un array por cada elemento del otro array. Necesitarás, un bucle anidado en otro bucle.

En tu caso, necesitas multiplicar términos de un polinomio, lo que implica dos cosas:

1. suma de exponentes, y

2. multiplicación de sus coeficientes.

Espero que esto te oriente.

Steven

Cleyvin
2011-11-10 06:03:54

Hola a todos, este es el ejercicio numero 1 de los arrays!

Me encanta este curso! Gracias Steve!!!

/*				   USO DE ARRAYS
 * Este programa esta dedicado al uso de los array...
 * 
 * *arrays.cpp*
 * 
 * Copyright (C)	Cleyvin		<iCleyvin@gmail.com>
 */
 
#include <iostream>		//Libreria para usar cout, cin
using namespace std;

int valor[11];			//Cadena de enteros de tamaño 11

int main()			//Funcion principal y única :P
{
system("cls");			//Limpia pantalla. Si no compila, borrar esta linea
	
	
	cout << "Introduzca los 10 valores para el array.\n" << endl;
	for (int i = 0; i < 10; i++)			//Bucle para la recolección de los valores
	{
		cout << "\aValor [" << i + 1 << "]: ";
		cin >> valor[i];
	}
	
	
	int suma(0), promedio;					//Variables para la suma y el promedio
	int mayor = valor[0], menor = valor[0];	//Variables inicializada con el elemento 0 del array
	
	for (int i = 0; i < 10; i++)	//Bucle para la suma y buscar el mayor y menor de los elmentos
	{
		suma = valor[i] + suma;
		
		while (mayor < valor[i])	//Bucle para sacar el mayor de los numeros
		{
			mayor = valor[i];
		}
		while (menor > valor[i])	//Bucle para sacar el menor de los numeros
		{
			menor = valor[i];
		}
	}
	valor[10] = 0;		//Fin de cadena

system("cls");			//Limpia pantalla. Si no compila, borrar esta linea
	
	//Aquí empiezo a imprimir los datos
	cout << "\aValores del array\n" << endl; 
	for (int i = 0; i < 10; i++)		
	{
			cout << "Valor[" << i + 1 << "]: " << valor[i] << endl;
	}
	
	promedio = suma/10;			//Calcula valor promedio
	cout << "\nSuma de los elmentos   : " << suma << endl;
	cout << "El valor promedio      : " << promedio << endl; 
	cout << "El mayor de los valores: " << mayor << endl;
	cout << "El menor de los valores: " << menor <<endl;
	
	cout << "\n Fin de la transmicion!!! ;)\n" << endl;
system("pause");		//Pause el programa. Si no compila, borrar esta linea
return 0;
}


Jordi
2012-02-17 11:48:23

Hola a todos,

estoy peleandome con el cuarto ejercicios de arrays, pero no consigo acabarlo.

De momento, el programa lee una cadena char de 9 digitos, la muestra, i ejecuta la funcion Incrementa. La funcion traduce la cadena de caracteres introducida a una cadena de enteros.

El problema viene cuando quiro incrementar la cadena de enteros, me interesaria pasarlo primero a un entero.

Alguien sabe como se podria hacer?

Pongo el código para que se vea mas claro.

// funcion incrementa ---------------------------------------
bool Incrementa(char numero[9]){
     int n[9];
     int i;
     for(i=0; i<9; i++){
              n[i]= (int(numero[i]))-48; 
     }
     
     
     for(i=0; i<9; i++){
             cout << n[i];
             }
    
     return (0);


     }

Saludos.

Jordi
2012-02-17 13:06:37

Me respondo yo mismo al mensaje anterior.

Era más fàcil de lo que pensaba.

Existe la funcion atoi que convierte una cadena de caracteres en un entero. Queda de esta forma:

// funcion incrementa ---------------------------------------
bool Incrementa(char numero[9]){
     int n;
    
     n= atoi(numero);
     cout << n << endl;
     if(n==999999999){
                      n=0;
                      cout << n;
     }else{
           cout << n+1;
     }
     return (0);

Saludos

Julian Farfan
2012-03-05 21:51:39

*** Realizo mi aporte al ejercicio 10.1 ***

/*Hacer un programa que lea diez valores enteros en un array desde el teclado y
calcule y muestre: la suma, el valor promedio, el mayor y el menor.*/



#include<iostream>
using namespace std;



int main()
{
    int numeros[10],x=0,max=0,min;
    double prom;
        
    for(int i=0;i<10;i++) // Bucle para pedir los numeros
    {
            cout<<"Ingrese un numero: ";cin>>x; // Pide un numero y lo almacena en x
            numeros[i]=x; // Ingresa el valor que toma x en la posicion i del vector 
            } 
            x=0;// Reiniciamos el valor de x para reducir variables
            
            for(int i=0;i<10;i++) // Bucle para la suma
            {
              x+=numeros[i];// Suma los valores  del bucle en x
              }
            for(int i=0;i<10;i++) // // Bucle para buscar el numero mas grande
              {
                    
                    if(max<numeros[i])
                    max=numeros[i];
                    }
            
            min=numeros[0]; //Asignamos a min el primer valor del vector para empezar con la comparacion
            for(int i=0;i<10;i++) // Bucle para buscar el numero mas pequeño
            {
                    if(numeros[i]<min)
                    min=numeros[i];
                    }
              
              system("CLS");// Limpia la Pantalla
              cout<<"*-*-*-*-*- Resultados de numero ingresados -*-*-*-*-* "<<endl<<endl<<endl;
              prom=x/9.0;//Variable para realizar el calculo del promedio
              cout<<"La suma de los numeros es: "<<x<<endl;        
              cout<<"El promedio de los numeros es: "<<prom<<endl;
              cout<<"El numero mayor es: "<<max<<endl;
              cout<<"El numero menor es: "<<min<<endl;
              
             system("pause");
    }

Julian Farfan
2012-03-07 01:54:14

Realizo mi aporte al ejercicio 10.2

/*Hacer un programa que lea diez valores enteros en un array y los muestre en
pantalla. Después que los ordene de menor a mayor y los vuelva a mostrar. 
Y finalmente que los ordene de mayor a menor y los muestre por tercera vez.
Para ordenar la lista usar una función que implemente el método de la burbuja y
que tenga como parámetro de entrada el tipo de ordenación, de mayor a menor o de
menor a mayor. Para el array usar una variable global.*/

using namespace std;
#include <iostream>
int i,j,temp;

void MenorAMayor(int numeros[10])
{

 for(i=1;i<10;i++)
    {
         for(j=0;j<10-1;j++)
         {
             if(numeros[j]>numeros[j+1])
             {
                 temp=numeros[j];
                 numeros[j]=numeros[j+1];
                 numeros[j+1]=temp;
             }
          }
     }
}

void MayorAMenor(int numeros[10])
{

 for(i=1;i<10;i++)
    {
         for(j=0;j<10-1;j++)
         {
             if(numeros[j]<numeros[j+1])
             {
                 temp=numeros[j];
                 numeros[j]=numeros[j+1];
                 numeros[j+1]=temp;
             }
          }
     }
}

int MostrarVector(int numeros[10])
{
      
      for(i=0;i<10;i++)
      {
        cout<<"Posicion "<<i+1<<" - "<<numeros[i]<<endl;
      }
}
int main ()
{
    cout<<"*-*-*-*-*-*-*- METODO DE ORDENAMIENTO BURBUJA -*-*-*-*-*-*-*-*"<<endl<<endl<<endl;
    cout<<"---- Para empezar ingrese 10 numeros ----"<<endl<<endl;
    int numeros[10];
    int x;
    for(i=0;i<10;i++)
    {
         cout<<"Ingrese el numero ["<<i+1<<"]: ";
         cin>>x;
         numeros[i]=x;
     }
         system("CLS");
         cout<<endl<<"*-*-*-*-*-*-*- METODO DE ORDENAMIENTO BURBUJA -*-*-*-*-*-*-*-*"<<endl<<endl;
         
    cout<<endl<<endl<<"**** LOS NUMEROS INGRESADOS SON **** "<<endl<<endl;
    MostrarVector(numeros);

    MenorAMayor(numeros);

    cout<<endl<<endl<<"**** LOS NUMEROS DE MENOR A MAYOR SON **** "<<endl<<endl;
    MostrarVector(numeros);
    
    MayorAMenor(numeros);

    cout<<endl<<endl<<"**** LOS NUMEROS DE MAYOR A MENOR SON **** "<<endl<<endl;
    MostrarVector(numeros);
    
    cout<<endl;
                 
    system("pause");
}
Erik Calvo
2012-08-15 08:26:46

el ordenamiento lo resolvio de esta manera : use unos valores diferentes pero al fin de cuenta es lo mismo.

hay varias lineas en comentario que son flags de seguimiento en la programacion que al final no se necesitan.

#include <iostream>

using namespace std;

#include <cctype>

int vector[] = {15,18,1,6,3,8,12,34,2,5,0};

void intercambio (int x, int y);

void ver();

int tope = 10, total = 10;

int main()

{

cout << " valor a ordenar" << endl;

ver(); // llamada a funcion ver valores

cout << "=====================" << endl;

int x = 0; // inicializada para comenzar recorrido por primera posicion

while (tope != 0 ) { // cuando tope = 0 terminan los recorridos y ordenamiento

// cout << "Valor de tope:" << tope << endl;

// ver();

if (vector[x] > vector[x+1]) {

// cout << "x mayor a x+1" << x << endl;

intercambio(x,x+1);

// cout << "valor x despues intercambio " << x << endl;

x++;

}

else {

x++;

// cout << "x menor siguiente posicion" << x << endl;

}

// valida el tope comparandolo con posicion anterior

// cout << "tope ====" << tope << endl;

if (x == total-1) {

// cout << "x igual a tope" << endl;

// quiere decir que ya se hicieron las comparaciones

// de la primera ronda, y en la ultima posicion esta el valor mas alto

// hacemos tome en tope-1 y continuamos desde cero otra vez.

x = 0;

tope = tope -1;

}

// cout << " valor de tope = " << tope << endl;

}

cout << "final" << endl;

ver();

return 0;

}

void ver ()

{

int i = 0;

cout << "estado actual del arreglo" << endl;

while (i < total) {

cout << vector[i] << endl;

i++;

}

cout << "presione una tecla para continuar" << endl;

cin.get();

return;

}

void intercambio (int x, int y)

{

int temporal = 0;

//cout << "ingresando a intercambio" << endl;

temporal = vector[x];

vector[x] = vector[y];

vector[y] = temporal;

return;

}

AndrésC
2012-08-29 17:44:28

Hola, Gracias de antemano por mantener este sitio vivo... les dejo una inquietud: Cuando intento acceder a un array de 10 enteros (int x[10]), supuestamente debería acceder con los índices 0 a 9 (x[0] a x[9]), pero uso DEV C++ y esto no anda así, debo usar los indices 1 a 10 o sea (x[1] a x[10])...Mis programas debo hacerlos bajo esa condición, de lo contrario corren pero no hacen lo que deberían porque si uso (x[0]) siempre toma un valor nulo aunque el primer escaque del array este ocupado con un entero diferente de cero. ¿qué hacer en este caso? :|

Pablo
2012-09-01 22:31:17

Array tiene traducción en castellano, es matriz.

De hecho tenemos el calculo matricial.

FERNANDO
2012-11-24 20:25:26

Necesito ayuda con todo este programa

22. Crear un programa que permita reservar asientos de una sala de cine (8 filas x 20 columnas). La posición de cada asiento se definirá con números (0-7) para la fila y un número (0-19) para la columna. El programa deberá visualizar qué sitios están disponibles para que el cliente pueda decidir dónde sentarse. Antes de hacer la reserva, el programa deberá comprobar que el asiento está libre, en caso contrario devolverá un mensaje de error.

NOTAS:

• Debes mostrar en pantalla los asientos disponibles (con un 0) y los ocupados (con un 1).

• Posteriormente preguntarle al usuario: ¿Desea comprar un boleto? 1) Si 2) No.

o Si te dice que sí deberás preguntarle la fila y la columna y si está disponible le dirás que el boleto ha sido comprado y le asignarás un 1 en esta posición.

o Ahora si no está disponible le deberás decir que no se puede vender ese boleto y le deberás presentar de nuevo los asientos disponibles y preguntarle si desea comprar un boleto.

Diego Gómez R.
2012-12-08 19:01:34

En este blog pueden encontrar ejercicios solucionados: http://weboneador.blogspot.com/

El autor del blog también dice que ayuda a resolver cualquier problema en C++, no se si sea cierto pero ahí se los dejo.

Espero le sirva a alguien.
Antonio
2012-12-24 04:55:15

Hola a todos, una vez mas hago consulta. :-)

Repasando los ejercicios me he puesto con el 3º que aunque no tengo problemas en hacerlo, si me surge una cuestión.

para imprimir la tabla he utilizado la función printf() de "C", porque me permite formatear su salida, por ej haciendo:

int x = 50, y = 2;

printf("%3d,%5d,%15d", x, y, x*y);

// imprimiría

.50,....2,............100
(pero con espacios en vez de puntos)

cout cuenta con algo parecido?

Steven R. Davidson
2012-12-24 08:06:15

Hola Antonio,

Para 'cout', puedes usar la función miembro, 'width()'. Por ejemplo,

cout.width( 3 );
cout << x;
cout << ',';
cout.width( 5 );
cout << y;
cout << ',';
cout.width( 15 );
cout << x*y;

Sin embargo, esto modifica la anchura para el canal y por consiguiente para posteriores salidas con formato. La alternativa es usar el manipulador de canales, 'setw()', que se define en <iomanip>. Esto sería,

#include <iomanip>
...
cout << setw( 3 ) << x << ',' << setw( 5 ) << y << ',' << setw( 15 ) << x*y;

Espero que esto te sirva.

Steven

Antonio
2012-12-24 14:03:10

Muchas gracias, Steven, es exactamente lo que necesitaba.

Y ya puestos, FELICES FIESTAS A TODOS!!

Anónimo
2012-12-24 14:33:10

Tengo un problema con el ejercicio 1. Pongo el codigo de mi problema y explico mi problema

    while(int=0; int<10;++int) {
      cout << "Introduce el " << ?? << " de diez numeros: "
      cin  >> &aEntero[i];
    } 

En el codigo se aprecia que voy pidiendo que se introduzcan los numeros pero donde pone ?? debo cambiar el valor de la variable i de manera correlativa: asi el i=0 debe ser primero, i=1 debe ser segundo,..etc. Entonces cree este array:

    char array[][8]={ // primero es el mas largo.
         "primero","segundo","tercero","cuarto","quinto",
         "sexto","septimo","octavo","noveno","decimo"
    }

Y mi problema es que no se como hacer el cambio de ?? por la cadena correspondiente porque una funcion no puede devolver strings.

Antonio
2012-12-24 15:07:39

Hola Anónimo:

Eso creo que te lo puedo explicar yo...

encuentro varios errores que yo ya he cometido antes asique me es familiar...

1º al declarar la variable en el bucle estas poniendo int=0;

la forma correcta seria while(int i=o; i < 10; i++){...}

otra cosa es que le estas haciendo un pre-incremento "++i" le estas diciendo que primero aumente su valor y luego actue, lo suyo seria "i++"

respecto a la cuestion de que hacer para que indique el numero, tan solo sustitulle los ?? por array[i] y acuerdate de declarar antes el array o al compilar te dira que no existe en ese ambito, tambien veo que haces "cin >> &aEntero" y el operador de referencia (&) lo que hace es devolvernos la dirección de memoria del operando, por lo que en realidad sobra en el codigo, con todo esto seria:

// primero las declaraciones
int aEntero[10];
char array[][8]={ // primero es el mas largo.
         "primero","segundo","tercero","cuarto","quinto",
         "sexto","septimo","octavo","noveno","decimo"
    }
// y luego el bucle
while(int i = 0; i < 10; i++) {
      cout << "Introduce el " << array[i] << " de diez numeros: "
      cin  >> aEntero[i];
    } 

puedes encontrar +info del operador (&) en el capitulo 13

http://c.conclase.net/curso/?cap=013#inicio

creo que logro explicarlo, espero que te sirva.

Antonio
2012-12-24 15:52:02

me ha faltado decir que para hacerlo en una función necesitarias usar el parametro de indirección (*) eso tambien esta en el cap 13

seria de la siguiente forma

// el prototipo de tu función
void LeeNum(int *numeros);

// tu función
void LeeNum(int *numeros)
{
     //tu array "auxiliar"
     char array[][8]={"primero",...};

     // tu codigo no cambiaria de como lo he expuesto
     while(int i = 0; i < 10; i++)
     {
          ....
     }
}
Javi
2012-12-24 16:25:18

Gracias Antonio, al final lo declare todo dentro de main. Otro error grave que tenia era haber identificado la tabla con una palabra reservada "array". Finalmente esto va bien:

    char aOrdinal[][8]= { // primero es el mas largo.
         "primero","segundo","tercero","cuarto","quinto",
         "sexto","septimo","octavo","noveno","decimo"
    }; 
        

    for (int i=0; i<10;++i) {
      cout << "Introduce el " << aOrdinal[i] << " de diez numeros: ";
      cin  >> aEntero[i];
    } 

Feliz Navidad!!

Borja
2012-12-27 00:34:37

Hola a todos!

Llevo poco tiempo en el curso pero la verdad es que le estoy cogiendo gusto a esto del C++.

Bueno, al grano, estoy tratando de resolver el problema 4 (sin emplear punteros o funciones de librerías externas que no hayan sido explicadas en lecciones anteriores a la 10) y tengo un problema con el operador sizeof, que cuando lo uso para medir el tamaño del array siempre me devuelve el valor 4, lo que hace que el incremento me lo aplique en la cuarta cifra.

Os dejo el código para que le echéis un vistazo a ver si alguien me puede decir qué falla.

//Hacer un programa que contenga una función con el prototipo bool Incrementa(char numero[10]);.
//La función debe incrementar el número pasado como parámetro en una cadena de caracteres de 9 dígitos.
//Si la cadena no contiene un número, debe devolver false, en caso contrario debe devolver true, y la cadena debe contener el número incrementado.
//Si el número es "999999999", debe devolver "0".
//Cadenas con números de menos de 9 dígitos pueden contener ceros iniciales o no, por ejemplo, la función debe ser capaz de incrementar tanto la cadena "3423", como "00002323".
//La función main llamará a la función Incrementar con diferentes cadenas.

#include <iostream>
using namespace std;

bool Incrementa (char numero[10]);

int main()
{
    char Numero[10];
    cout << "Escribe la cadena a incrementar" <<endl;
    cin >> Numero;
    if (Incrementa (Numero)) cout << Numero;
    else cout << "La cadena no puede ser incrementada";
    cin.get();
    return 0;
}

bool Incrementa (char numero[])
{
     bool Valor = true; //Lo uso para controlar el valor de la función y evitar excesivas iteraciones, no sé si podría omitirlo...
     int Posicion = (sizeof(numero)-1); //Controla la posición del incremento.
     for (int i = (sizeof(numero)-1); (i>=0 && Valor);i--)
     {
         switch (numero[i])
         {      
         case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8':
              if (Posicion == i) {
                           numero[i]++;
                           break;
                           }
              else break;
         case '9':
              numero[i] = '0';
              Posicion--;
              break;
         default:
              Valor = false;
              }
         }
      if (numero == "000000000") numero = "0";
      return Valor;
      }
//Sólo trabaja con los 4 primeros dígitos/caracteres, no veo muy claro por qué...
Anónimo
2012-12-27 04:35:08

Lo q tu pasas a la funcion no es el vector completo de 10 caracteres sino la cadena, que se intuye que si es 4 es pq escribes un numero de 3 digitos.

Tu codigo no me convence del todo, al menos si el ultimo caracter no es 9, el incrementarlo en 1 no deberia hacer que las posteriores cifras terminadas en 9 fueran 0, como si hace

Borja
2012-12-27 08:52:54

Tienes razón, el código de la función Incrementa era un auténtico desastre. Lo he corregido y queda algo más o menos así (aún se puede mejorar pero cumple su función):

bool Incrementa (char numero[])
{
     bool Valor = true; //Lo uso para controlar el valor de la función y evitar excesivas iteraciones, no sé si podría omitirlo...
     int Pos = -1, Tam = 0; //Pos cuenta la posición del último valor distinto de 9, Tam el tamaño del array
     while (Valor && (numero[Tam] != 0x00))
     {
           switch (numero[Tam])
           {
                  case '0': case '1' : case '2': case '3': case '4': case '5': case '6': case '7': case '8':
                       Pos = Tam;
                  case '9':
                       Tam++;
                       break;
                  default:
                          Valor = false;
           }
     }
     if (Valor)
     {
                if (Pos == Tam-1) numero[Pos]++;
                else
                {
                    if (Pos == -1) //Sólo ha encontrado nueves en la cadena.
                    {
                            
                            numero[0]='1';
                            for (int i = 1; i<=Tam;i++) numero[i]='0';
                            numero[Tam+1]=0x00;
                    }
                    else
                    {
                        numero[Pos]++;
                        for (int i = Pos+1; i<Tam;i++) numero[i]='0';
                    }
                }
     }
     return Valor;
     //Reservo el cambio del valor "1000000000" a "0" para la función main
}

Sigo sin tener muy claro lo del sizeof pero no es cuestión de iniciar un debate sobre el tema. Supongo que más adelante ya lo entenderé.

Gracias por la ayuda.

Anónimo
2012-12-27 15:01:46

Borja te devuelve 4, pq es el tamaño de un puntero exactamente. Un array es simplmente una variable puntero que apunta de manera constante a la memoria del primer elemento. Los punteros se estudian en la leccion 12.

Lupin
2013-01-02 20:00:32

Hola como estan, muy felices fiestas para todos. Yo retornando con el curso despues de unos dias agitados q tuve.

Tengo duda con respecto al problema 4, la cadena que nos pasan puede ser un numero negativo? tenemos q incrementarlo tambien? es decir, si le paso la cadena "-234" el programa tambien deberia devolver "233"? gracias.

Salvador Pozo
2013-01-04 10:28:22

Hola, Lupin:

En principio la idea es que funcione con números positivos. En general, si de un enunciado no podemos decidir algún parámetro, te recomiendo que elijas el caso más favorable para ti o el más sencillo. En este caso no se dice nada de signos, así que puedes obviarlos, y trabajar sólo con números sin signo.

Silver
2013-02-08 08:12:22

Aqui tengo el ejercicio 1 y el 2 en un solo programa:

/* Practicing arrays. I'll try to comment as much as posible.
owowowowow such a pain... my head hurts
but did it. Jose Wilhelm */

#include <iostream>
using namespace std;

int array[10]; // Needed to use the array as a global variable in this exercise.

void sort(int array[], int first, int second); //This function will be used to swap the values of the array and order it

int main()
{   
    int average = 0; //you will see later
    cout << "Escoja 10 numeros.\n";
    for (int i = 0; i < 10; i++)cin >> array[i]; //Enter the 10 values of the array
    cout << "Sus numeros son: ";
    for (int i = 0; i < 10; i++)cout << array[i] << " "; // Prints your numbers
    cout << endl << "De menor a mayor es: ";
    for (int i = 1; i < 10; i++)
    {
        for (int j = 0; j < 9; j++)    //                      Used to select an array 
        {
            if(array[j] > array[j+1])  //                      and the following one
            {           
                sort(array, j, j+1);   //                      function call to sort
            }
        }
    }
    for (int i = 0; i < 10; i++)cout << array[i] << " ";     //Prints the array in that order
    cout << endl << "De mayor a menor es: ";
    for (int i = 9; i >= 0; i--)cout << array[i] << " ";  // vice versa
    cout << endl << "El mayor es: " << array[9];          // the highest
    cout << endl << "El menor es: " << array[0];          // the lowest
    for (int i = 0; i < 10; i++)average += array[i];
    cout << endl << "La suma es: " << average;              // the sum
    cout << endl << "El valor promedio es: " << average / 10;     // the average
    cin.ignore();
    cin.get();                                              
    return 0;
}
    
void sort (int array[], int first, int second)
{
     int tool;                          // If the first element is highest than the following one
     tool = array[first];               // swap the values
     array[first] = array[second];
     array[second] = tool;
}
// And that's it.
Silver
2013-02-08 08:20:36

Ejercicio 3:

// Practicing multi-dimensional arrays
// let's see...
// Jose Wilhelm

#include <iostream>
using namespace std;

int main()
{
    int array[5][5];   // The multidimensional array and
    int line, column;   // the variable that sums the rows and columns
    cout << "Este programa toma valores de entrada en una tabla de 5 por 5.\n" << "Introdusca los 5 primeros valores por fila.\n";
    for (int j = 0; j < 5; j++)
    {
        for (int i = 0; i < 5; i++)
        {
            cin >> array[i][j];            //Input the values of the array
        }
    }
    for (int j = 0; j < 5; j++)
    {
        line = 0;                                 // neutralizes the value of the row
        cout << endl << endl;                      // "  " and the endls make it looks presentable
        for (int i = 0; i < 5; i++)
        {   
            line += array[i][j];                     // The value of "line" is assigned per row
            cout << array[i][j] << "  ";               // and prints it in its side
        }
        cout << "  " << line;
    }
    cout << endl << endl;
    for (int j = 0; j < 5; j++)
    {
        column = 0;
        for (int i = 0; i < 5; i++)                      //the same but with columns
        {
            column += array[j][i];                        //needed to swap [i] and [j] to get the sums of the columns
        }
        cout << column << "  ";
    }    
    cin.ignore();
    cin.get();                                                    //yay
    return 0;
}
Jose Grijota
2013-02-11 23:13:03

Hola, en primer lugar querría felicitar a los desarolladores de este portal de programación, ya que tanto en diseño como en funcionalidad es excelente.

Quiero hacer un aporte a esta página con la resolución del ejercicio 4. Espero que os sirva de ayuda a aquellos que estais empezando.

#include <cstdlib>
#include <iostream>

using namespace std;

bool Incrementa(char numero[10]);//Prototipo de la funcion Incrementa

int main(int argc, char *argv[])
{
 char cadnum[]={"000987659"} ;
 bool esnum;

   cout <<"Cadena char de Entrada:"<<cadnum<<endl;
   esnum=Incrementa(cadnum);
   cout <<"Boleano de retorno:"<<esnum<<endl;
   cout <<"Cadena char de salida:"<<cadnum<<endl;

system("PAUSE");
return EXIT_SUCCESS;
}

bool Incrementa(char numero[10])
{
 int num=0;
 int prueba;
 int po=1;
 
         for (int i=8;i>=0;i--)   //Hacemos el recorrido de derecha a izquierda, de menor a mayor peso. Decimal = 10 base n 
         {
           if(isalnum(numero[i]) && !isalpha(numero[i]))   // Si es una letra del alfabeto y no es una letra, entonces es un numero
           {
             num +=(numero[i]-48) *po ; // el valor '0' corresponde al valor 48 del codigo ASCII
             po *=  10;    //multiplicamos por 10 el valor del proximo digito
           }
           else
           return false;
         }
   
        if ((num) == 999999999) //Si el numero es el de la igualdad, tendremos una cadena de 0's.
        {
           for(int i=0;i<9;i++)
             numero[i]='0';
        return true;
        }
        else    //si es otro digito entonces anadimos uno al numero.
         num++;
                
        for (int i=8;i>=0;i--)   //Recorremos el vector de derecha a izquierda
        {
            prueba = num % 10;  //Con esta operacion extraemos el digito para convertirlo a char
            numero[i]=(char)prueba + 48; // Sumamos 48 para tener el numero ASCII y le hacemos su correspondiente casting.
            num /= 10;       // eliminamos el digito computado dividiendo entre 10
        }
 return true;
}
Jose Grijota
2013-02-12 17:30:30

Aquí cuelgo un par de versiones de resolución del ejercicio 5. La primera versión trabaja con cadenas de carácteres. La segunda trabaja convirtiendo la cadena de carácteres en un string y después operando con los métodos y funciones de la clase std::string::métodos. Espero que os sirva de ayuda. Saludos.

Version 1: Palindromo mediante array de char[]

`

//---------------------------------------------------------------------------------------------------------
// Funcion: 'bool Palindromo(char palabra[])'                                @ J.M. Grijota Delgado Feb 2013
//
//  Esta funcion devuelve un boleano indicando si la cadena de char de entrada es un palindromo.
// Variable de retorno: bool
// Parametro de entrada: char palabra[] -> Es una cadena de caracteres 
//---------------------------------------------------------------------------------------------------------

#include <cstdlib>
#include <iostream>

using namespace std;

bool Palindromo(char palabra[]);

int main(int argc, char *argv[])
{
bool d;
char prueba[]={"dabalEarroZalazoRraelAbad"};

  d=Palindromo(prueba);    
  cout<<d<<endl;  
  system("PAUSE");
  return EXIT_SUCCESS;
}
bool Palindromo(char palabra[])
{
int nElementos,auxElem, fin, i=0, j=0;
  
  nElementos = strlen (palabra); // obtenemos la longitud de la cadena:
  fin=(nElementos/2)+1; // Buscamos el valor central de la cadena, jugamos con que las palabras palindromas son simetricas
  char aux[fin+1];      //Declaramos cadenas auxiliares para almacenar las subcadenas;
  char aux1[fin+1];

  cout<<"Numero de elementos del Array: "<<nElementos<<endl;
  
  for(int i=0;i<nElementos+2;i++) // Creamos subcadenas a partir de la cadena palabra 
  {
    if (i < fin)
      aux[i]=tolower(palabra[i]);         //Nos quedamos con los (n/2)+1 primeros caracteres (la mitad mas uno)
  
    else if (i==fin)
    {
      aux[i]='\0';              //Insertamos el token para indicar el fin de la subcadena 1
      aux1[0]=tolower(palabra[i-1]);         
    }
    else
    {
      aux1[j]=tolower(palabra[nElementos-1-j]);   //Nos quedamos los (n/2)+1 ultimos caracteres e invertimos el orden de caracteres
      j++;
    }
  }
  aux1[j]='\0';              //Insertamos el token para indicar el fin de la subcadena 2

  cout<<"valor de  aux final : "<<aux<<endl;    
  cout<<"valor de aux1 final : "<<aux1<<endl;   
   
  if (strcmp(aux,aux1)== 0) //Comparamos ambas cadenas, si son iguales cierto, sino falso
  return true;
  else 
  return false;

} 
.

Version 2: Palíndromo mediante uso de String

//---------------------------------------------------------------------------------------------------------
// Funcion: 'bool Palindromo(char frase[])'                                 @ J.M. Grijota Delgado Feb 2013
//
//  Esta funcion devuelve un boleano indicando si la cadena de char de entrada es un palindromo utilizando
// la clase std::string 
// Variable de retorno: bool
// Parametro de entrada: char frase[] -> Es una cadena de caracteres 
//---------------------------------------------------------------------------------------------------------

#include <cstdlib>
#include <iostream>
#include <algorithm> //Incluimos esta libreria para poder utilizar reverse. Nos hace la vida mas facil.

using namespace std;

bool Palindromo(char frase[]);

int main(int argc, char *argv[])
{
bool d;

 char cad[]="dabaLearroZalaZorraelAbad";

  d=Palindromo(cad);    //llamamos a Palindromo
  
  cout<<"Boleano de Retorno: "<<d<<endl;  
  
  system("PAUSE");
  return EXIT_SUCCESS;
}

bool Palindromo(char frase[])
{
int final,mitad;

for (int i=0;i<strlen(frase);i++)//Convertimos los caracteres de entrada a minuscula. Notad que no comprobamos espacios
 frase[i]=tolower(frase[i]);     //signos de puntuacion etc, asi que es totalmente ampliable este bucle...

string cad(frase); //creamos un string con el contenido de frase para utilizar las funcionalidades de std::string
final=cad.length();//Determinamos la longitud del string
mitad=final/2+1;   //valor central del array, (Recordar que las palabras palindromas son simetricas

string cad1(frase,0,mitad); //Creamos el primer substring utilizando el constructor de la clase strings
string cad2(frase,mitad-1,final); 

reverse(cad2.begin(), cad2.end()); //Invertimos los caracteres de la cadena para comparar

cout<<"cad1 = "<<cad1<<endl;
cout<<"cad2 = "<<cad2<<endl;

if (cad1.compare(cad2)== 0)  //Comparamos los dos substrings si son identicos == simetricos entonces cierto sino falso
 return true;
else
 return false;
} 
Silver
2013-02-12 22:07:19

Gracias Jose, ya especificamente tenia inconvenientes con el ejercicio 4 y el 5.

Alex
2013-02-20 04:30:07

Hola ante todo dar las gracias y las felicitaciones por este gran curso. Soy novato en c++, mi duda es la siguiente, por que cuando específico un número de elementos y hago por ejemplo:

int numero[10] = {0};

los demás elementos también estarán inicializados a 0, sin embargo, si no específico el número de elementos:

int numero[] = {0};

los demás elementos no son inicalizados a 0.

Steven R. Davidson
2013-02-20 06:59:57

Hola Álex,

Para:

int numero[10] = {0};

Al inicializar el primer elemento, los demás elementos del array son automáticamente inicializados a 0 (cero) del tipo apropiado. El compilador tiene que inicializar 10 elementos, pero sólo has dado 1 elemento para la inicialización. El lenguaje indica que el resto de los elementos se inicializan a 0 (cero).

En cuanto al segundo caso:

int numero[] = {0};

No necesitamos indicar la cantidad de elementos porque inicializamos el array. El compilador puede calcular la cantidad de elementos a crear para este array. Como sólo hay un elemento en la inicialización, el compilador creará un array de 1 elemento, de tipo 'int'. Esta sentencia es equivalente a escribir ésta:

int numero[1] = {0};

Espero haber aclarado las dudas.

Steven

Alex
2013-02-20 17:22:02

Ok Steven, gracias por el aporte...

Alex
2013-03-18 09:32:20

Hola quisiera hacer una consulta sobre el siguiente programa:

#include<iostream>

#define TAM 10

using namespace std;

void CambiarOrden(int [], int);

int main(){

int a[TAM] = {32, 27, 64, 18, 95, 14, 90, 70, 60, 37};

cout<<"Los valores en el array son: "<<endl;

CambiarOrden(a, TAM);

cout<<endl;

return 0;

}

void CambiarOrden(int b[], int tam){

if(tam > 0){

CambiarOrden(&b[1], tam - 1);

cout<<b[0]<<" ";

}

}

Mi duda es dentro de la función CambiarOrden, en la línea:

CambiarOrden(&b[1], tam - 1);

si yo no coloco el operador "&" al lado de b[1], no se puede compilar el programa.

¿A qué se debe esto?

Steven R. Davidson
2013-03-18 18:28:46

Hola Álex,

Si escribes b[1], estás pasando un valor de tipo 'int', cuando la función espera recibir un valor de tipo 'int []'. Como los tipos no concuerdan, el compilador se queja. Además, lógicamente un entero no es lo mismo que una lista de enteros.

Lo que te interesa es pasar el array (o subarray) comenzando por el siguiente elemento. Podrías escribir esto:

CambiarOrden( b+1, tam-1 );

Esto es posible porque existe una relación entre punteros y arrays, ya que ambos tienen que ver directamente con direcciones de memoria. Hablamos de esto en el capítulo 12 y posteriores.

Espero que esto aclare la duda.

Steven

Alex
2013-03-19 20:32:45

Ok, todo entendido y otra vez gracias por el aporte y tiempo dedicado Steven.

jose m
2013-04-26 01:08:33

hola a todos, alguien me puede ayudar con este ejercicio en visual studio?

gracias:

1) Haga un programa que reciba como entrada un arreglo unidimensional A que ha sido llenado con valores enteros escritos al azar y genere como salida otro vector (arreglo B) con una lista de los números impares encontrados en el primer arreglo.

DATO: VEC [1…N] 1 &#8804; N &#8804; 500

no entiendo, no me sale, estoy confndido-

neoshager
2013-05-22 02:38:17

hola, necesito ayuda, me pidieron hacer un algoritmo donde en un subprograma se realice la lectura y carga de 5 numeros enteros en un arreglo, en el programa principal se debera leer un numero y llamar un subprograma que verifique si el electo esta dentro del arreglo

Sergio Herrera Castro
2013-05-28 20:11:22

Antes que nada, agradecer por el sitio y la buena explicación.

Tengo una duda acerca de los archivos en c++

Basicamente, lo que quiero hacer es leer un archivo de texto y almacenarlo en un array bidimensional. Cada vez que termine de leer una línea del archivo de texto, aumenta segundo indice del array, y asi hasta que llegue al final del archivo.

Este es mi bastante incompleto código.

De antemano muchas gracias.

#include <iostream>
#include <fstream>
using namespace std;

int main() {
   char menu_art[150][60];
   ifstream fe("menu_art.txt");

   for(int i=0 ; (menu_art end of line) ; i++)
   {
              fe.getline(menu_art[][i],150);
   }


    for(int i=0 ; i < 60 ; i++)
       {
                  cout << menu_art[150][i] << endl;
       }

   return 0;
}
Salvador Pozo
2013-05-28 20:29:53

Hola Sergio.

Decir que los ficheros no se tratan hasta el capítulo 39, pero da igual. :)

Hay algunos errores de concepto en tu programa.

El primero que, por lo que parece, quieres crear un array de 60 cadenas de 150 caracteres, pero has hecho justo lo contrario, es decir, 150 cadenas de 60 caracteres.

Deduzco esto de que al leer una línea del fichero has indicado en el parámetro de longitud un valor de 150.

El segundo es que al leer una cadena desde el fichero, el primer parámetro debe ser un puntero a char, pero usas la expresión menu_art[][i]. Sobra el primer par de corchetes.

En tercero es similar, al mostrar el contenido del array usas la expresión menu_art[150][i], pero debes mostrar una cadena, de modo que sobra el [150].

Por último, la condición del for, que imagino que es tu duda original, debe ser !fe.eof(), es decir, que se siga leyendo hasta encontrar el final del fichero.

El programa podría quedar así, (asumiendo 150 líneas de 60 caracteres como máximo):

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    char menu_art[150][60];
    ifstream fe("menu_art.txt");
    int n_lin = 0;

    for(int i=0 ; !fe.eof() ; i++) {
        fe.getline(menu_art[i],60);
        n_lin++;
    }

    for(int i=0 ; i < n_lin ; i++){
        cout << menu_art[i] << endl;
    }

    return 0;
}

Me he permitido añadir una variable para almacenar el número de líneas leídas, de modo que sólo mostremos el contenido del array con valores válidos.

jahir
2013-07-25 22:54:53

/* crear un programa en c++ defina un vector para almacenar 5 numeros enteros. crear un menu con las siguentes opciones , cada opcion debe llamar una funcion de usuario.

-menu-

1 ingresar los numero al vector a traves de teclado

2 verificar si al suma de los dos primero da el tercero

3.determinar cuantos numeros son multiplos de tre s

4 salir

*/

Anonimo
2013-09-13 10:04:35

Buenas noches a todos colegas quería que alguien me ayudara con mi problema, yo quiero introducir 10 a un arreglo, mi código es el siguiente:

for(n = 0; n < 10000; n++)

{

numeros[n];

}

pero solo me agrega ceros como puedo hacer para que me agregue numeros aleatorios. muchas gracias.

efreue
2013-09-25 05:49:44

Comparto el código del ejercicio nro 5. También me estoy iniciando en c++, y espero sirva:

#include <cstdlib>

#include <iostream>

#include <cctype> //para usar toupper y tolower (convertir a mayuscula y minuscula) al igual que isupper o islower (para validar si es mayuscula o minuscula la letra)

using namespace std;

int main()

{

char VectAZ[15];

int i = 0;

bool Palindromo(char Vect[15]);

char c;

while (i <= 14)

{

c = getchar();

VectAZ[i] = toupper(c);

i++;

}

cout << "La palabra es un palindromo? " << Palindromo(VectAZ) << endl;

system("PAUSE");

return EXIT_SUCCESS;

}

bool Palindromo(char Vect[15])

{

string val1, val2;

int i = 0, y = 0;

bool res = 0;

for (i=0;i<=14;i++)

{

val1 += Vect[i];

}

for(i=14;i>=0;i--)

{

val2 += Vect[i];

if(y<=14)

y++;

}

if (val1 == val2)

res = 1;

cout << "val1 = " << val1 << "val2 = " << val2 << endl;

return res;

}

jhon
2013-10-06 07:39:04

hayy estoy tan preocupado apenas he logrado resolver el primer punto y eso que con un poco de ayuda, he estado sentado en el computador mas de 6 horas para ver si logro resolver algo y nada me sale comienzo y me trabo, realmente no se si seguir resolviendo estos problemas o dejarlo asi y pasa al otro capitulo >>> que me recomiendan

jhon
2013-10-08 02:19:50

aporte del ejrcico 10.3

//Hacer un programa que lea 25 valores enteros en una tabla de 5 por 5, y que después

//muestre la tabla y las sumas de cada fila y de cada columna.

//hecho por jhon edinson cabezas, 07.10.2013

#include <iostream> //librerias para el uso del programa

#include <windows.h> // la libreria windows.h, la inlcui para utilizar un comando llamado sleep

using namespace std;

int main()

{

int fil_col[5][5]; //declaracion array bidimencionales y variables

int sumcol[5];

int sumfil[5];

int p,c;

cout << "Ingrese los enteros: " << endl; // ingreso de los enteros

for(p=0;p<5;p++)

{

for(c=0;c<5;c++)

{

cout << "Fila" <<p+1 << "," << "columna" << c+1 << ":";

cin >> fil_col[p][c];

}cout <<endl;

}

for(p=0;p<5;p++) // Suma de filas

{

for(c=0;c<5;c++)

{

sumfil[p]+=fil_col[p][c];

}

}

for(p=0;p<5;p++) //Suma de columnas

{

for(c=0;c<5;c++)

{

sumcol[c]+=fil_col[p][c];

}

}

cout <<"mostrando las sumas"; //Aca ya muestra las operaciones

for(int i=0;i<6;i++)

{

cout <<".";

Sleep(200); // este es el comando que dije en el comentario de las librerias

}cout << endl;

for(p=0;p<5;p++)

{

for(c=0;c<5;c++)

{

cout << fil_col[p][c] << "\t";

if(c==4) cout << "=" << sumfil[p];

}cout << endl;

}cout << endl;

for(p=0;p<2;p++)

{

for(c=0;c<5;c++)

{

cout << "||" <<"\t";

}cout << endl;

}cout << endl;

for(c=0;c<5;c++)

{

cout << sumcol[c] <<"\t";

}cout << endl;

cin.get();

return 0;

}

margaris
2013-10-10 04:46:33

me podrian ayudar con este ejercicio de como determinar cual es el numero mayor de dos numeros

ANC
2013-10-16 17:57:40

Muy buen día, reciban todos y cada uno de ustedes (tanto desarrolladores, programadores, profesores, maestros y usuarios).

Buen portal, sobre todo con la posibilidad de manejar información de ayuda, proporcionada, por los visitantes y asesores.

En mi caso, quiero resolver un ejercicio en donde se combina arreglos con cadena de caracteres y números.

El problema es el siguiente: Elaborar un programa para leer el nombre de 10 alumnos (con todo y apellidos) y las calificaciones de sus 3 parciales (de cada uno); presentar los datos capturados, calcular el promedio de calificaciones, por parcial, alumno y global; indicar qué alumno obtuvo la máxima calificación promedio y cuál la menor; cuántos aprobaron, considerando que la calificación mínima aprobatoria es de 7.0 y cuántos no aprobaron; en ambos casos desplegar la información de los estudiantes, de manera ordenada.

Consideraciones no se aceptan nombres en blanco ni números menores a cero ni mayores a 10; no utilizar apuntadores, archivos, estructuras y uniones; trabajar con funciones para lectura, presentación, clasificación y validación; presentar la información de manera tabulada.

Ejemplo de resultados.

Nombre del Alumno Cal 1 Cal 2 Cal 3 Cal Final

Hernández Lugo Juan 6.5 7.0 7.0 6.8

Hernández Pedroza Pedro 7.7 8.9 9.0 8.5

Miranda Guillermo José 9.6 9.4 9.8 9.6

Promedio 7.9 8.4 8.6 8.3

Total de aprobados: 2

Nombre del Alumno Cal 1 Cal 2 Cal 3 Cal Final

Hernández Pedroza Pedro 7.7 8.9 9.0 8.5

Miranda Guillermo José 9.6 9.4 9.8 9.6

Total de reprobados: 1

Nombre del Alumno Cal 1 Cal 2 Cal 3 Cal Final

Hernández Lugo Juan 6.5 7.0 7.0 6.8

NOTA: EN ESTE COMENTARIO, NO SE PRESENTÓ LOS DATOS TABULADOS.

Por su atención y apoyo, muchas gracias.

Un afectuoso saludos, desde la ciudad de Toluca, México.

goloko
2013-12-07 19:08:28

hola necesito ayuda tengo que hacer un ejer q tenga como atributo un número entero y crea el

método

int

getDigitos

() que devuelva el número de dígitos que tiene dicho

entero.

por fa ayudarme¡¡

Steven R. Davidson
2013-12-08 17:42:37

Hola Goloko,

Puedes usar matemáticas para calcular la cantidad de dígitos (decimales) que comprende un entero. Para esto, usamos la función del logaritmo (en base 10); esto es,

int nDigitos = 1 + (int) log10( entero );

Para el caso de 0 (cero), tenemos que hacer una comprobación especial para que la cantidad de dígitos sea 1, porque el logaritmo de 0 es indeterminado, y eso no es la respuesta que queremos.

Ten presente que la función 'log10()' se declara en <cmath>; puedes consultar la referencia en nuestra página yendo a: http://c.conclase.net/librerias/?ansilib=math#inicio

Si no te está permitido usar 'log10()', entonces tienes que ir dividiendo entre 10 el mismo entero, hasta que el resultado sea 0 (cero). Por ejemplo,

entero = 140

¿ entero > 0 ? Sí

entero = entero / 10 = 14

digitos = 1

¿ 14 > 0 ? Sí

entero = 1

digitos = 2

¿ 1 > 0 ? Sí

entero = 0

digitos = 3

¿ 0 > 0 ? No

Terminamos => digitos = 3

Nuevamente, tenemos que comprobar el caso particular del valor original del entero si es 0 (cero), porque entonces sabemos exactamente que es 1 y no tenemos que aplicar ningún algoritmo. Principalmente tenemos que procesar este caso particular, porque este algoritmo comienza la cuenta de dígitos después de la primera comprobación: digitos = 1.

Espero que esto te ayude.

Steven

daniel sanchez
2013-12-14 02:15:49

Hola lo que sucede es que tengo este problema con mi compilador el mio es Borland C++ lo que sucede es que me aparece este aviso y la verdad estoy teniendo problemas porque no me dja ejecutar ningun programa

"A valid script file 'startup' could not be found on the script path. Please enter the directory containing it; otherwise functionality provided through script will be unavailable"

me gustaria que me pudieras dar ua solucion para arreglar este problemit saludos Gracias

Santiago Cardona
2013-12-20 20:12:58
#include <iostream>
#include <stdlib.h>
#include <stdio.h>

using namespace std;

int main()
{

	int array[10];

	int lista;
	
	int sumatoria = 0;
	
	int promedio;
	
	int mayor;
	
	int menor;
	
	

	int c;

	cout << "ingrese los digitos de la lista, max 10" << endl;

	for(lista = 0; lista <10; lista++)
	{
		cin >> c;

		array[lista] = c;
		
		cout << endl;
		
		
		
	}
	
	cout << "||-------------lista-------------||" << endl;
	
	cout << array[0]  << endl;
	cout << array[1]  << endl;
	cout << array[2]  << endl;
	cout << array[3]  << endl;
	cout << array[4]  << endl;
	cout << array[5]  << endl;
	cout << array[6]  << endl;
	cout << array[7]  << endl;
	cout << array[8]  << endl;
	cout << array[9]  << endl;
	
	mayor = array[0];
	menor = array[0];
	
	
    for(lista = 0; lista <10; lista ++)
    {
 
              sumatoria = sumatoria + array[lista];
              
              if(array[lista] > mayor) mayor = array[lista];
              if(array[lista] < menor) menor = array[lista];
                     
 
              
              
    }	
    
    
    
    promedio = sumatoria / lista;
	
	cout << "la suma de los valores de la lista es: " << sumatoria << endl;
	
	cout << "el promedio de los valores de la lista es: " << promedio << endl;
	
	

    cout << "el mayor valor de la lista es el: " << mayor << endl;
    cout << "el menor valor de la lista es el: " << menor << endl;
    

	
system ("pause");

return 0;




	


}

Julianb
2014-01-20 22:31:19

Hola! Ante todo gracias por el curso, me he decidido a aprender algo de C++ sobre todo por hobby y es genial poder seguir un curso tan bueno como éste y en castellano. Hasta este punto he seguido los ejercicios por medio de los ejemplos que has puesto, pero gracias a no haberlos puesto aquí, ésta vez me estoy buscando la vida un poco para resolverlos. Dejo la solución del tercero pero con una matriz de 3x3 (y dejo una pregunta al final).

// Hacer un programa que lea 25 valores enteros en una tabla de 5 por 5.
// Que después muestre la tabla y las sumas de cada fila y de cada columna.
// Procura que la salida sea clara, no te limites a los números obtenidos.

#include <iostream>
#include <cstdio>
#include <cctype>
using namespace std;

int main()
{
    int tabla [3][3];
    int i;
    int n = 9; //número de valores por fila
    int suma [6] = {0,0,0,0,0,0};

    cout    << "Ve introduciendo los valores."
            << endl << endl;

    for (i=0 ; i < 3 ; i++)
    {cin >> tabla [i][0];
    suma [0] += tabla [i][0];
    }
    for (i=0 ; i < 3 ; i++)
    {cin >> tabla [i][1];
    suma [1] += tabla [i][1];
    }
    for (i=0 ; i < 3 ; i++)
    {cin >> tabla [i][2];
    suma [2] += tabla [i][2];
    }

    cout << endl;

    for (i=0 ; i < 3 ; i++)
    {cout << tabla [i][0] << " ";
    }
    cout << "   Y la suma es: " << suma [0];
    cout <<endl;

    for (i=0 ; i < 3 ; i++)
    {cout << tabla [i][1] << " ";
    }
    cout << "   Y la suma es: " << suma [1];
    cout <<endl;

    for (i=0 ; i < 3 ; i++)
    {cout << tabla [i][2] << " ";
    }
    cout << "   Y la suma es: " << suma [2];
    cout <<endl;


    for (i=0 ; i < 3 ; i++)
    {suma [3] += tabla [0][i];
     suma [4] += tabla [1][i];
     suma [5] += tabla [2][i];}

    cout << endl << suma [3] << " " << suma [4] << " " << suma [5] << endl;

    return 0;

}

Estoy seguro de que el código puede simplificarse (tal vez lo que pasa es que aún no haya llegado al capítulo de cómo hacerlo). Ahora la pregunta, en el ejemplo hago una tabla de 3x3, para lo cual me monto un lío de narices porque por ejemplo, cada valor de "suma []" lo calculo "manualmente" poniendo un "suma [5] += tabla [2][i];".

Pero pienso, y si quisiera hacer la matriz de 5x5? Tendría que añadir suma[6], suma[7], suma[8] y suma[9] "a pelo"?? Y no solo eso, sino dos "for" más para asignar valores mediante "cin" y otros tantos para los "cout"... vamos, que haciéndolo así, en una tabla [10][10] te vuelves loco, y en una matriz tridimensional te pegas un tiro ya!

Gracias por la ayuda!

Julianb
2014-01-22 19:41:13

Me respondo a mí mismo, sólo tenia que darle un par de vueltas, y creo que más no se puede acortar el código del ejercicio 3! Ahora está con la tabla de 5x5, aunque igualmente podría ser una de 20x20 con sólo cambiar el tamaño de la variable Tabla, el de int, y el del array de las sumas.

// Hacer un programa que lea 25 valores enteros en una tabla de 5 por 5.
// Que después muestre la tabla y las sumas de cada fila y de cada columna.
// Procura que la salida sea clara, no te limites a los números obtenidos.

#include <iostream>
#include <cstdio>
#include <cctype>
using namespace std;

int main()
{
    int tabla [5][5];
    int i, j, k;
    int n = 5; //número de valores por fila
    int suma [20] = {0};

    cout    << "Ve introduciendo los valores por columna."
            << endl << endl;

    for (i=0 ; i < n ; i++)     //Función de recogida de datos
    {
    for (j=0 ; j < n ; j++)
    cin >> tabla [i][j];}
    cout << endl;

    for (i=0 ; i < n ; i++)     //Función de suma de líneas
    {
    for (j=0 ; j < n ; j++)
        suma [i] += tabla [i][j];
    }

    for (i=0 ; i < n ; i++)     //Función de suma de columnas
    {
    for (j=0 ; j < n ; j++)
    suma [i+n] += tabla [j][i];
    }

    cout << endl;

    for (i=0 ; i < n ; i++)     //Función para mostrar la tabla y las sumas de líneas
    {
    for (j=0 ; j < n ; j++)
    cout << tabla [i][j] << " ";
    cout << "   Y la suma es: " << suma [i];
    cout <<endl;
    }

    cout << endl;

    for (i=0 ; i < n ; i++)     //Función para mostrar las sumas de cada columna
    {
    cout << suma [n+i];
    }

    return 0;

}

Ahora a por el ejercicio 4!

Federico
2014-03-03 02:43:25

Intenté resolver el problema 1, pero no se qué compilador usar ni cómo saber si la solución funcionó o no. ¿Me podrían decir? Dejo el código en caso de que alguien también me pueda decir si funciona o no:

#include "iostream"
using namespace std;

int main()
{
	int suma, prob, may, min, a = 0;
	int lista [9];
	
	cout << "introduzca los 10 números:" << endl;
	
	//introduccion de números al array
	while (a < 10)
	{
		cin>>n;
		lista[a] = n
		a++
		}
	
	suma = lista[0]+lista[1]+lista[2]+lista[3]+lista[4]+lista[5]+lista[6]+lista[7]+lista[8]+lista[9];
	prob = suma / 10;
	
	//check mayor
	if (lista[0]>lista[1] [2] [3] [4] [5] [6] [7] [8] [9]) may = lista[0]
	if (lista[1]>lista[0] [2] [3] [4] [5] [6] [7] [8] [9]) may = lista[1]
	if (lista[2]>lista[0] [1] [3] [4] [5] [6] [7] [8] [9]) may = lista[2]
	if (lista[3]>lista[0] [2] [1] [4] [5] [6] [7] [8] [9]) may = lista[3]
	if (lista[4]>lista[0] [2] [3] [1] [5] [6] [7] [8] [9]) may = lista[4]
	if (lista[5]>lista[0] [2] [3] [4] [1] [6] [7] [8] [9]) may = lista[5]
	if (lista[6]>lista[0] [2] [3] [4] [5] [1] [7] [8] [9]) may = lista[6]
	if (lista[7]>lista[0] [2] [3] [4] [5] [6] [1] [8] [9]) may = lista[7]
	if (lista[8]>lista[0] [2] [3] [4] [5] [6] [7] [1] [9]) may = lista[8]
	if (lista[9]>lista[0] [2] [3] [4] [5] [6] [7] [8] [1]) may = lista[9]
	
	//check menor
	if (lista[0]<lista[1] [2] [3] [4] [5] [6] [7] [8] [9]) min = lista[0]
	if (lista[1]<lista[0] [2] [3] [4] [5] [6] [7] [8] [9]) min = lista[1]
	if (lista[2]<lista[0] [1] [3] [4] [5] [6] [7] [8] [9]) min = lista[2]
	if (lista[3]<lista[0] [2] [1] [4] [5] [6] [7] [8] [9]) min = lista[3]
	if (lista[4]<lista[0] [2] [3] [1] [5] [6] [7] [8] [9]) min = lista[4]
	if (lista[5]<lista[0] [2] [3] [4] [1] [6] [7] [8] [9]) min = lista[5]
	if (lista[6]<lista[0] [2] [3] [4] [5] [1] [7] [8] [9]) min = lista[6]
	if (lista[7]<lista[0] [2] [3] [4] [5] [6] [1] [8] [9]) min = lista[7]
	if (lista[8]<lista[0] [2] [3] [4] [5] [6] [7] [1] [9]) min = lista[8]
	if (lista[9]<lista[0] [2] [3] [4] [5] [6] [7] [8] [1]) min = lista[9]
	
	cout << "la suma de los numeros es:" << suma << "el promedio es:" << prom << "el mayor es:" << may << "el menor es: << min << endl;
}
Katherine Morales
2014-04-01 15:10:05

Disculpa pero quisiera que me ayudes hacer un programa que muesttre una matriz, pero solo utilizando vectores:D

ivan
2014-04-04 01:13:25

hola tengo una duda con este tipo de sintaxis

( int Tabla[10][10]; ) y que cosa estaria aciendo aqui.

|

Tabla[10]; si de esta forma estariamos accediendo al elemento 10 del array tabla entonces de esta forma

( Tabla[10][10]; ) ¿a cual elemento estariamos viendo?

|

hi si yo creara algo asi:

|

(1) char Prueba[5][2] = "Hola";

|

(2) int Prueba2[2][1] = {5,7};

|

¿que seria lo que estoy aciendo con esas variables, declare bien la primera y la segunda? trate de comprenderlo por mi mismo pero no pude si algien me puede explicar porfabor.

Steven R. Davidson
2014-04-04 22:30:05

Hola Iván,

Veamos:

int Tabla[10][10];

Indica que crearemos una matriz o tabla de 10x10 enteros. Técnicamente, estamos creando un array de 10 elementos los cuales cada uno es una array de 10 elementos, y éstos son de tipo entero (int).

---------

Tabla[10];

Es lingüísticamente correcto, pero no es del todo lógico, porque los índices válidos van de 0 (cero) a 9. Puedes acceder al 11º elemento (índice 10), pero conseguiríamos un valor que representa un array de 10 enteros; o sea, Tabla[10] accede a un 'int[10]'. Como queda fuera de las limitaciones del array, estaremos accediendo a memoria que no es nuestra; y podemos provocar errores y comportamientos indeseados.

---------

Tabla[10][10];

Nuevamente, accedemos fuera de las limitaciones válidas del array. Lo que estaríamos haciendo es acceder al 11º entero del 11º array (de enteros). Esto implica que sería el 110º entero en la tabla, que como acabo de decir queda fuera de la tabla válida de 10x10 (100 elementos).

---------

char Prueba[5][2] = "Hola";

Esto no es del todo correcto. Debería ser:

char Prueba[2][5] = { "Hola" };

Aquí definimos un array de 2 arrays de 5 'char' (cada uno). Inicializamos este array de cadenas de caracteres con la cadena "Hola" como la primera, y la segunda es implícitamente 0 (cero), lo cual implica en este caso que es una cadena nula. Esto es lo mismo que escribir explícitamente:

char Prueba[2][5] = { "Hola", "" };

Y esto es a su vez igual a lo siguiente:

char Prueba[2][5] = { {'H','o','l','a','\0'},
                      {'\0','\0','\0','\0','\0'} };

---------

int Prueba2[2][1] = {5,7};

Creo que te interesa escribir esto:

int Prueba2[1][2] = { {5,7} };

Aquí creas un array de 1 array de 2 enteros y lo inicializas.

Espero que esto aclare las dudas.

Steven

antoni
2014-05-18 02:02:49

hola a todos, alguien me podria ayudar con un programa. se trata de un programa que pida por pantalla n cantidad de numero y muestre cual se repite mas..

Leivis Cordero
2014-06-25 20:38:26

Hola soy nuevo en este oficio de programación, en realidad estoy estudiando Ing. de sistema. Y me gustaría que alguien me ayude con algo que se para ustedes es sencillo.

Es lo siguiente...

Debo crear un programa donde un usuario introduzca dos matrices y estas deben de multiplicarse.

Pero para esto debo de hacer un programa el cual ofrezca un menú de cuatro opciones, opción 1 introduzca matriz "A", opción 2 introduzca matriz "B", opción 3 aquí debe de mostrar las dos matrices construidas y el producto de las mismas.

Nota: En las tres opciones la matriz debe de aparecer construida como tal es decir 3x3 o 3x4 etc. Eso depende de lo que el usuario introduzca.

El caso es que, hice todo el programa usando gotoxy,switch (para las opciones), y for... esto debe llevarlo el programa.

Hice todo, lo que no se... Como hacer para que en la la opción tres me cargue la matriz de la opcion 1 y la matriz de la opción 2 y el producto de ambas?

Espero me puedan ayudar en eso... Gracias!