Вы находитесь на странице: 1из 14

Aplicar los elementos de la fase de resolución de un problema para cada ejercicio.

Utilizar bucle For.

1. Calcular la suma de todos los elementos de un vector de dimensión 50, así como su
media aritmética y su producto.
2. Calcular el número de elementos negativos, cero y positivos de un vector dado de
100 elementos.
3. Calcular el mayor de una lista L de n elementos.
4. Dada una lista L de n elementos, calcular la suma de los números pares y la de los
impares de forma independiente.
5. Hacer diferentes listados de una lista de 15 números según el siguiente criterio:

Si número >=0 y <50, ponerlo en lista1


Si número >=50 y <100, ponerlo en lista2
Si número>=100 y <=150, ponerlo en lista3

Mi intento:

#include <iostream>
#include <vector>

using namespace std;

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


{
//Vlad @ Todosv.com para ######
//Tarea ITCA. Probado con Dev-C++ 4.9.9.2
//1.
vector<int> v1(50);
vector<int>::iterator iter;
unsigned long suma = 0;
srand( time(NULL) );
//cout << "Items:" << endl;
for(iter = v1.begin(); iter != v1.end(); iter++) {
*iter = rand();
//cout << *iter << endl;
suma += *iter;
}
cout << "suma: " << suma << endl;
//2. 3. y 4.
unsigned int numNegativos = 0;
unsigned int numPositivos = 0;
unsigned int numCeros = 0;
long sumaPares = 0;
long sumaImpares = 0;

v1.resize(100);
for(iter = v1.begin(); iter != v1.end(); iter++) {
*iter = rand()-rand();
//cout << *iter << endl;
if (*iter){
if(*iter>0){
numPositivos++;
}
else {
numNegativos++;
}
}
else {
numCeros++;
}
if(*iter%2) {
sumaPares += *iter;
}
else {
sumaImpares += *iter;
}
}
cout << "numNegativos: " << numNegativos << endl;
cout << "numPositivos: " << numPositivos << endl;
cout << "numCeros: " << numCeros << endl;
cout << "sumaPares: " << sumaPares << endl;
cout << "sumaImpares: " << sumaImpares << endl;
sort(v1.begin(),v1.end());
cout << "numMayor: " << v1.back() << endl;

//5.
v1.resize(15);
vector<int> lista1;
vector<int> lista2;
vector<int> lista3;
for(iter = v1.begin(); iter != v1.end(); iter++) {
*iter = rand() % 150;
//cout << *iter << endl;
if(*iter>=0 && *iter<50){lista1.push_back(*iter);}
if(*iter>=50 && *iter<100){lista2.push_back(*iter);}
if(*iter>=100 && *iter<=150){lista3.push_back(*iter);}
}
cout << "Lista 1." << endl;
for(iter = lista1.begin(); iter != lista1.end(); iter++) {
cout << *iter << endl;
}
cout << "Lista 2." << endl;
for(iter = lista2.begin(); iter != lista2.end(); iter++) {
cout << *iter << endl;
}
cout << "Lista 3." << endl;
for(iter = lista3.begin(); iter != lista3.end(); iter++) {
cout << *iter << endl;
}
system("PAUSE");
return 0;
}

Como mezclar y ordenar dos vectores de cadenas

1. #include <iostream.h>
2. #include <stdlib.h>
3. #include <string.h>
4. void leerv(char v[][100], int n)
5. {
6. int a;
7. for (a=0;a<=n;a++)
8. cin>>v[a];
9. }
10.
11. void mezclar(char v1[][100], int n1, char v2[]
[100], int n2, char v3[][100], int n3)
12. {
13. int a=0,c=0,x=0,c1=0,c2=0;
14. char aux[100];
15. for (c=0; c<=n3; c++)
16. {
17. if (c<=n1) //si todavia no se akaba el
primer vector
18. {
19. v3[c]=v1[c1];
20. ++c1;
21. }
22. else
23. {
24. v3[c]=v2[c2]; //si ya se akabo el primer
vector entonces usamos el segundo
25. ++c2;
26. }
27.
28. if (c>0) //si NO es la primera vuelta
29. {
30. for (a=c; a>0; a--)
31. {
32. x=strcmp(v3[a],v3[a-1]);
33. if (x<0) //si el nuevo elemento es
menor ke el anterior entonces intercambiamos
34. {
35. aux=v3[a-1];
36. v3[a-1]=v3[a];
37. v3[a]=aux;
38. }
39. }
40. }
41. }
42. }
43.
44. void imprime(char v[][100], int n3)
45. {
46. int a;
47. cout<<endl<<endl<<"----Resultado-----";
48. for (a=0;a<=n3;a++)
49. cout<<endl<<v[a];
50. cout<<endl<<endl;
51. }
52.
53. int main()
54. {
55. char v1[20][100], v2[20][100], v3[40][100],cad;
56. int a,n1=21,n2=21,n3=0;
57. while ((n1>20) || (n1<1))
58. { cout<<"Introduce el total de palabras de la
columna 1 [1-20]:"; cin>>n1; }
59. while ((n2>20) || (n2<1))
60. { cout<<"Introduce el total de palabras de la
columna 2 [1-20]:"; cin>>n2; }
61. n3=n1+n2-1;
62. n1--;
63. n2--;
64. cout<<endl<<"----Columna 1-----"<<endl;
65. leerv(v1,n1);
66. cout<<endl<<endl<<"----Columna 2-----"<<endl;
67. leerv(v2,n2);
68. mezclar(v1,n1,v2,n2,v3,n3);
69. imprime(v3,n3);
70. system("PAUSE");
71. return 0;
72. }
http://www.como-programar.com/2009/10/operaciones-basica-en-un-vector-codigo.html

Un vector es un conjunto de datos homogéneos (del mismo tipo) ordenados


lógicamente y se pueden acceder a ellos mediante un indice secuencial.
Son muchas las operaciones que se pueden realizar con esta estructura pero las mas
basicas son:

 Agregar elementos a un vector


 Modificar un el valor de una determinada posición
 Eliminar un elemento
 Obtener el valor de una determinada posición
 Buscar si un elemento, retornar su posición si pertenece al vector
 Ordenar los elementos del vector
define MAX 100

// Estructura de Datos //
typedef int Tipo;

struct Vector
{
Tipo elem[MAX];
int n;//numero de elementos
};

// Interface //

/* Inicializa el vector "v" con n=0*/


void inicializar(Vector &v);

/* Inserta al final del vector "v" el elemento el elemento valorvalor

* si el vector esta lleno devuelve falso de lo contrario verdadero */


bool agregar(Vector &v,Tipo valor);

/* cambia el elemento de la posicion "pos" por por valorvalor


* si la pòsiicon es incorrecta devuelve falso */
bool modificar(Vector &v,Tipo valor,int pos);

/* eleimina el elemento de la posiicon "pos" */


bool eliminar(Vector &v,int pos);

/* devuelve la posicion del elemento "valor", ,


* si no lo encuentra retorna -1 */
int buscar(Vector &v,Tipo valor);

/* obtiene una copia del elemento en la posicion "pos" */


Tipo obtener(Vector &v,int pos);

/* ordena de forma ascendente, ordenamiento burbuja */


void ordenar(Vector &v);

// Operaciones //
void inicializar(Vector &v)
{
v.n=0;
}

bool agregar(Vector &v,Tipo valor)


{
if(v.n >= MAX)
return false;
v.elem[v.n]=valor;
v.n++;
}

bool modificar(Vector &v,Tipo valor,int pos)


{
if(pos<0 || pos>=v.n)
return false;
v.elem[pos]=valor;
}

bool eliminar(Vector &v,int pos)


{
if(pos<0 || pos>=v.n)
return false;
for(int i=pos;i<v.n-1;i++)
{
v.elem[i]=v.elem[i+1];
}
v.n--;
}

int buscar(Vector &v,Tipo valor)


{
int pos=-1;
for(int i=0;i<v.n && pos==-1;i++)
{
if(v.elem[i]==valor)
pos=i;
}
return pos;
}

Tipo obtener(Vector &v,int pos)


{
return v.elem[pos];
}

void ordenar(Vector &v)


{
int i,j;
Tipo temp;

for(i=0; i<v.n-1; i++)


for(j=i+1; j<v.n; j++)
{
if(v.elem[i]>v.elem[j])
{
temp=v.elem[i];
v.elem[i]=v.elem[j];
v.elem[j]=temp;
}
}
}

VECTORES
Un vector, también llamado array(arreglo) unidimensional, es una estructura de datos
que permite agrupar elementos del mismo tipo y almacenarlos en un solo bloque de
memoria juntos, uno despues de otro. A este grupo de elementos se les identifica por un
mismo nombre y la posición en la que se encuentran. La primera posición del array es la
posición 0.

Podríamos agrupar en un array una serie de elementos de tipo enteros, flotantes,


caracteres, objetos, etc. Crear un vector en c++ es sencillo, seguimos la siguiente
sintaxix: Tipo nombre[tamanyo];

Ejm:
1.int a[5];//Vector de 5 enteros
2.float b[5];//vector de 5 flotantes
3.Producto product[5];//vector de 5 objetos de tipo Producto

Podríamos también inicializar el vector en la declaración:

1.int a[] = {5,15,20,25,30};


2.float b[] = {10.5,20.5,30.5,12.5,50.5}
3.Producto product[] = {celular,calculadora,camara,ipod,usb}

Como hay 5 elementos en cada array, automáticamente se le asignará 5 espacios de


memoria a cada vector.Pero si trato de crear el vector de la forma int a[]; el compilador
mostrará un error, porque no indiqué el tamaño del vector ni tampoco inicializé sus
elementos.

Asigno valores a los elementos de un vector indicando su posición:

1.int a[4] = 30; // le asigno el valor 30 a la posición 4 del vector,


es decir, al 5to elemento.
2.product[2].setPrecio(300) // le asigno un precio de 300 al producto
en la posicion 2, o sea al tercer elemento.

Obviamente el método setPrecio() debe de estar implementado.

Para llenar, recorrer e imprimir un vector podemos utilizar un bucle for:

01.#include <iostream>
02.using namespace std;
03.
04.int main()
05.{
06. int dim;
07. cout << "Ingresa la dimension del vector" << endl;
08. cin >> dim; // Supongamos que ingrese 10
09. int vector[dim]; // mi vector es de tamanyo 10
10.
11. for(int i=0;i&lt;dim;i++){
12. vector[i] = i * 10;
13. cout << vector[i] << " ";
14. }
15.
16. return 0;
17.}

La salida del programa mostrará: 0 10 20 30 40 50 60 70 80 90

Aquí una función simple para sumar 2 vectores a y b y poner el resultado en un tercer
vector c

01.#include <iostream>
02.using namespace std;
03.
04.void sumar(int a[], int b[], int c[],int dim){
05. for (int i=0; i&lt;dim; i++) {
06. c[i]=a[i] + b[i];
07. }
08.}
09.
10.void imprimir(int v[],int dim)
11.{
12. for(int i=0;i&lt;dim;i++){
13. cout << v[i] << " ";
14. }
15. cout << endl << endl;
16.}
17.
18.int main()
19.{
20. int dim;
21. cout << "Ingresa la dimension" << endl;
22. cin >> dim;
23.
24. int a[dim];
25. int b[dim];
26. int c[dim];
27.
28. for(int i=0;i&lt;dim;i++){
29. a[i] = i * 10;
30. b[i] = i * 5;
31. }
32.
33. cout << "Vector A " << endl;
34. imprimir(a,dim);
35.
36. cout << "Vector B " << endl;
37. imprimir(b,dim);
38.
39. sumar(a,b,c,dim);
40. cout << "Vector C " << endl;
41.
42. imprimir(c,dim);
43. return 0;
44.}

Vector A
0 10 20 30 40 50 60 70 80 90

VECTOR B
0 5 10 15 20 25 30 35 40 45

VECTOR C
0 15 30 45 60 75 90 105 120 135

Entonces para tomar en cuenta:


Todo vector debe tener definido un tipo de dato.
Todo vector necesita de una dimensión o tamanyo.
El código de arriba se puede mejorar muchísimo con objetos y clases, este es solo un
pequeño ejemplo.

MATRICES
Una matriz es un vector de vectores o un también llamado array bidimensional. La
manera de declarar una matriz es c++ es similar a un vector:

view source
print?
1.int matriz[fils][cols];

int es el tipo de dato, matriz es el nombre del todo el conjunto de datos y debo de
especificar el numero de filas y columnas. Las matrices también pueden ser de distintos
tipos de datos como char, float, double,etc.

Las matrices en c++ se almacenan al igual que los vectores en posiciones consecutivas
de memoria. Usualmente uno se hace la idea que una matriz es como un tablero. Pero
internamente el manejo es como su definicion lo indica, un vector de vectores, es decir,
los vectores estan uno detras del otro juntos.

La forma de acceder a los elementos de la matriz es utilizando su nombre e indicando


los 2 subindices que van en los corchetes. Si Coloco int matriz[2][3]=10; //estoy
asignando al cuarto elemento de la tercera fila el valor 10. No olvidar que tanto filas
como columnas se enumeran a partir de 0.

Bueno y para recorrer una matriz podemos usar igualmente un bucle. En este caso 2 for

view source
print?
1.for(int i=0;i&lt;fils;i++){
2. for(int j=0;j&lt;cols;j++){
3. matriz[i][j] = i % j;
4. }
5.}

PUNTEROS
El valor de todas las variales que manejamos en nuestros programas se almacenan en
memoria y tienen una dirección. Un puntero es una variable especial que apunta a la
dirección de memoria de una variable. El puntero tiene a su vez su propia dirección.
Todas estas direcciones tienen un formato hexadecimal.

Los punteros son herramientas muy poderosas con muchas utilidades y enormes
ventajas como veremos más adelante. A grandes rasgos, un puntero me permite
desplazarme en la memoria, apuntar, redireccionar a ciertas variables, funciones,
métodos, objetos sin necesidad de mover grandes bloques de datos, lo cual nos ahorra
muchísimo el consumo de memoria en los programas.

Un puntero se debe declarar de acuerdo al tipo de dato al que apunta. Ejem:

view source
print?
1.int *var; //Un puntero llamado var que podra apuntar a cualquier
variable de tipo entero.
2.char *u;//puntero de tipo char
3.Persona *per;//puntero de tipo persona

Para determinar,asignar la dirección de una variable en c++, se usa el operador & y para
obtener el contenido de un puntero utilizamos el operador * Ejem:

view source
print?
1.int a;//entero
2.int *b;//puntero a entero
3.a = 20;//a tiene 20
4.b=&a;//asigno la direccion de a al puntero b
5.
6.cout << b << endl; // imprira la direccion de memoria de a;
7.cout << *b;// imprimira 20, osea el contenido de a

Ahora analicemos las siguientes instrucciones y veamos como las variables van
cambiando de valor en tiempo de ejecución:

view source
print?
01.#include <iostream>
02.using namespace std;
03.int main () {
04. int a=10;
05. int b=20;
06. int *p,*p2;//punteros de tipo entero
07.
08. cout << "ANTES" << endl;
09. cout << "Variable a = " << a << endl;
10.
11. cout << "Direccion de a = " << &a << endl << endl;
12.
13. cout << "Variable b = " << b << endl;
14. cout << "Direccion de b = " << &b << endl << endl;
15.
16. cout << "Contenido de p (BASURA)= " << *p << endl;//tiene basura
al principio, podria inicializar con *p=0
17. cout << "Direccion de p = " << &p << endl << endl;
18.
19. cout << "DESPUES" << endl;
20. a++;//incremento a
21. p= &a; //p ahora tiene a la direccion de a
22.
23. cout << "Contenido de p = " << *p << endl;
24.
25. p = &b;//p ahora tiene la direccion de b
26. *p +=20; // le sumo 20 al contenido de p, es decir, estoy
incrementando el valor de b
27.
28. cout << "Variable a = " << a << endl;
29. cout << "Variable b = " << b << endl << endl;
30.
31. p=&a;//p ahora tiene la direccion de a
32. *p = a * 5;//contenido de p es igual al contenido de a * 5
33.
34. cout << "Contenido de p = " << *p << endl;
35. cout << "Variable a = " << a << endl << endl;
36.
37. cout << "Contenido de p2 (BASURA) = " << *p2 << endl;//tiene
basura al principio, podria inicializar con *p2=0
38. cout << "Direccion de p2 = " << &p2 << endl << endl;
39.
40. p2 = p;//el contenido de p es asignado al contenido de p2
41. *p2 +=15;//incremento 15 al contenido de p2
42.
43. cout << "Contenido de p2 = " << *p2 << endl;//igual al contenido
de p
44. p++;//p apunta a otra direccion de memoria,se desplaza 4 bytes
en memoria
45. cout << "Contenido de p (BASURA) = " << *p << endl;//el
contenido de esa nueva direccion
46.
47. return 0;
48.}

La salida del programa:


ANTES

Variable a = 10
Direccion de a = 0×22ff74

Variable b = 2
Direccion de b = 0×22ff70

Contenido de p (BASURA)= -1017291943


Direccion de p = 0×22ff6c

DESPUES
Contenido de p = 11
Variable a = 11

Variable b = 40
Contenido de p = 55
Variable a = 55

Contenido de p2 (BASURA) = 2293680


Direccion de p2 = 0×22ff68
Contenido de p2 = 70
Contenido de p (BASURA) = 2293680

El contenido de p y p2 al principio es basura porque no tienen ningun valor asignado


aun. Podriamos asignar el valor NULL a un puntero para luego posteriormente en algun
problema que se me presente saber el estado del puntero y saber si contiene algo o no,
así:

int *p= NULL;

http://ronnyml.wordpress.com/2009/07/04/vectores-matrices-y-punteros-en-c/

Вам также может понравиться