Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arreglos
Declaración de Arreglos
<tipo> <nombre>[tamaño];
Secuencia
de variables
homogéneas int a[10];
de acceso
aleatorio 0 1 2 3 4 5 6 7 8 9
1516 índices
18
20
22
direcciones 24
consecutivas contenido
26
de memoria de memoria
28
30
32
34
Asignación de Valores
Asignación “aleatoria”
int a[10];
a[3] = -5;
a[7] = 13;
a[0] = 9;
9 ? ? -5 ? ? ? 13 ? ?
0 1 2 3 4 5 6 7 8 9
lista de inicialización
-2 4 7 -1 8
0 1 2 3 4
b) No. de inicializadores < tamaño del arreglo:
-2 4 7 ? ?
0 1 2 3 4
Inicialización de Arreglos
c) Sin especificación del tamaño:
int d[ ] = { 5, -3, 6 };
5 -3 6
0 1 2
5 -3 6
0 1 2
Asignación desde el Teclado
int a[5];
0 1 2 3 4
int i = 2;
dirección contenido variable
2324 a[0]
28 a[2]
30 a[3]
32 a[4]
RAM
Ejemplo: Sumatoria de 5 enteros
/* Version 2*/
1*/
#include <stdio.h>
int main()
{
int x[5]
x1 ==-3,{-3,
x25,= 7,
5, 4,
x3-1};
= 7,
int x4
i, s=0;
= 4, x5 = -1;
int s;
for(i=0; i<5; i++)
s = x1 s +=
+ x2
x[i];
+ x3 + x4 + x5;
1 2
int main()
{ 2 4
int i, a[TAM];
3 6
/* asignacion */
for(i=0; i<TAM; i++) 4 8
a[i] = 2*i;
5 10
/* impresión */
for(i=0; i<TAM; i++) 6 12
printf(“%d\n”,a[i]);
7 14
return 0;
8 16
}
9 18
Directivas
x x
n 2
i
i 1
n 1
Desviación Estándar
#include <stdio.h>
#include <math.h>
n
x x
2
#define TAM 10
i n
i 1 int main()
n 1 {
int i, x[TAM];
n
s xi
float p, r, d, s=0
system("pause"); s
return 0;
} n 1
x
Vectores
a b (ax bx )i (a y by )j (az bz )k
c=a+b
j
a
k i
a (ax i a y j az k) Suma
de
b (bx i by j bz k) vectores
Suma de Vectores
0 1 2 ... n-1
#include <stdio.h> a
int main()
{ + + … +
int a[5] = {-2, 3, 7, 4, -5};
int b[5] = {9, 6, -1, -8, 2};
int c[5], i; b
for(i=0;i<5;i++)
c[i] = a[i] + b[i]; = = … =
for(i=0;i<5;i++) c
printf(“c[%d]=%d\n”,i,c[i]);
return 0;
}
c ab
Producto Vectorial
#include <stdio.h>
c[0] = a[1]*b[2]-a[2]*b[1];
c[1] = a[0]*b[2]-a[2]*b[0];
c[2] = a[0]*b[1]-a[1]*b[0];
i j k printf(“c=(%di+%dj+%dk)\n”,
ay az ax az ax ay
a b ax ay az i j k c[0],c[1],c[2]);
by bz bx bz bx by return 0;
bx by bz }
i (a y bz a z by ) j (a x bz a z bx ) k (a x by a y bx )
Producto Escalar de Vectores
0 1 2 3 4
#include <stdio.h> n
a
int main()
c ai bi
{ i 1
0
int a[5] = {-2, 3, 7, 4, -5};
int b[5] = {9, 6, -1, -8, 2}; 1
int c=0, i; + c
2
for(i=0;i<5;i++) 3
c += a[i] * b[i];
4
printf(“c=%d\n”,c); b
return 0;
}
Aplicaciones de Vectores
Problema de Ordenación
Algoritmo
Algoritmo a’1,a’2,…,a’n
a1,a2,…,an de
de a’1a’2…a’n
Ordenación
Ordenación
for(i=0; i<4;i++)
2 7 9 4 6 for(j=0;j<4;j++)
if(a[j]>a[j+1]){
aux = a[j];
2 7 4 9 6 a[j]=a[j+1];
a[j+1]=aux;
}
2 7 4 6 9
for(i=0;i<5;i++)
printf(“\t%d”,a[i]);
printf(“\n”);
return 0;
}
Problema de Búsqueda
i ai = k
a1,a2,…,an
Algoritmo
Algoritmo
de
de
Búsqueda
Búsqueda
k -1 k a
Búsqueda Lineal
k 7 a #include <stdio.h>
int main()
13 0 {
int i, k, a[]={13,5,9,12,6,34,7,42,2,56};
5 1
9 2 printf(“Teclea k: “);
scanf(“%d”,&k);
12 3 for(i=0; i<10; i++)
if (k == a[i])
6 4 break;
if (i>=10)
34 5 printf(“Error: %d no esta:”,k);
else
7 6 =i printf(“%d esta en posicion %d\n”,k,i);
return 0;
42 7 }
2 8
56 9
Búsqueda Binaria
#include <stdio.h>
a #include <math.h>
int main()
k 51 4 0 low {
int low, mid, up, k=51;
9 1 int a[]={4,9,13,24,36,47,51,65,73,86};
low = 0;
13 2 up = 9;
while(low <= up) {
24 3 mid = ceil((low+up)/2);
if (k < a[mid])
36 4 up = mid - 1;
else if (k > a[mid])
l u
47 5 mid m low = mid + 1;
2 else {
51 6 printf("%d en %d\n",k,mid);
system("pause");
return 0;
65 7
}
}
73 8 printf("No se encuentra\n");
system("pause");
86 9 up return -1;
}
Valor Devuelto por main()
Cuando se invoca una función, el valor devuelto
es recibido por aquel que hizo la llamada:
invocación
“el
“elque “el
que “elque
quees
es
llama”
llama” llamado”
llamado”
regreso
miprog
main()
main(){{
::
return
return-1;
-1;
}}
miprog.exe
Matrices: Arreglos 2D
int a[2][3] = { {-3,8,5} , {9,-2,4} }; representación “universal”
0 1 2 0 1 2
0 -3 8 5 0 -3 8 5
1 9 -2 4
0 1 2
1
9 -2 4
: :
1516 -3
18 8
20 5
RAM Una
Unamatriz,
matriz,es
esen
en
22 9 realidad
realidadun
un
24 -2 “arreglo
“arreglode
dearreglos”
arreglos”
26 4
: :
Multiplicación de Matrices
Cm p Amn Bn p
p
ci , j ai ,k bk , j
k 1
3 -2 5 -3 6 0
-7 9 4 8 -4 = -42
A23 5 9 C22
B32
2
c0, 0 ai ,k bk , j a0.0b0, 0 a0.1b1, 0 a0.2b2, 0 3(3) (2)(8) 5(5) 0
k 0
2
c1,1 ai ,k bk , j a1.0b0,1 a1.1b1,1 a1.2b2,1 7(6) 9(4) 4(9) 42
k 0
Multiplicación de Matrices
Cm p Amn Bn p i 0,1,2,..., m
n j 0,1,2,..., n
ci , j ai ,k bk , j k 0,1,2,..., n
k 1
Arreglos
Arreglosde
demayor
mayor
-2 7 -8 6 -5 3 9 -2 4 dimensionalidad
dimensionalidadyaya
no
noresultan
resultanprácticos
prácticos
Arreglos de Caracteres y Cadenas
char s[ ] = {‘H’,’o’,’l’,’a’};
char s[ ] = “Hola”;
“Fin de Cadena”
(EOS – End Of String)
Valor ASCII 0
Cadenas de Caracteres
OJO: tamaño suficiente para la
char w[10]; cadena más larga posible
:
scanf(“%s”, w);
:
72 ‘H’
Hola
111 ‘o’
valores
108
ASCII ‘l’
97 ‘a’
EOS 0 ‘\0’
agregado :
por RAM
scanf()
Impresión de Cadenas
char w[ ] = “Texto”;
:
printf(“%s”, w);
s1 F i l o m e n a 0
s2 F i l o m e n a 0
#include <stdio.h>
Idea: Copiar de uno en uno
los caracteres hasta int main()
encontrar el EOS. {
char s1[10] = “Filomena”;
char s2[10];
int i;
Filomena
for(i=0; s1[ i ] != ‘\0’; i++)
s2[i] = s1[i];
s2[i] = ‘\0’;
printf(“%s”, s2);
return 0;
}
Ejemplo: Concatenar dos Cadenas
0 1 2 3 4 0 1 2 3 4
s1 F i l o 0 s2 m e n a 0
s3 F i l o m e n a 0
#include <stdio.h>
Idea: Copiar hasta el int main()
EOS de la primer {
cadena y a partir de char s1[5] = “Filo”;
allí copiar la segunda. char s2[5] = “mema”;
char s3[10];
int i, j;
a[5] 5 13 3 9 6
dirección de 0 1 2 3 4
memoria
a = &a[0] = 2346 0101 a[0]
&a[1] = 2348 1101 a[1]
&a[2] = 2350 0011 a[2]
&a[3] = 2352 1001 a[3]
A l e x 0 0
Alex
Ana 1
A n a 0
Sofía
Paola S o f i a 0 2
Lidia
P a o l a 0 3
char
char lista[5][6];
lista[5][6];
L i d i a 0 4
Lista de Cadenas
Arreglo de
5 cadenas
#include <stdio.h> de longitud máxima 6
(incluido el EOS)
int main()
{
int i;
char c[5][6];
NOTA: c[i][j] se
NOTA:c[i][j] serefiere
refiereaaun
unsolo
solocaracter,
caracter,
mientras
mientrasque c[i]se
quec[i] serefiere
refiereaauna
unacadena.
cadena.
Arreglo (Lista) de Cadenas
0 1 2 3 4 5
char
charc[5][6]
c[5][6]=={{
“Alex”,”Ana”,
“Alex”,”Ana”, A l e x 0 0
“Sofia”,”Paola”,
“Sofia”,”Paola”,
”Lidia”
”Lidia”};};
A n a 0 1
caracter: c[2][2]
S o f i a 0 2
cadena: c[3]
P a o l a 0 3
L i d i a 0 4
ctype.h
Tipo Nombre Parámetros Descripción
int isdigit (int c) dígito (‘0’,...,‘9’)
int isalpha (int c) letra (‘A’,...,‘Z’, ‘a’,...,‘z’ )
int isalnum (int c) dígito o letra
int isxdigit (int c) dígito hexadecimal (‘0’,...,‘9’, ‘A’,...,‘F’)
int islower (int c) letra minúscula (‘a’,...,‘z’)
int isupper (int c) letra mayúscula (‘A’,...,‘Z’)
int isspace (int c) espacio (‘ ’, ‘\n’, ‘\t’, ‘\f’, ‘\r’, ‘\v’ )
int iscntrl (int c) carácter de control
int ispunct (int c) distinto a espacio, dígito o letra
int isprint (int c) imprimible incluyendo el espacio
int isgraph (int c) imprimible sin incluir el espacio
int tolower (int c) carácter c en minúsculas
int toupper (int c) carácter c en mayúsculas
stdlib.h
Paola Alex
Ana Ana
Algoritmo
Algoritmo
Sofía Lidia
de
de
Ordenación
Ordenación
Alex Paola
Lidia Sofía
Comparación: strcmp(s1,s2)
Intercambio: strcpy(s1,s2)
int strcmp(char s1[], char s2[])
= 0: s1 = s2
3
strcpy(c[j],c[j+1]); aux
strcpy(c[j+1],aux);
}
Alex 1234567890
Ana 2345678901
Sofía 3456789012
Paola 4567890123
Lidia 5678901234
nombres teléfonos
Alex 1234567890
Ana 2345678901
Lidia 5678901234
Paola 4567890123
Sofia 3456789012
nombres teléfonos
Alex 1234567890
Ana 2345678901
Pa 4567890123
ola Lidia 5678901234
Paola 4567890123
Sofía 3456789012
nombres teléfonos