Sunteți pe pagina 1din 33

PROFESOR

Algoritmos

Conjunto/secuencia de instrucciones para resolver un determinado- problema

La computadora entiende el lenguaje de los 0 y 1.

Lenguaje de programación: son lenguajes que resumen un conjunto de palabras del inglés con
determinada sintaxis que permiten escribir algoritmos.

El compilador transforma el lenguaje de programación a un programa ejecutable (lo tranforma a


código máquina)

variable: espacio en la memoria

ide: entorno integrado de desarrollo (herramienta de programación) Dentro de una IDE, uno trabaja
con proyectos (recursos relacionados)

.cpp: extension para c++

cin: input

cout: output

endl: enter al final

//: comentarios

Teorema de la programacion estructurada:

Describe tres estructuras de control y asegura que con ellas se puede resolver cualquier problema
computacional:

-Estructura simple o estructural secuencial

-Estructura condicional o de decisión

-Estructura iterativa o de repetición

Debugger (Herramienta de programación):

Permite hacer un seguimiento paso al paso del programa

F6: Step over

F5: Step into

F11: activar debugger

Tipos de datos

char – 1 byte
short - 1 byte (en realidad son 2)
int - 2 bytes (en realidad son 4)
long - 4 bytes (en realidad son 8)

float – 4 bytes
double – 8 bytes

bool – 1 byte

string (clase) – n+1 byte

Código ASCII: Código que se le da a cada caracter que nosotros conocemos. Se asocia con el tipo de
dato “char”

Funciones:

Si uso &var dentro de la función, el parámetro no toma la copia del valor de “var”, sino que toma
realmente a var y puede modificar directamente a var, usándolo como referencia.

Scope – Variables

Las variables que se declaran dentro de una estructura, solo existen dentro de ella.

Float R = (double) a/b //Agregar el paréntesis antes de un “int a” significa castear la variable

String

Son una sucesión de caracteres. Implícitamente c+ agrega un \0 al final de un string para indicar su
finalización.

TUTORIAL

Switch:

Caso default: aparece al final si no cumple ninguna de las condiciones anteriores

Si se usa break, se sale del bloque switch

Los caracte
res van entre ‘’, los strings entre “”

Array

int arr[] = {11, 35, 62, 555, 989};

Sumar elementos de un array

int sum = 0;

for (int x = 0; x < 5; x++) {


sum += arr[x];
}

cout << sum << endl;

Array multidimensional

int x[2][3] = {
{2, 3, 4}, // 1st row
{8, 9, 10} // 2nd row
};

INTRODUCCION A PUNTEROS

int score = 5;
cout << &score << endl;

//Outputs "0x29fee8", DIRRECCION EN LA MEMORIA

Punteros

Un puntero es una variable, con la dirección de otra variable como su valor. Todos los punteros
comparten el mismo tipo de dato, un numero hexadecimal que representa su dirección en la
memoria. Sirve para cambiar datos en la memoria dinámica

Se nombran con un asterisco (*)

int *ip; // pointer to an integer


double *dp; // pointer to a double
float *fp; // pointer to a float
char *ch; // pointer to a character

int *p = &x;
es lo mismo que:
int *p;
p = &x;
* is to learn for content
& is to learn for address
example: int x = 9; //decleration
int *p = &x; //decleration
cout << x; // 9
cout << *p; // 9
cout << &x; // address of x
cout << p; // address of x
cout << &p; // address of p

int score = 5;
int *scorePtr;
scorePtr = &score;

cout << scorePtr << endl;

Hay dos operadores para punteros

&: devuelve la direccion de memoria


*: devuelve el valor de la variable ubicada en la dirección especificada.

int var = 50;


int *p;

p = &var;

cout << var << endl;


// Outputs 50 (the value of var)

cout << p << endl;


// Outputs 0x29fee8 (var's memory location)

cout << *p << endl;


/* Outputs 50 (the value of the variable
stored in the pointer p) */

TIPO DE MEMORIA

El Stack (Pila) se utiliza para almacenar variables locales, variables de referencia, parámetros y
valores de retorno, resultados parciales. Guarda las variables declaradas en main() y todas las
funciones

El Heap (Montículo) almacena objetos y sus variables de instancia. Es un espacio de memoria


dinámica que se crea al inicio de la máquina virtual y es único. Es la región de la memoria que es
manejada por el programador usando punteros para acceder a la memoria.
New int se guarda en el montículo

Int (normal) se guarda en la pila

La función sizeof() devuelve el tamaño de la variable

FUNCIONES

Tipo_valor_retornado nombre(tipo_dato parâmetro)

Las funciones de tipo void no devuelven/retorna ningún valor. Se usa cuando en la funcion hay un
return, sino se usa int (adentro hay un print/cout)

Para llamar a una función, se la escribe con los parámetros entre paréntesis

Si se quiere crear una función luego del main(), hay que crear una función igual (prototipo) antes del
main

ARGUMENTOS Y PARAMETROS

Para que una función use argumentos, debe declararse parámetros formales, que son variables que
aceptan los valores del argumento

void printSomething(int x)
{
cout << x;
}

EJEMPLO
#include <iostream>

using namespace std;

int sum(int x, int y)

return x+ y;

// aqui int x, int y son parámetros

/* la funcion suma toma estos valores y devuelve su suma

*/

int main(){

int a = 2;

int b = 3;

cout<<sum(a,b)<<endl;

/* Aquí a y b son argumentos que toma la función. */

return 0;

FUNCION RAND()

Se necesita usar la librería

#include <cstdlib>

 Para conseguir numeros de un rango del 1-6


int main () {
for (int x = 1; x <= 10; x++) {
cout << 1 + (rand() % 6) << endl;
}
}

La función SRAND() es verdaderamente aleatoria ya que permite colocar un seed. Si se la combina


con la librería ctime:

 #include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main () {
srand(time(0));

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


cout << 1 + (rand() % 6) << endl;
}

CASO DEFAULT EN PARAMETRO DE FUNCIONES

int sum(int a, int b=42) {


int result = a + b;
return (result);
}

FUNCIONES CON MISMO NOMBRE

Se puede hacer siempre que el tipo de dato del parámetro sea distinto

void printNumber(int a)

void printNumber(float a)
RECURSIVIDAD

Ejemplo para encontrar el factorial de un número

int factorial(int n) {
if (n==1) {
return 1;
}
else {
return n * factorial(n-1);
}
}

A las funciones se las puede llamar por valor o por referencia. En el primer caso usa una copia
del valor real en el parámetro formal de la funcion, sin afectar a la variable en cuestión.

En cambio, si se lo llama por referencia, cualquier cambio hecho al parámetro afecta al


argumento

LLAMADA POR VALOR

void myFunc(int x) {
x = 100;
}

int main() {
int var = 20;
myFunc(var);
cout << var;
}
// Outputs 20

LLAMADA POR REFERENCIA (se usan punteros)


void myFunc(int *x) {
*x = 100;
}

int main() {
int var = 20;
myFunc(&var);
cout << var;
}
// Outputs 100

OBJETOS Y CLASES

Un objeto son unidades independientes, y cada una tiene su identidad propia. A las
características particulares que tiene un objeto se las denomina atributos. Un atributo describe
el estado actual de un objeto, y puede tener varios al mismo tiempo. A su vez cada objeto tiene
un comportamiento distinto.

Las tres dimensiones que abarca cualquier objeto en POO son: identidad, atributos y
comportamiento.

CLASES

Los objetos son creados utilizando clases. Las clases describen como será el objeto, pero lo
separa del objeto en sí.

Es decir, una clase es el arquetipo del objeto, descripción o definición.

Un método es una función que pertenece a una clase.

El proceso de crear objetos se denomina instanciación.

Sintaxis:

La definición de una clase termina con un punto y coma.

 EJEMPLO:
class BankAccount {
public:
void sayHi() {
cout << "Hi" << endl;
}
};

int main()
{
BankAccount test;
test.sayHi();
}

“test” es el objeto que creamos y posee todos los atributos de la clase BankAccount.

cout << ( calificacion >= 60 ? "Aprobado" : "Reprobado" );


Videos

#include <iostream> (libreria) que permite que nuestro programa tenga entrada y salida de datos

Using namespace std; sirve para poder programar salidas

Retun 0 sirve para indicar que nuestro programa finalizó correspondiente

Como colocar un enter:

 Cout<<”Hola mundo”<<endl;
 Cout<<”Hola mundo \n”;

Tipo de datos

Int: entero
float: número con coma
double: igual que el flotante, pero permite guardar números más grandes
char: una sola letra con comillas simples ‘’ Ejemplo: char variable[10] permite 10 caracteres
Entrada/salida

Cout<<
Cin>>

Comentarios

//
o
/* */

Reducir número a dos decimales

 Se coloca antes del cout: cout.precision(2)

Potencia y raíz cuadrada

Sqrt(num)

Pow(num,potencia)

== (operador de igualdad) u != es distinto

#include <math.h> (librería para operaciones matemáticas)

Switch

Swith(variable) {

Case 1:

Case 2:

Case 3: “hacer algo”;

Break;

Case 3:”hacer otra cosa”;

Break;

Default: “…”

Símbolos lógicos

And: &&W

Or: ||

Elif  else if (condición en el medio)

ESTRUCTURAS REPETITIVAS

 While
While (condición) {

instrucciones

 Do while

Do {} while {}

Librería #include <conio.h>

Permite usar getch() antes del return 0 para que no se cierre el programa cuando se abra el .exe

Librería #include <stdlib.h>

Permite usar system(“pause”); para que el programa no termine hasta tocar una tecla

 For

For (inicio ; condición;incremento /decremento)

Inicio: int i = 0 (ejemplo)

JUEGO DE ADIVINAR NUMERO ALEATORIO

#include <time.h>

srand(time(NULL));

num_aleatorio= lim_inferior + rand()% (lim_superior)

// del [1 al 100]

num_aleatorio= 1 + rand()%100

DESCOMPOSICION DE UN NUMERO EN PRIMOS

int num;

cin>>num;

for(int i=2;num>1;i++) {

while (num%i==0){

cout<<i<<" ";

num/=i;

VECTORES O ARREGLOS (ARRAYS)


Un vector o array es un tipo de dato que almacena una secuencia de datos del mismo tipo. Sus
elementos se almacenan en zonas contiguas de memoria y se puede acceder a ellos de manera
directa mediante un índice o posición.

Definición de vector:

Int números[10];

Char letras[5]

Float reales[15]

Iniciacion

Int numero[] = {1,4,6,7,3} (se rellena el arreglo sin aclarar cuantos elementos tiene)

Para llamar numero[5];

MATRICES O TABLAS (ARRAYS BIDIMENSIONALES)

Una matriz es un array bidimensional. Tiene filas y columnas

Definición:

Tipo nombre[nfilas][ncolumnas];

Ejemplo

Int numeros[3][2] = {{1,2,3},{4,5,6}};

Programa para crear matriz con número y filas indicadas, rellenarlas y luego imprimirla
CADENAS O STRINGS

Son arreglos de caracteres

Se usar la librería #include <string.h>

char mi_nombre[] = "Agustin";

Para ingresar información a un string se usa cin.getline(variable,max,lineafinal)

char nombre[10];

cin.getline(nombre,20,’\n’);

La funcion gets(variable) ocupa espacio en la memoria que no debería ocupar si supera el límite de
caracteres permitido por el string

Longitud de string

Char palabra[]=”hola”;

Int longitud = 0;

Longitud = strlen(palabra);

Copiar contenido de un string a otro


Strcpy(lugar_a_guardar,string)

Comparar cadenas alfabéticamente

Strcmp(string1,string2)

Si strcmp(a,b)==son iguales

EJEMPLO:

If(strcmp(a,b)==0) {

Son iguales

If (strcmp(a,b)>0){

Cout<<a<<”es mayor a “<<b;

Comparar solo el número de caracteres

strncmp(string,’A’,1)==0 //Comprueba que la primera letra se ‘A’

Concaternar cadenas

Strcat(new_string,old_string)

Invertir cadenas

Strrev(string) //cambia realmente el contenido de la variable

Convertir string a mayúscula

strupr(string)

Convertir string a minúscula

strlwr(string)

Convertir string a números

atoi (string_int)

atof (string_float)

Debe usarse #include <stdlib.h>

ORDENACION
La ordenación de datos (sort) es una operación que consiste en disponer un conjunto de datos en
algún determinado orden

Una colección de datos puede ser almacenada en memoria central (ordenación interna, se guarda en
arrays) o en archivos de datos externos guardados en unidades de almacenamiento (ordenación
externa)

Los métodos normalmente se ordenan de modo ascendente. Se dividen en dos grupos

Directos(básicos): burbuja, selección, inserción. Son los mas ineficientes para grandes cantidades de
datos. En el caso de listas pequeñas, los métodos directos son más eficientes y su uso es muy
frecuente.

Indirectos (avanzados): Shell, quick short, merge sort, radix sort. Se usa, por ejemplo, en listas
grandes.

 Método burbuja: funciona revisando cada elemento de la lista que va a ser ordenada con el
siguiente, intercambiándolos de posición si están en el orden equivocado.

Si numActual > numSiguiente  Cambio

for (i=0;i<5;i++){

for (j=0;j<5;j++){

if (numeros[j] > numeros [j+1]){

aux = numeros[j];

numeros[j]=numeros[j+1];

numeros[j+1]=aux;

 ORDENAMIENTO POR INSERCION

Es una manera natural de ordenar.

Si num_izq > numaActual  cambio

 Ordenamiento por selección


Pasos:

Busca el mínimo elemento de la lista

Lo intercambia con el primero

Busca al mínimo del resto del array y lo coloca en segundo lugar

 Ordenación Shell
Se la denomina también ordenación por inserción con incrementos descendentes. Los
saltos entre las comparaciones son mayores que en el método tradicional, el cual va de uno
en uno

Pasos:
Se divide la lista original entre n/2 grupos de dos, considerando un incremento o salto entre
los elementos de n/2

Se clasifica cada grupo por separado, comparando las parejas elementos y si no están
ordenados, se intercambian.

Se divide ahora la lista en la mitad de grupos (n/4), con un salto entre los elementos tambien
a la mitad (n/4), y luego se clasifica cada grupo por separado.

El algoritmo termina cuando el tamaño del salto es 1.


 Ordenación rápida (Quicksort)
es uno de los mejores métodos y de los más eficientes

divide los n elementos de la lista a ordenar en dos partes separadas por un elemento: una
partición izquierda, un elemento central denominado pivote y una partición derecha.

La partición se hace de manera que todos los elementos de la primera partición sean
menores que todos los elementos de la segunda partición. Las sublistas se ordenan
independientemente

Pasos:
1- Seleccionar el elemento central de a[] como pivote
2- Se divide en dos listas de manera que sea izquierda hayas elementos menores que el
pivot y a la derecha mayores
3- Se utiliza el mismo algoritmo en la parte derecha y en la parte izquierda.
BUSQUEDA SECUENCIAL DE UN ARREGLO

BUSQUEDA BINARIA

Se requiere que el array esté ordenado en forma ascendente

ESTRUCTURAS
Es la colección de uno a más tipos de elementos denominados campos, cada uno de los cuales
puede ser un tipo de dato diferente.

Ejemplo:

struct coleccion_CD {

char titulo[30]; // campos

char artista[25];

float precio;

}; // TERMINA CON PUNTO Y COMA

Como declarar variables

Struct colección_CD CD1,CD2,CD3; // las variables contienen los campos en orden

struct coleccion_CD {

char titulo[30]; // campos

char artista[25];

float precio;

} CD1,CD2,CD3;

ESTRUCTURA SIMPLE (con variables con datos)

struct Persona {

char nombre[20];

int edad;

persona1 = {"Agustin",20}, // si declaro varias variables se separan con comas

persona2 = {"Matias",15}; //cuando finalizo el struct va ;

int main(){

cout<<persona1.nombre<<endl;

cout<<persona1.edad;

return 0;

ESTRUCTURA SIMPLE (con variables sin datos)


ESTRUCTURAS ANIDADAS

Crear listas anidadas y pedir información de cada uno

En este ejemplo, se crea un arreglo de estructuras (dentro de un arreglo, guardamos dos o más
estructuras)
Vaciar el buffer (cuando no te deja escribir más información en la consola)

fflush(stdin)

EJERCICIO
FUNCIONES

Se codean independientemente del resto del código.

Sintaxis:

Tipo nombre(tipo var1,tipo var2) { //el primer tipo es el tipo de valor que devuelve

Conjunto de instrucciones;

PLANTILLAS

Sirven para ingresar un tipo de dato genérico (ingresar cualquiera

Template <class hola>


void mostrarAbs(hola numero); //se debe poner el template antes del prototipo y de la definición

INTERCAMBIAR VALORES
Se usa & en la definición a la función

CONVERTIR SEGUNDOS A SEGUNDOS, MINUTOS Y HORAS

VECTORES Y FUNCIONES

Void funcion (tipo nombreArray[], int tamañoArray)

Llamada:

Funcion(nombreArray, tamañoArray)

El tamaño se declara con una variable

Ejemplo: const int size = 5;

Pasar datos de matriz por matámetro


Cómo pasar parámetros de tipo estructura

RECURSIVIDAD

Funcion que se llama a ella misma, con caso base y caso general.

Factorial de un número

PUNTEROS
Los punteros son variables donde se almacena la dirección de memoria donde se está guardando
otra variable

&n = la dirección de n

*n= La variable cuya dirección está almacenada en n

PUNTEROS Y ARRAYS

Imprimir elementos de un array utilizando punteros. dir_numeros++ significa que se incrementa en 4


bytes. En un ciclo for, permite ir pasando de elemento de elemento en el array

Si se saca el “*” de dir_numeros, imprime la posición de memoria

Asignación dinámica de arreglos

Hasta ahora usamos arreglos estáticos.

new: Reserva el número de bytes solicitado por la declaración. Se necesita la librería <stdlib.h>

delete: Libera un bloque de bytes reservado con anterioridad.


Int numCalif, *calif;

Cin>>numCalif

Calif = new int[numCalif] //crea un arreglo para el número de calificaciones que el usuario indica

Delete [] calif; //libera el espacio

PILAS (estructura LIFO)

Es una estructura de datos ordenadas tales que solo se pueden introducir y eliminar por un extremo,
llamado cima.

El último en entrar es el primero en salir.

Las operaciones más comunas son INSERTAR (push), que añade un elemento encima de la pila y la
operación QUITAR (pop) elimina o saca un elemento de la pila.

Ejemplo con caracteres:

Entrada: MAC

Salida: CAM
Un nodo contiene un dato y un puntero (*siguiente) que señala a otro nodo

Como crear nodos:

Como insertar elementos en una pila

1- Crear el espacio en memoria para almacenar un nodo (con el new)

2- Cargar el valor dentro del nodo (dato)

3- Cargar el puntero pila dentro del nodo(*siguiente)

4- Asignar el nuevo nodo pila

Como quitar elementos de una pila

1- Crear una variable *aux de tipo Nodo

2- n = aux->dato;

3- Pasar pila a siguiente nodo


4- Eliminar auxiliar
Ejercicios

os

1. Cuál de las siguientes sentencias son correctas para la ecuación algebraica y=ax3

+ 7.

a. y = a * x * x * x + 7

b. y = a * x * x * (x + 7)

c. y = (a * x) * x *( x + 7)

d. y = (a * x) * x * x + 7

e. y = a * (x * x * x) + 7

f. y = a * (x * x * x + 7)

2. Escriba un programa que pida al usuario dos números e informe la suma, la resta, el

producto y el cociente de los mismos

3. Escriba un programa que imprima los números del 1 al 4 en una misma línea, hágalo de

las formas siguientes:

a. Utilizando un solo operador de inserción de flujo

b. Una única sentencia con 4 operadores de inserción de flujo

c. Utilizando cuatro sentencias

4. Escriba un programa que reciba tres números por el teclado e imprima la suma, el

promedio, el producto, el mayor y el menor de esos números. Escriba un adecuado

dialogo en pantalla.

5. Escriba un programa que reciba un numero que represente el radio de un circulo e

imprima el diámetro, circunferencia y área.

6. Que imprime el siguiente código

a. std::cout << “*\n**\n***\n****” <<std::endl;

b. std::cout << ‘A’;

c. std::cout << static_cast< int > ‘A’; (que es static_cast? Investigue.)

7. Utilizando solo lo que hemos desarrollado en esta introduccion escriba un programa que

calcule los cuadrados y los cubos de los números de 0 a 10 y los muestre por pantalla.

8. Escriba un programa que reciba un numero entero de 5 digitos, que separe el numero en

sus digitoe y los muestre por pantalla, uno por línea comenzando por elmas significacivo
en la primera línea.

9. Dada una terna de números naturales que representan al día, al mes y al año de una

determinada fecha informarla como un solo número natural de 8 dígitos (AAAAMMDD).

10. Dado un valor entero ingresado por teclado, se pide informar: a) La quinta parte de dicho

valor b)El resto de la división por 5, c)La séptima parte del resultado del punto a)

11. Dados dos valores enteros y distintos, emitir una leyenda apropiada que informe cuál es

el mayor entre ellos.

12. Dadas dos fechas representadas por el dia, el mes y el año informar cual es la más

reciente.

13. Dado tres valores L1, L2, L3, determinar si los mismos forman un triangulo.

Algoritmos y Estructura de Datos DISI UTN.BA. Dr. Oscar BRUNO Página 23

14. Dado tres valores L1, L2, L3, que representan los lados de un triangulo determinar e

imprimir una leyenda según sea: equilátero, isósceles o escáleno.

15. Dados dos valores, N y M números naturales, informar su producto por sumas sucesivas.

16. Dados 50 números enteros, informar el promedio de los mayores que 100 y la suma de los

menores que -10.

17. Se realiza una inspección en una fábrica de pinturas, y se detectaron 20 infracciones. De

cada infracción se tomó nota de los siguientes datos: a) Tipo de Infracción (1, 2, 3, ó 4), b)

Motivo de la infracción, c)Valor de la multa, d)Gravedad de la infracción ('L','M', 'G'). Se

pide informar al final del proceso: 1)Los valores totales de la multa a pagar de acuerdo al

tipo de gravedad. “. La leyenda "Clausurar fábrica" si la cantidad de infracciones 3 y 4 con

gravedad "G" sean mayor a 3.

18. Ingresar e informar valores, mientras que el valor ingresado no sea negativo. Informar la

cantidad de valores ingresados.

19. Se ingresa un conjunto de valores reales, cada uno de los cuales representan el sueldo de

un empleado, excepto el último valor que es cero e indica el fin del conjunto. Se pide

desarrollar un programa que determine e informe: a)Cuántos empleados ganan menos

$1.520. b) Cuántos ganan $1.520 o más pero menos de $2.780. c) Cuántos ganan $2.780

o más pero menos de $5.999. d) Cuántos ganan $5.999 o más.

20. Dado un valor M determinar y emitir un listado con los M primeros múltiplos de 3 que no

lo sean de 5, dentro del conjunto de los números naturales.


21. Dados 10 valores informar el mayor

22. Dados N valores informar el mayor, el menor y en que posición del conjunto fueron

ingresados.

23. Dado un conjunto de Nombres y Fechas de nacimientos (AAAAMMDD), que finaliza con

un Nombre = 'FIN', informar el nombre de la persona con mayor edad y el de la más

joven.

24. Dado un conjunto de valores, que finaliza con un valor nulo, determinar e imprimir (si

hubo valores): a) El valor máximo negativo, b) El valor mínimo positivo, c) El valor mínimo

dentro del rango -17.3 y 26.9, d) El promedio de todos los valores.

25. Se dispone de un lote de valores enteros positivos que finaliza con un número negativo.El

lote está dividido en sublotes por medio de valores cero. Desarrollar un programa que

determine e informe: a) por cada sublote el promedio de valores, b) el total de sublotes

procesados, c) el valor máximo del conjunto, indicando en que sublote se encontró y la

posición relativa del mismo dentro del sublote, d) valor mínimo de cada sublote

26. Dada una serie de M pares {color, número} que corresponden a los tiros de una ruleta. Se

pide informar: a) cuántas veces salió el número cero y el número anterior a cada cero, b)

cuántas veces seguidas llegó a repetirse el color negro, c) cuántas veces seguidas llegó a

repetirse el mismo número y cuál fue, d) el mayor número de veces seguidas que salieron

alternados el rojo y el negro, el mayor número de veces seguidas que se negó la segunda

docenas

27. Un buque de carga traslada 100 contenedores a tres diferentes puertos del país. Los

puertos se identifican con los números 1, 2 y 3. De cada contenedor que el buque traslade

se registran los siguientes datos: a) Identificación del contenedor, b) Peso del contenedor

en kg, c) Puerto de arribo(un valor de 1 a 3). Se pide calcular e informar: 1) El peso total

que el buque debe trasladar, 2) La identificación del contenedor de mayor peso, 3) La

cantidad de contenedores que debe trasladar a cada puerto

28. En un torneo de fútbol participan K equipos. El torneo se juega con el sistema de todos

contra todos. Por cada partido disputado por un equipo se dispone de la siguiente

Algoritmos y Estructura de Datos DISI UTN.BA. Dr. Oscar BRUNO Página 24

información: Nro. de equipo, Código del resultado ('P'= Perdido, 'E'= Empatado, 'G'=

Ganado).Se arma un lote de datos con todos los resultados del torneo, agrupados por
Nro. de equipo. Desarrollar el programa que imprima: a) Por cada equipo, su número y el

puntaje total que obtuvo (suma 3 si gana, y 1 si empata). b) Cantidad de equipos que

obtuvieron el puntaje minimo o cuantos son si hay mas de uno en esa situacion

29. Dada una serie de caracteres que conforman una oración, donde cada palabra está

separada de la siguiente por un carácter blanco y la oración finaliza con un punto. Se pide

informar: a)cantidad de veces que apareció cada vocal, b)cantidad de palabras que

contiene la oración, c)cantidad de letras que posee la palabra más larga.

30. Dado un número entero positivo entre 1 y 3999 informar su correspondiente número

Romano

31. Dado un conjunto de valores enteros, calcular e informar a) cuántos valores cero hubo, b)

promedio de valores positivos, c) sumatoria de valores negativos.

32. Resolver el ejercicio para los siguientes lotes de datos:

a. 167 valores enteros

b. N valores, donde el valor de N debe ser leído previamente

c. El conjunto de valores termina con un valor igual al anterior

d. Se dan N valores, pero el proceso deberá finalizar si se procesan todos los valores

o si la cantidad de ceros supera a cuatro

e. Se dan N valores, pero el proceso deberá finalizar si se cumple alguna de las

condiciones de 4) o si el promedio de positivos resulta mayor que seis.

33. El gobierno de la Ciudad de Buenos Aires realiza una encuesta en casas de familia. De

cada familia conoce: domicilio, tipo de vivienda ('C':casa, 'D':departamento), y cantidad de

integrantes. De cada integrante de la familia se conoce: nombre y apellido, edad, sexo ('F',

'M'), nivel de estudios alcanzados ('N': no posee, 'P': primario, 'S': secundario, 'T':

terciario, 'U': universitario), y un indicador ('I': incompleto, 'C': completo) que se refiere al

ítem anterior. Los datos finalizan cuando la cantidad de integrantes sea igual a cero. Se

pide emitir un listado con los resultados:

a. los datos de los encuestados que hayan completado los estudios primarios

b. el porcentaje de analfabetismo en la ciudad (se considera analfabetos a los

mayores de 10 años que no posean estudios)

c. el domicilio de la familia con mayor cantidad de integrantes que viven en

departamento
d. edad promedio de cada familia y de la ciudad

e. cantidad de encuestados en cada tipo de nivel de estudios alcanzados

incompletos.

f. porcentaje de encuestados de sexo femenino y masculino.

S-ar putea să vă placă și