EDatos Manual
EDatos Manual
EDatos Manual
INFORMATICA I
Indice
1.- Descripción General
• Estructura de datos
• Tipos de Datos, Variables
• Ejemplos de entrada y salida
3.- Funciones
• Sintaxis de las funciones
• Parámetros por referncia y valor
• Recursividad
5.- Estructuras
• Definición
• Arreglos con estructuras
• Ejercicios propuestos
Podemos decir que el lenguaje C es un lenguaje de nivel medio, ya que combina elementos de
lenguaje de alto nivel con la funcionalidad del lenguaje ensamblador. Es un lenguaje estructurado, ya
que permite crear procedimientos en bloques dentro de otros procedimientos. Hay que destacar que el
C es un lenguaje portable, ya que permite utilizar el mismo código en diferentes equipos y sistemas
informáticos: el lenguaje es independiente de la arquitectura de cualquier máquina en particular.
Por último solo queda decir que el C es un lenguaje relativamente pequeño; se puede describir
en poco espacio y aprender rápidamente. Este es sin duda el objetivo de éste curso. No pretende ser un
completo manual de la programación, sinó una base útil para que cualquiera pueda introducirse en este
apasionante mundo.
Aunque en principio cualquier compilador de C es válido, para seguir este curso se recomienda
utilizar el compilador Turbo C/C++ o bien el Borland C++ 5.0.
UTP -4-
Todo programa en C consta de una o más funciones, una de las cuales se llama main. El programa
comienza en la función main, desde la cual es posible llamar a otras funciones.
Cada función estará formada por la cabecera de la función, compuesta por el nombre de la misma y
la lista de argumentos (si los hubiese), la declaración de las variables a utilizar y la secuencia de
sentencias a ejecutar.
Ejemplo:
declaraciones globales
main( ) {
variables locales
bloque
}
funcion1( ) {
variables locales
bloque
}
Comentarios
A la hora de programar es conveniente añadir comentarios (cuantos más mejor) para poder saber
que función tiene cada parte del código, en caso de que no lo utilicemos durante algún tiempo. Además
facilitaremos el trabajo a otros programadores que puedan utilizar nuestro archivo fuente.
El comentario, contenido entre estos dos símbolos, no será tenido en cuenta por el compilador.
Palabras clave
Existen una serie de indicadores reservados, con una finalidad determinada, que no podemos utilizar
como identificadores.
UTP -5-
Identificadores
Un identificador es el nombre que damos a las variables y funciones. Está formado por una
secuencia de letras y dígitos, aunque también acepta el caracter de subrayado _. Por contra no acepta
los acentos ni la ñ/Ñ.
El primer caracter de un identificador no puede ser un número, es decir que debe ser una letra o el
símbolo _.
Se diferencian las mayúsculas de las minúsculas, así num, Num y nuM son distintos
identificadores.
Válidos No válidos
_num 1num
var1 número2
fecha_nac año_nac
UTP -6-
TIPOS DE DATOS
En 'C++' existen básicamente cuatro tipos de datos, aunque como se verá después, podremos
definir nuestros propios tipos de datos a partir de estos cuatro. A continuación se detalla su nombre, el
tamaño que ocupa en memoria y el rango de sus posibles valores.
Calificadores de tipo
Los calificadores de tipo tienen la misión de modificar el rango de valores de un determinado tipo
de variable. Estos calificadores son cuatro:
• signed
Le indica a la variable que va a llevar signo. Es el utilizado por defecto.
• unsigned
Le indica a la variable que no va a llevar signo (valor absoluto).
• short
Rango de valores en formato corto (limitado). Es el utilizado por defecto.
• long
Rango de valores en formato largo (ampliado).
Las variables
Una variable sólo puede pertenecer a un tipo de dato. Para poder utilizar una variable, primero tiene
que ser declarada:
Es posible inicializar y declarar más de una variable del mismo tipo en la misma sentencia:
[calificador] <tipo><nombre1>,<nombre2>=<valor>,<nombre3>=<valor>,…
#include <iostream.h>
¿ Dónde se declaran ?
Las variables pueden ser de dos tipos según el lugar en que las declaremos: globales o locales.
La variable global se declara antes de la main( ). Puede ser utilizada en cualquier parte del
programa y se destruye al finalizar éste.
La variable local se declara después de la main( ), en la función en que vaya a ser utilizada. Sólo
existe dentro de la función en que se declara y se destruye al finalizar dicha función.
El identificador (nombre de la variable) no puede ser una palabra clave y los caracteres que
podemos utilizar son las letras: a-z y A-Z (ojo! la ñ o Ñ no está permitida), los números: 0-9 y el
símbolo de subrayado _. Además hay que tener en cuenta que el primer caracter no puede ser un
número.
/* Declaración de variables */
#include <iostream.h>
int a;
main() /* Muestra dos valores */
{
int b=4;
cout<<"b es local y vale:"<<b;
a=5;
cout<<"\na es global y vale:"<<a;
}
Constantes
Al contrario que las variables, las constantes mantienen su valor a lo largo de todo el programa.
Para indicar al compilador que se trata de una constante, usaremos la directiva #define:
Observa que no se indica el punto y coma de final de sentencia ni tampoco el tipo de dato.
La directiva #define no sólo nos permite sustituir un nombre por un valor numérico, sinó también
por una cadena de caracteres.
#include <iostream.h>
UTP -9-
#define pi 3.1416
main() /* Calcula el perímetro */
{
int r;
cout<<"Introduce el radio: ";
cin>>r;
cout<<"El perímetro es:"<<2*pi*r;
}
Secuencias de escape
\n salto de línea
\b retroceso
\t tabulación horizontal
\v tabulación vertical
\\ contrabarra
\f salto de página
\' apóstrofe
\" comillas dobles
\0 fin de una cadena de caracteres
#include <iostream.h>
Inclusión de ficheros
Para indicar al compilador que vamos a incluir ficheros externos podemos hacerlo de dos maneras
(siempre antes de las declaraciones).
UTP -10-
#include "misfunc.h"
#include "c:\includes\misfunc.h"
#include <misfunc.h>
NOTA : Se debe tener en cuenta que la mayoria de compiladores en “C”, utilizan la misma distribucion
de directorios es decir :
A continuación se explican los tipos de operadores (aritméticos y de asignación) que permiten realizar
operaciones matemáticas en lenguaje C.
Operadores aritméticos
Los binarios:
+ Suma
- Resta
* Multiplicación
/ División
% Módulo (resto)
y los unarios:
++ Incremento (suma 1)
-- Decremento (resta 1)
- Cambio de signo
Su sintaxis es:
binarios:
<variable1><operador><variable2>
unarios:
<variable><operador> y al revés, <operador><variable>.
#include <iostream.h>
Operadores de asignación
= Asignación simple
+= Suma
-= Resta
*= Multiplicación
/= División
%= Módulo (resto)
Con estos operadores se pueden escribir, de forma más breve, expresiones del tipo:
n=n+3 se puede escribir n+=3
#include <iostream.h>
Será importante tener en cuenta la precedencia de los operadores a la hora de trabajar con ellos:
() Mayor precedencia
++, - -
*, /, %
+, - Menor precendencia
Las operaciones con mayor precedencia se realizan antes que las de menor precedencia.
Si en una operación encontramos signos del mismo nivel de precedencia, dicha operación se realiza
de izquierda a derecha. A continuación se muestra un ejemplo sobre ello:
a*b+c/d-e
UTP -13-
1. a*b resultado = x
2. c/d resultado = y
3. x+y resultado = z
4. z-e
Fijarse que la multiplicación se resuelve antes que la división ya que está situada más a la izquierda
en la operación. Lo mismo ocurre con la suma y la resta.
#include <iostream.h>
2.- Escriba tres nombres de variable para cada nombre que se indica :
3.- Utilice los operadores matemáticos para transformar las siguientes expresiones algebraicas:
3.1) p ( p − a )( p − b)( p − c
b3 + c
3.2)
a −5
3.3) 2(A+B)
c − a + b3
3.4)
c − b2
3.5) W+T
K
3.6) A - 3B2
5K + 8J
UTP -15-
Ejercicios propuestos.-
1. El calculo de un pago mensual de empleado de una empresa se efectúa de
la siguientes manera: el sueldo básico se calcula en base al número total de
horas trabajadas basada en una tarifa horaria, al sueldo básico se le aplica
una bonificación del 20% obteniéndose el sueldo bruto, al sueldo bruto se le
aplica un descuento del 10% obteniéndose el sueldo neto. Escriba un
programa que calcule e imprima el sueldo básico, el sueldo bruto y el
sueldo neto de un trabajador.
Datos a considerar: nombre, horas trabajadas y tarifa por hora
6.- Crear un algoritmo para venta de Artefactos, datos nombre del cliente y el
precio del artefacto (no incluye el IGV), se deberá visualizar:
a. El precio final, precio del artefacto mas IGV.
b. El valor de la cuota inicial, 10% del precio final.
c. El valor de cada una de las 4 cuotas.
7.- Desarrolle un algoritmo para la telefónica que permita mostrar el pago por
consumo telefónico; Datos del programa código del usuario, el número
telefónico y la cantidad de minutos utilizados.
Visualice el código del usuario, el importe por los minutos utilizados, el IGV y el
pago total.
Tenga en cuenta que la empresa cobra S/0.30 por minuto utilizado, S/ 48.00 de
renta básica y que el IGV es 19% respecto al importe por minutos.
UTP -16-
9.- Desarrolle un algoritmo para SEDAPAL, los datos el código del usuario y la
cantidad de metros cúbicos consumidos. Calcule y visualice los siguientes
pagos:
a. Importe inicial.
b. Mantenimiento de parques y jardines (2.8%)
c. Relleno sanitario (1.4%)
d. Mantenimiento general (2.1%)
e. IGV (18%)
f. Pago total
Considere el precio que se paga por cada metro cúbico consumido se paga S/
0.45 y que los porcentajes son respecto al importe inicial.
UTP -17-
OPERADORES RELACIONALES
Los operadores relacionales se utilizan para comparar el contenido de dos variables.
#include <iostream.h>
}
UTP -18-
{
Sentencia1;
Sentencia 2;
Sentencia3;
.
.
.
.
Sentencia n;
}
LA SENTENCIA if ( simple )
En c++, la estructura de control de selección principal es una sentencia if. La sentencia if
tiene dos alternativas o formatos posibles. El formato más sencillo tiene la sintaxis
siguiente:
Hasta este momento , las sentencias if implementan decisiones que implican una o dos
alternativas. En esta seccion se mostrara como se puede utilizar la sentencia if para
implementar decisiones que impliquen diferentes alternativas
Una sentencia if es anidada de la rama verdadera o la rama falsa es a su vez una sentencia
if. Una sentencia if anidada se puede utilizar para implementar decisiones con varias
alternativas o multi- alternativas.
Sintaxis:
Calcular el máximo valor de 2 notas ingresadas por teclado e imprimir si esa nota es
aprobatoria o no (notas de 0-20).
#include<iostream.h>
void main(){
int nota1,nota2,mayor;
cout<<" Ingresar nota 1:"<<endl;
cin>>nota1;
cout<<"Ingresar nota 2:"<<endl;
cin>>nota2;
if(nota1>nota2)
mayor=nota1;
else
mayor=nota2;
cout<<"El mayor nùmero es "<<mayor<<endl;
if(mayor>10)
cout<<"Aprobado”<<endl;
else
cout<<"Desaprobado”<<endl;
}
#include<iostream.h>
void main(){
double sueldo, nuevoSueldo;
cout<<"Ingresar sueldo:"<<endl;
cin>>Sueldo;
if(sueldo<2000)
nuevoSueldo=sueldo*1.20;
else if(sueldo>=2000&&sueldo<=3000)
nuevoSueldo=sueldo*1.13;
else
nuevoSueldo=sueldo*1.09;
cout<<"El nuevo sueldo es:”<<nuevoSueldo<<endl;
}
UTP -21-
EJERCICIOS PROPUESTOS
1) Diseñe un programa que calcule el monto a pagar de una compra de un sòlo producto
considerando un descuento del 35% por la compra de 20 unidades.
2) Diseñe un programa que lea un nùmero entero y muestre lo siguiente: Si es negativo,
par, múltiplo de 5.
3) Se van a publicar la nota de un alumno, dependiendo de su nota se ubicará en una de
la siguientes categorías:
Algoritmos y Estructuras de Datos I Guía de Laboratorio
PROMEDIO CATEGORÍA
18 – 20 Excelente
15 – 17 Bueno
11 – 14 Regular
0 -10 Malo
EDAD CATEGORÍA
18 -màs Contenido para adultos
14 -17 Mayores de 14
0 –13 apt
TP<=10 Frio
10<TP<=20 Nublado
20<TP<=30 Caluroso
TP30 Trópico
UTP -22-
Condicional Simple
1. Datos del programa el nombre de un trabajador sus horas trabajadas y tarifa
normal, Si tiene horas extras (horas trabajadas mayores a 48 hrs.) calcular y
mostrar:
a. Pago normal
b. Horas extras
c. Pago extras será 10% de incremento de la tarifa normal por cada hora
extra.
d. Sueldo final.
8. Ingresar como datos las horas y minutos respecto a las manecillas de las
agujas de un reloj, se pide calcular el ángulo que forman estas manecillas.
Por ejemplo horas= 3 y minutos= 30 ángulo formado =90
L1 + L 2 + L3
P=
2
00 05 Deficiente
06 10 Malo
11 13 Regular
14 17 Bueno
18 20 Excelente
Intrucciones switch-case
La sentencia switch es una sentencia c++ que se utiliza para seleccionar una de entre
multiples alternativas.La sentencia switch es especialmente util cuando la selección se basa
en el valor de una variable simple o de una expresión simple denominada expresión de
UTP -24-
control o seledtor.El valor de esta expresión puede ser de tipo int o char , pero no de tipo
double.
switch( selector)
{
case etiqueta1 : { ………… break; }
case etiqueta2 : { …………. break; }
case etiquetan: { …………. break; }
default:{ ………. }
La expresión de control o selector se evalúa y se compara con cada una de las etiquetas de
case .La expresión selector debe ser un tipo ordinal(por ejemplo, int ,char pero no flota o
double) Cada etiqueta es un valor único , constante y cada etiqueta debe tener un valor
diferente de los otros . si el valor de la expresión selector es igual a una de las etiquetas
case – por ejemplo , etiqueta1- entonces la ejecución comenzara con la primera sentencia
de la secuencia secuencia n y continuación hasta que se encuentre una sentencia break(
o hasta que se encuentra el final de la sentencia de control switch)
Escriba un programa que lea un número desde el teclado entre 1 y 7 e imprima el nombre
del día de semana correspondiente. ( lunes, martes,...etc).
#include<iostream.h>
void main(){
int dia;
Diseñe un programa que calcule el costo de un paciente, el costo depende del tipo de
enfermedad. De acuerdo a la siguiente tabla
TIPO ENFERMEDAD COSTO
1 122
2 150
3 200
#include<iostream.h>
void main(){
int tipo;
double costo;
}
UTP -26-
EJERCICIOS PROPUESTOS
Se pide elaborar un programa para emitir el recibo por dicho curso, los datos que se
mostraran en el recibo son: nombre del participante, costo del curso y nivel del curso.
3) Ingresar una fecha y calcular: el número de días de ese mes e identificar si el año es
bisiesto.
4) Diseñe un programa que ingrese el día, el mes y el año y calcule el numero de día
transcurridos a partir del 1 de enero
UTP -27-
do{
accion1;
accion2;
..
..
} while(condición)
Se usa la sentencia do..while para hacer validación de entrada de datos.
Ejemplo
Se necesita ingresar un número de 3 cifras:
Se necesita ingresar sexo(F/M):
char sexo;
do{
int n;
do{
cout<<" ingrese numero de 3 cifras”<< endl;
cin>>n;
}while ( ! (n>=100 && n<=999));
UTP -28-
char sexo;
do{
cout<<" ingrese sexo [F/M]”<< endl;
cin>>sexo;
}while ( sexo!=’F’ && sexo!=’M’));
void main(){
int op;
do{
// todo el programa ……
//……………………….
cout<<" Desea continuar [S=1/N=0]”<< endl;
cin>>op;
}while ( op==1);
}
UTP -29-
La estructura while repite una acción o un conjunto de acciones mientras sea verdadera una
determinada condición, para lo cual primero verifica la condición y luego ejecuta la acción.
La acción puede ser una acción simple o una acción compuesta (bloque de acciones
encerradas en llaves).
while(condición){
accion1;
accion2;
..
}
Los contadores son variables del tipo entero cuya función es la de contar.
Los acumuladores son variables que almacenan sumas o productos. El tipo de variable
depende del tipo del cual se esta acumulando.
Los acumuladores de suma se inicializan en cero.
Los acumuladores de producto se inicializan en uno.
Uso de menú
Para la creación de un menú tenemos que colocar lo siguiente:
Ejercicios
Diseñe un programa que reciba un 5 números enteros de 2 cifras y muestra la suma de ellos
y cantidad de pares e impares
#include<iostream.h>
void main(){
int num;
int suma=0; //acumulador
int cp=0, ci=0, c=0; // contadores
while(c<5){
// validando que sea de 2 cifras
do{
cout<<"Ingrese numero de 2 cifras” << endl;
cin>>num;
}while( !(num>=20&&num<=0));
// fin de validación
suma=suma+num;
if(num%2==0)
cp++;
else
ci++;
}
cout<<"La suma de los numeros es:” <<suma<< endl;;
cout<<"La cantidad de pares es :” <<cp<< endl;
cout<<"La cantidad de impares es :”<<ci<<endl;
}
}
UTP -32-
Ejercicios Propuestos
1) Diseñe un programa que ingrese las edades de 10 alumnos y que calcule lo siguiente:
• Suma de todas la edades
• Promedio de edades
• Promedio de edades pares
• Edad máxima
• Edad mínima
6) Escribe un algoritmo que lea un número natural N y un carácter. La salida debe ser un
rombo compuesto del carácter y de la anchura que especifica el número N. Por ejemplo, si
N es 5 y el carácter es *, el rombo sería:
*
**
***
****
*****
****
***
**
*
7) Escribe un algoritmo que imprima una pirámide de dígitos como la de la figura, tomando
como entrada el número de filas de la misma.
1
121
12321
1234321
123454321
UTP -34-
Ejemplo
Diseñe un programa que imprima la serie:
1,2,3,4,......n
int n ;
cin>>n;
for(int i=1;i<=n; i++){
cout<<i;
}
int n;
cin>>n;
for(int i=1;i<=n; i++){
cout<<i<<endl;
}
UTP -35-
Ejercicio
Diseñe un programa que imprima una tabla de cuadrados y de cubos para los números del 1
al 10.
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
#include<iostream.h>
void main(){
for (int i=1;i<=10;i++)
cout<<i<<"\t"<<(i*i)<<"\t"<<(i*i*i)<<endl;
}
Ejercicio
Diseñe un programa para calcular la suma e imprimir de N términos de la siguiente serie
S = 1- 2 + 3- 4 + 5- 6...........
#include<iostream.h>
void main(){
int n;
int s=0;
cout<<“Ingrese n”<<endl;
cin>>n;
for (int i=1;i<=n; i++)
if (i==1){
s=s+i;
cout<<i;
}
else{
if(i%2==0){
s=s-i;
cout<<“-“<< i;
}
UTP -36-
else{
s=s+i;
cout<<“+”<<i;
}
}
}
cout<<“La suma de la serie es:”<<s<<ende;
}
Ejercicio
Diseñe un programa que imprima lo siguiente
%
%%
%%%
%%%%
%%%%%
%%%%%%
%%%%%%%
#include<iostream.h>
void main(){
for (int i=1;i<=7;i++)
for (int j=1;j<=i;j++)
cout<<“%”;
cout<<”\n”;
}
}
Ejercicio
Diseñe un programa que lea Nombre y edad de 5 alumnos y calcule la edad promedio asi
como también la mayor edad
#include<iostream.h>
void main(){
char nombre[50];
int edad;
int s=0, max=-1;
double p;
// ingreso de datos for (int i=1;i<=5;i++){
cout<<“Ingrese nombre”<<endl;
cin>>nombre;
cout<<“ Ingrese edad”<<endl;
cin>>edad;
s=s+edad
if(edad>max)
max=edad;
}
p=(double) s/5;
cout<<“El promedio de edades es:”<<+p<<endl;
UTP -37-
Ejercicios Propuestos
1. Diseñe un programa que imprima N términos de la siguiente serie:
3, 8, 15, 24………
2. Diseñe un programa que halle los 3 primeros números perfectos
3. Diseñe un programa para hallar la suma de N términos de la siguiente serie:
2 2 2 2
1 + 1/3 + 1/5 + 1/7 + 1/9 +............................
4. Escriba un pequeño programa para imprimir los primeros cien números naturales
haciendo una pausa cada vez que se llene la pantalla e indicando con un mensaje adecuado
que al oprimir una tecla la lista continuará.
5. Escriba un programa que imprima los primeros n números naturales pares. Valide el
valor de n y emita un mensaje de error si no es natural.
6. Escribe un algoritmo que lea un número natural N y dibuje un triángulo de asteriscos con
base y altura N. Por ejemplo si N=5 debería dibujarse:
*
**
***
****
*****
7. Escriba un programa para calcular e imprimir todos los números enteros comprendidos
entre 100 y 999 tales que sean iguales a la suma de los cubos de sus dígitos, es decir, los
números de la forma abc, con:
abc = a3 + b 3 + c3
8. Dado un número natural n encuentre otro entero m que sea n al revés, invirtiendo el
orden de los dígitos y diga si n es un palíndromo. Si n es un palíndromo, entonces se lee
igual de izquierda a derecha que de derecha a izquierda.
Por ejemplo, si n es 242, entonces m será 242, por lo tanto n es un palíndromo. Mientras
que si n es 254, entonces m será 452, por lo tanto n no es palíndromo.
UTP -38-
Según el lugar donde son declaradas puede haber dos tipos de variables.
Locales: las variables son creadas cuando el programa llega a la función en la que
están definidas. Al finalizar la función desaparecen de la memoria.
Si dos variables, una global y una local, tienen el mismo nombre, la local
prevalecerá sobre la global dentro de la función en que ha sido declarada.
Dos variables locales pueden tener el mismo nombre siempre que estén declaradas
en funciones diferentes.
#include <iostream.h>
int num1=1;
void main() /* Escribe dos cifras */
{
int num2=10;
cout<<num1<<endl;
cout<<num2;
Funciones
Las funciones son bloques de código utilizados para dividir un programa en partes
más pequeñas, cada una de las cuáles tendrá una tarea determinada.
Su sintaxis es:
tipo_función: puede ser de cualquier tipo de los que conocemos. El valor devuelto
por la función será de este tipo. Por defecto, es decir, si no indicamos el tipo, la
función devolverá un valor de tipo entero ( int ). Si no queremos que retorne ningún
valor deberemos indicar el tipo vacío ( void ).
tipo y nombre de argumentos: son los parámetros que recibe la función. Los
argumentos de una función no son más que variables locales que reciben un valor.
Este valor se lo enviamos al hacer la llamada a la función. Pueden existir funciones que
no reciban argumentos.
Las funciones pueden ser llamadas desde la función main o desde otras funciones.
Nunca se debe llamar a la función main desde otro lugar del programa. Por último
recalcar que los argumentos de la función y sus variables locales se destruirán al
finalizar la ejecución de la misma.
Al igual que las variables, las funciones también han de ser declaradas. Esto es lo
que se conoce como prototipo de una función. Para que un programa en C sea
compatible entre distintos compiladores es imprescindible escribir los prototipos de las
funciones.
Los prototipos de las funciones pueden escribirse antes de la función main o bién
en otro fichero. En este último caso se lo indicaremos al compilador mediante la
directiva #include.
/* Declaración de funciones. */
#include <iostream.h>
void funcion(void){
cout<<num;
}
Como ya hemos visto, las funciones pueden retornar un valor. Esto se hace
mediante la instrucción return, que finaliza la ejecución de la función, devolviendo o
UTP -40-
no un valor.
En una misma función podemos tener más de una instrucción return. La forma de
retornar un valor es la siguiente:
/* Paso de parámetros. */
#include <iostream.h>
Para enviar un valor por referencia se utiliza el símbolo & ( ampersand ) delante de la
variable enviada. Esto le indica al compilador que la función que se ejecutará tendra
que obtener la dirección de memoria en que se encuentra la variable.
En el siguiente ejemplo podrás ver como las variables intercambian su valor tras la
llamada de la función ( paso por referencia ).
Las variables con un * son conocidas como punteros, el único dato en 'C' que
puede almacenar una dirección de memoria.
#include <iostream.h>
}
UTP -42-
Ya hemos visto que las funciones pueden recibir argumentos. Pues bién, la función
main no podía ser menos y también puede recibir argumentos, en este caso desde el
exterior.
En este ejemplo vamos a ver un pequeño programa que escribirá un saludo por
pantalla (Programa : ARGUMENTO.C).
/* Argumentos de la main. */
#include <iostream.h>
}
UTP -43-
PROBLEMAS PROPUESTOS
#include <iostream.h>
void main ( )
{
int distancia, tiempo;
distancia = 100;
tiempo = 2;
velresult (distancia, tiempo);
velresult (400, 10);
}
2. Escriba una función llamada bisuma que calcule la suma de dos variables num1
y num2 enteras y regrese un resultado entero.
3. Escriba una función llamada media_de_3 que reciba como parámetro un dato
entero y lo divida entre 3. Suponga que el dato enviado a la función es el total
de sumar 3 números, por lo que el resultado de esta función será la media de
los 3 datos.
4. Escriba un programa completo que lea tres valores enteros para las variables a,
b, c, que enseguida invoque a las funciones bisuma y media_de_3 de los
ejercicios anteriores y que, por último, despliegue el valor promedio de los tres
datos con un mensaje apropiado. ¿Qué cambios necesitaría realizar a las
funciones para obtener el promedio de más de 3 datos?
6. Escriba una función llamada magnitud que tenga cuatro parámetros de entrada
llamados x1, x2, y1, y2 y que entregue como resultado la distancia entre dos
puntos cuyas coordenadas son (x1, y1) y (x2, y2) según la siguiente fórmula:
dist = ( y 2 − y1 ) 2 + ( x 2 − x1 ) 2
UTP -44-
Escriba un programa que encuentre el área de la parte del piso que está
descubierta.
9. Escribe una función que tome 3 parámetros: dos de tipo enteros y uno de tipo
carácter. La función deberá sumar, restar, multiplicar o dividir los valores de los
dos primeros parámetros dependiendo del código indicado en el tercer
parámetro, y devolver el resultado.
10. Escribe una función que devuelva el (a) factorial, (b) n-simo número de
Fibonacci, de su argumento.
11. Escribe una función que diga si sus dos argumentos son múltiplo el uno del otro
(no importa cuál de cuál).
NOTA: Tener en cuenta que basta con probar la divisibilidad por los números
desde el 2 hasta la ,n . Lo cual ahorra muchas operaciones. Si además
consideramos que basta con saber si es par o no al principio, podemos
ahorrarnos la mitad de las pruebas de divisores, eliminando todos los
pares. Por fin una última mejora, importante, es eliminar los múltiplos de
tres.
13. Escribe una función que devuelva el n-símo número primo (1 es el primero),
recibiendo n como argumento.
14. Escribe una función que escriba los números primos hasta el numero que se le
pasa como parámetro.
UTP -45-
Vectores
/* Declaración de un array. */
#include <iostream.h>
Ejemplos:
int vector[]={1,2,3,4,5,6,7,8};
char vector[]="programador";
char vector[]={'p','r','o','g','r','a','m','a','d','o','r'};
Una particularidad con los vectores de tipo char (cadena de caracteres), es que
deberemos indicar en que elemento se encuentra el fin de la cadena mediante el
caracter nulo (\0). Esto no lo controla el compilador, y tendremos que ser nosotros los
que insertemos este caracter al final de la cadena.
#include <iostream.h>
2.- Que el usuario no haya pulsado la tecla ENTER, cuyo código ASCII es 13.
(cadena[x-i]!=13).
En resumen: al declarar una cadena deberemos reservar una posición más que la
longitud que queremos que tenga dicha cadena.
#include <iostream.h>
cout<<"Elemento:"<<(i+1)<< ;
cin>>array[i];
}
visualizar(&array[0]);
}
declaración o prototipo
void visualizar(int *);
desarrollo de la función
void visualizar(int *array)
Matrices
Una matriz es un array multidimensional. Se definen igual que los vectores excepto
que se requiere un índice por cada dimensión.
Su sintaxis es la siguiente:
Una matriz bidimensional se podría representar gráficamente como una tabla con
filas y columnas.
La matriz tridimensional se utiliza, por ejemplo, para trabajos gráficos con objetos
3D.
/* Matriz bidimensional. */
#include <iostream.h>
for (x=0;x<3;x++)
for (i=0;i<4;i++)
cout<<numeros[x][i]<<endl;
}
Si al declarar una matriz también queremos inicializarla, habrá que tener encuenta el
orden en el que los valores son asignados a los elementos de la matriz. Veamos
algunos ejemplos:
int numeros[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
char dias[7][10]={"lunes","martes","miércoles","jueves","viernes","sábado",
"domingo"};
cout<<dias[i]);
UTP -49-
#include <iostream.h>
#include <conio.h>
#define N 100 /*Maximo de elementos en el arreglo*/
void main()
{
int a[N];/*Declaracion del arreglo unimensional*/
int i,j,aux,sw,n;
cout<<" tama¤o del vector ";
cin>>&n;/*Tamaño del arreglo en el programa*/
cout<<"\n Valores del vector :\n";
for (i=0; i<n; i++)
cin>>a[i]);/*lectura de elementos que estaran en el
arreglo*/
i=1;
sw=0;/*variable para interrumpir el ordenamiento cuando
ya esta ordenado el arreglo*/
aux=0;/*variable auxiliar para el intercambio de valores del arreglo*/
while (sw!=1){
sw=1;
for (j=0; j<=n-i; j++) {
if (a[j] > a[j+1]) {/*obtiene el elemento a ordenar*/
aux=a[j]; /*copia el valor en la posicion
actual a la variable auxiliar*/
a[j]=a[j+1];/*copia el valor de la posicion
siguiente a la posicion actual*/
a[j+1]=aux; /*copia al valor de la variable auxiliar
a la posicion siguiente*/
sw=0;
}
}
i=i+1;
}
cout<<"El vector ordenado es :\n";
for (i=0; i<n; i++)
cout<<(a[i]<<endl;/*impresion de los elementos en el arreglo en
forma ordenada*/
getch();
return(0);
}
UTP -50-
#include <iostream.h>
#include <conio.h>
#define N 100/*Elementos maximos en el arreglo*/
main ()
{
int a[N];/*declaracion del arreglo*/
int i, n, p, u;
int k, j, c, aux;
#include "iostream.h"
#include "conio.h"
#define N 100 /*Maximo de elementos*/
void main()
{
return 0;
}
UTP -52-
#include <iostream.h>
#include <conio.h>
#define N 100/*Maximo de elementos*/
void main()
{
#include <iostream.h>
#include <conio.h>
#define N 100/*maximo de elementos*/
#define M 50 /*mitad de elementos que N*/
main(){
int mayor[M]={0}, /*arreglo auxiliar*/
menor[M]={0}, /*arreglo auxiliar*/
a[N]={0};/*arreglo principal*/
int aux, /*variable auxiliar para intercambio de elementos*/
n, /*tama¤o del arreglo*/
ban;
int der, /*posicion a la derecha*/
izq, /*posicion a la izquierda*/
top; /*tope del arreglo*/
int ini, /*posicion inicio*/
fin, /*posicion final*/
pos, /*posicion*/
i;
while (top > 0) {/*Mientras la posicion top sea mayor que 0*/
ini=menor[top];/*ini toma el elemento contenido en la posicion top del
arreglo menor*/
fin=mayor[top];/*fin toma el elemento contenido en la posicion top del
arreglo mayor*/
top--;/*decrementa la posicion top menos uno*/
izq=ini;/*izq toma el valor de ini*/
der=fin;/*der toma el valor de fin*/
pos=ini;/*pos toma el valor de ini*/
ban=1;/*variable de desicion a ordenar toma el valor 1*/
}
cout<"El vector ordenado es :\n";
for (i=1; i<=n; i++)
cout<<a[i]<<endl;/*imprime el arreglo ordenado*/
getch();
return 0;
}
UTP -56-
Donde:
Donde:
Elabore una función para calcular e imprimir el ingreso per cápita promedio de
la República, así como para escribir cuántas entidades tienen un ingreso menor
que este promedio y cuántas lo tienen mayor o igual.
n, x1, x2, . . . , xn
Elabore un programa que realice funciones por cada inciso y la función principal
que las mande llamar e imprima los resultados:
n
− ∑ xi
x= i =1
n
UTP -57-
n −
∑ ( xi − x ) 2
a= i =1
n
7. Elabore una serie de funciones para leer una serie de n datos desordenados,
almacenarlos en el arreglo val (de máximo 50 localidades), ordenarlos de
manera creciente, utilizando el algoritmo de selección directa, en ese mismo
arreglo y, por último, imprimirlos en orden.
val
0 1 2 n-1 49
vo v1 v2 . . vn-1 ...
10. Elabore un programa modular para leer un arreglo cuyos datos se proporcionan
en orden ascendente, leer un segundo arreglo cuyos datos se proporcionan en
orden descendente, mezclarlos en un tercer arreglo cuyos datos aparezcan en
orden ascendente, y por último, imprimir el arreglo resultante.
UTP -59-
11. Elabore un programa modular que lea los datos de dos polinomios como se
explica posteriormente y que, utilizando un menú, efectúe las siguientes
operaciones sobre polinomios:
a) Suma.
b) Resta.
c) Multiplicación.
Al seleccionar el usuario una de estas tres opciones dará los polinomios sobre
los cuales se realizará la operación solicitada.
Los datos que el usuario proporcionará son los coeficientes (reales) y los
exponentes (enteros, ≥ 0 y ≤ 15) de ambos polinomios, los cuales pueden o no
estar ordenados. El final de cada polinomio está dado por un 1 como
coeficiente y como exponente.
± cX ^e
Donde:
2.5 3 -4 2 6.5 1 3 4 -1 -1
-2 2 -3 4 9.1 1 6.9 8 -1 -1
y se desplegaría como:
b) Comience con el índice i=2 del arreglo. Recorra el arreglo, del elemento
i+1 al último, y cada vez que encuentre un elemento cuyo valor sea 1,
póngale 0 si su índice es múltiplo de i. Vuelva a hacer lo mismo, pero
ahora considerando el primer elemento que sea 1 y cuyo índice sea
mayor a i. Continúe este proceso hasta que haya probado todos los
elementos iguales a 1.
Cuando se haya terminado este proceso, los índices del arreglo cuyos
elementos sean 1 son primos.
14. En estadística, la moda de una serie de números es aquel número que aparece
con más frecuencia. Por ejemplo, dada la lista 1,2,2,3,6,4,7,5,4,6,9,4, la moda
es 4, ya que aparece tres veces. Calcule e imprima la moda. Si todos los
números son diferentes entonces no hay moda, con lo cual se debe indicar que
hubo error.
Haga un programa completo en C que deberá tener una función que lea la serie
de números, otra función que reciba como parámetro la serie de números y
arroje la moda o si no la hay 1 y la función principal que mande llamar las
anteriores e imprima la moda (número que mas veces se repitió en caso de
haber dos iguales o más mencione el primero).
4 7 1 3 5
2 0 6 9 7
3 1 2 6 4
4 2 3
7 0 1
1 6 2
3 9 6
5 7 4
3. Elabore una función que reciba como entrada un entero n y una matriz
cuadrada (n x n) de enteros e imprima los elementos que conforman su
diagonal.
4. Elabore una función que reciba como entrada un entero n y una matriz
cuadrada (n x n) de enteros e imprima los elementos que conforman la diagonal
que inicia en la esquina superior derecha y termina en la esquina inferior
izquierda.
5. Una matriz cuadrada A se dice que es simétrica si A(i, j) = A(j, i) para todo i, j
dentro de los límites de la matriz. Elabore una función que lea una matriz y
regrese un 1 (uno) si es simétrica o un 0 (cero) no.
6. Elabore una función que lea una matriz de enteros de m X n (1 < n, m ≤ 50) y
otra función que encuentre el menor y el mayor valor y regrese sus posiciones.
2 x 2y + z = 1
-x + y + z = 0
-x +3y + 5z = 0
UTP -63-
e partidos
s P1 P2 P3 P4 P5 P6 P0(votos anulados)
t
a Edo.0
d Edo.2
o ...
Edo.31
s
Se desea conocer:
b) Total de votos por estado, para comparar con una tabla que indica el
número de personas que deben votar por estado con el fin de detectar
en qué estados votó menos del 60% de la población electora y tomar así
medidas de concientización cívica.
a) Lea e imprima una tabla indicando los votos obtenidos en cada municipio
por los 4 candidatos.
b) Calcule el total de votos recibidos por cada candidato y el porcentaje del
total de votos emitidos.
c) Calcule el candidato más votado.
d) Si un candidato recibió más del 50% de los votos, indicar que es el
ganador. Si ningún candidato recibió más del 50% de los votos, el
programa debe imprimir los dos candidatos más votados, que serán los
que pasen a la segunda ronda de las elecciones.
12. Una agencia automotriz distribuye quince modelos diferentes de coches y tiene
diez vendedores. Se desea un programa que escriba un informe mensual de las
ventas por vendedor y modelo, así como el número de automóviles vendidos
por cada vendedor y el número total de cada modelo vendido por todos los
vendedores. Asimismo, para entregar el premio al mejor vendedor, necesita
saber cuál es el vendedor que más coches ha vendido.
Los datos se proporcionan por día (30 días), todos los vendedores informan la cantidad
de coches que vendieron de cada modelo ese día, el final de datos de las ventas del día
se conoce por un 0. Los vendedores no necesariamente informan sus ventas en orden,
ni por orden de vendedor ni de modelo.
13. El IFE te encargó un programa en C para poder contar los votos del 2 de junio.
La información de todos los electores del país viene dada de la siguiente forma:
estado, partido
:
-1 , -1
donde:
estado: representa el estado del elector (0 <= estado < 32)
partido: representa el partido por el que voto el elector (0<= partido < 6)
1 2 3 4
1 - 0 4 0
2 2 - 1 2
3 3 2 - 0
4 0 1 1 -
Donde:
UTP -66-
16. Una fábrica de bombas hidráulicas tiene una matriz con los insumos necesarios
para la producción de un conjunto de motores. Por ejemplo, suponiendo que la
planta produce 7 motores y se utilizan 8 insumos en diferentes cantidades para
su producción, la matriz sería:
Insumos
1 2 3 4 5 6 7 8
M 1 10 20 30 40 0 60 10 80
o 2 0 70 0 50 40 30 0 10
t 3 5 10 15 0 10 15 5 0
o 4 10 20 10 20 10 0 10 20
r 5 4 0 8 0 6 8 4 0
e 6 0 6 9 12 15 0 1 24
s 7 20 18 0 14 0 10 8 6
Analizando la matriz anterior, podríamos ver que para producir un motor del tipo 3 es
necesario utilizar 5 unidades del insumo 1, 10 unidades del insumo 2, 15 unidades del
insumo 3, 10 unidades del insumo 5, 15 unidades del insumo 6 y 5 unidades del
insumo 7.
Por otro lado se tiene un arreglo con los costos unitarios en pesos de cada insumo:
Costo de Insumos
1 2 3 4 5 6 7 8
3.5 0.1 2.0 1.5 6.0 4.2 2.5 1.3
1 2 3 4 5 6 7
100 25 75 150 80 90 10
También se tiene un último arreglo con la existencia actual de cada uno de los
insumos:
Existencia de Insumos
1 2 3 4 5 6 7 8
120 0 20 60 40 90 10 0
Concepto de estructura
struct tipo_estructura
{
tipo_variable nombre_variable1;
tipo_variable nombre_variable2;
tipo_variable nombre_variable3;
};
Donde tipo_estructura es el nombre del nuevo tipo de dato que hemos creado.
Por último, tipo_variable y nombre_variable son las variables que forman parte de
la estructura.
Para definir variables del tipo que acabamos de crear lo podemos hacer de varias
maneras, aunque las dos más utilizadas son éstas:
struct trabajador
{
char nombre[20];
char apellidos[40];
int edad;
char puesto[10];
};
struct trabajador fijo, temporal;
Otra forma:
struct trabajador
{
char nombre[20];
char apellidos[40];
int edad;
char puesto[10];
}fijo, temporal;
El manejo de las estructuras es muy sencillo, así como el acceso a los campos ( o
variables ) de estas estructuras. La forma de acceder a estos campos es la siguiente:
variable.campo;
temporal.edad=25;
fijo=temporal;
Al igual que con los otros tipos de datos, también es posible inicializar variables de
tipo estructura en el momento de su declaración:
struct notas
{
char nombre[30];
int notas[5];
};
Estructuras y funciones
Podemos enviar una estructura a una función de las dos maneras conocidas:
visualizar(fijo);
UTP -70-
#include <iostream.h>
struct trabajador
{
char nombre[20];
char apellidos[40];
int edad;
char puesto[10];
};
visualizar(&fijo);
#include <iostream.h>
struct trabajador
{
char nombre[20];
char apellidos[40];
int edad;
char puesto[10];
};
struct trabajador
{
char nombre[20];
char apellidos[40];
int edad;
};
UTP -72-
Typedef
struct trabajador
{
char nombre[20];
char apellidos[40];
int edad;
};
Otra forma:
typedef struct
{
char nombre[20];
char apellidos[40];
int edad;
}datos;
datos fijo,temporal;
UTP -73-
Arrays de estructuras
Typedef
struct trabajador
{
char nombre[20];
char apellidos[40];
int edad;
};
Otra forma:
typedef struct
{
char nombre[20];
char apellidos[40];
int edad;
}datos;
datos fijo,temporal;
UTP -74-
struct nombre{
char pila[20], apellido [20];
};
struct estudiante
{
struct nombre nom;
int calif;
char grado;
};
c) cout<<als[10].pila[0]);
e) als[5] = est1;
g) als[2].nom = als[5].nom;
UTP -75-
Por ejemplo, para representar números positivos con hasta nueve cifras,
podríamos imaginar el número como lo escribimos comúnmente a mano, como
en estos ejemplos:
Podríamos optar por utilizar un registro con tres enteros para representar el
número de unidades de millón, unidades de millar y las unidades. Mediante el
uso de esta representación, escriba un subprograma para resolver cada una de
las siguientes operaciones:
struct datos
{
char nombre[40], pais[25];
};
struct atleta
{
char deporte[30];
struct datos pers;
int medallas[20];
};
Escriba un módulo que lea del archivo f sólo las 20 medallas de cada uno de los
atletas (utilice el vector ats). El archivo se debe declarar como local al módulo
ya que en el resto del programa no se va a usar. No se sabe de cuántos atletas
hay almacenadas medallas en el archivo. El archivo no almacena toda la
información de los atletas, sólo las medallas.
UTP -76-
Ø Nombre.
Ø Parte de voz: soprano, alto, tenor o grave.
Ø Extensión: alta o baja
Escriba:
Por último, el programa debe crear un archivo de texto, que se utilizará como
reporte, con la clave, las 5 calificaciones y el promedio de los n alumnos.
10. El mundo está formado por cinco continentes, éstos están compuestos por
países conteniendo ciudades, las cuales, a su vez, tienen pueblos.
11. Tomando la estructura NOMINA del ejercicio anterior y considerando que está
ordenada por nombre, haga un programa que imprima el sueldo de un
determinado profesor. El programa deberá tener un módulo que realice una
búsqueda binaria para encontrar al profesor en cuestión en NOMINA, la
información que se proporciona es el nombre completo.
12. La información que tiene una empresa, almacenada en un archivo, sobre sus
empleados (máximo 100) es:
v Clave. Entero.
v Sueldo. Real
v Cantidad de tareas pendientes. Entero (máximo 30).
v Tareas pendientes. Vector.
• Descripción.
• Fecha de asignación.
UTP -78-
Nota: En este caso los corchetes no indican un valor opcional, sino que son realmente
corchetes, por eso están en negrita.
Cuando se declara una cadena hay que tener en cuenta que tendremos que reservar
una posición para almacenar el carácter nulo, de modo que si queremos almacenar la
cadena "HOLA", tendremos que declarar la cadena como:
char Saludo[5];
También nos será posible hacer referencia a cada uno de los caracteres individuales
que componen la cadena, simplemente indicando la posición. Por ejemplo el tercer
carácter de nuestra cadena de ejemplo será la 'L', podemos hacer referencia a él como
Saludo[2]. Los índices tomarán valores empezando en el cero, así el primer carácter de
nuestra cadena sería Saludo[0], que es la 'H'.
La asignación directa sólo está permitida cuando se hace junto con la declaración. Por
ejemplo:
char Saludo[5];
Saludo = "HOLA"
char Saludo[5];
Saludo[0] = 'H';
Saludo[1] = 'O';
Saludo[2] = 'L';
Saludo[3] = 'A';
Saludo[4] = '\000';
UTP -80-
O bien:
Función "strlen()"
Sintaxis:
Valor de retorno:
Ejemplo:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char *cadena = "Una cadena C++ termina con cero";
cout << "La cadena: [" << cadena << "] tiene "
<< strlen(cadena) << " caracteres" << endl;
return 0;
}
Función "strcpy()"
Sintaxis:
UTP -81-
Copia la cadena orig a dest, la copia de caracteres se detendrá cuando sea copiado el
carácter nulo. Valor de retorno:
Ejemplo:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char *cadena = "Cadena ejemplo";
char cad[32];
Función "strcmp()"
Sintaxis:
Compara las dos cadenas, si la cad1 es mayor que cad2 el resultado será mayor de 0,
si cad1 es menor que cad2, el resultado será menor de 0, si son iguales, el resultado
será 0. La comparación se realiza carácter a carácter. Mientras los caracteres
comparados sean iguales, se continúa con el siguiente carácter. Cuando se encuentran
caracteres distintos, aquél que tenga un código ASCII menor pertenecerá a la cadena
menor. Por supuesto, si las cadenas son iguales hasta que una de ellas se acaba, la
más corta es la menor.
Ejemplo:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char *cadena1 = "Cadena ejemplo 1";
char *cadena2 = "Cadena ejemplo 2";
char *cadena3 = "Cadena";
char *cadena4 = "Cadena";
cout << cadena1 << " es menor que " << cadena2 << endl;
else if(strcmp(cadena1, cadena2) > 0)
cout << cadena1 << " es menor que " << cadena2 << endl;
else
cout << cadena1 << " es igual que " << cadena2 << endl;
cout << strcmp(cadena3, cadena2) << endl;
cout << strcmp(cadena3, cadena4) << endl;
return 0;
}
Función "strcat()"
Sintaxis:
"strcat" añade una copia de orig al final de dest. La longitud de la cadena resultante
será strlen(dest) + strlen(orig). Valor de retorno:
Ejemplo:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char *cadena1 = "Cadena de";
char *cadena2 = " ejemplo";
char cadena3[126];
strcpy(cadena3, cadena1);
cout << strcat(cadena3, cadena2) << endl;
return 0;
}
Función "strncpy()"
Sintaxis:
Copia maxlong caracteres de la cadena orig a dest, si hay más caracteres se ignoran,
si hay menos se rellenará con caracteres nulos. La cadena dest no se terminará con
nulo si la longitud de orig es maxlong o más. Valor de retorno:
Ejemplo:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char *cadena = "Cadena ejemplo";
char cad[32];
Función "strncmp()"
Sintaxis:
Compara las dos cadenas igual que strcmp, pero sólo se comparan los primeros
maxlong caracteres. Ejemplo:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char *cadena1 = "Cadena ejemplo 1";
char *cadena2 = "Cadena ejemplo 2";
char *cadena3 = "Cadena";
char *cadena4 = "Cadena";
Función "strncat()"
Sintaxis:
"strncat" añade como máximo maxlong caracteres de la cadena orig al final de dest, y
después añade el carácter nulo. La longitud de la cadena resultante será strlen(dest) +
maxlong. Valor de retorno:
Ejemplo:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char *cadena1 = "Cadena de";
char *cadena2 = " ejemplo";
char cadena3[126];
strcpy(cadena3, cadena1);
cout << strncat(cadena3, cadena2, 5) << endl;
return 0;
}
1. Elabore un programa que lea una cadena de, a lo más, 20 caracteres e imprima
todos los caracteres que se encuentran en una posición par.
2. Elabore un programa que lea una frase de, a lo más, 50 caracteres y cuente
cuántas veces aparece la letra en la frase.
3. Elabore un programa que lea una frase y cuente cada una de las vocales
minúsculas o mayúsculas que contiene.
3a4b2a
Notas:
• Los números son de un sólo dígito (no hay 10,11, ...).
• Puede haber tantas sucesiones de a s y b s como se desee.
• Las letras no necesariamente vienen alternadas.
• En la línea de lectura, no hay ningún espacio.
• Considere que la sucesión decodificada será de longitud menor o igual a 80
caracteres.
7. Elabore un programa que lea un texto, transforme las letras que se encuentran
en minúsculas por mayúsculas e imprima el texto modificado.
UTP -86-
8. Elabore un programa que lea una frase y cuente el número de palabras que
contiene.
Nota: Las palabras se separan por un espacio y la frase termina con una
palabra.
9. Elabore un programa que lea una frase y una palabra y que cuente cuántas
veces aparece la palabra leída dentro de la frase, ya sea como una palabra
completa o como parte de otra palabra. La frase y la palabra tienen una
longitud máxima de 50 caracteres.
11. Elabore un programa que lea una frase de, a lo más, 50 caracteres y que, si su
longitud es menor a 50, le añada tantos espacios al final como sea necesario
hasta que alcance los 50 caracteres.
12. Elabore un programa que lea una frase de, a lo más, 50 caracteres y cree una
segunda cadena con la primera palabra de la frase original que empiece con la
letra b , si existe.
13. El teclado de su computadora está descompuesto y cada vez que oprime la letra
ésta se imprime tres veces en vez de una. Se desea que Elabore un
programa en C que reciba como dato de entrada una línea tecleada en su
computadora y que genere e imprima una cadena resultado sin exceso de .
El programa también debe funcionar si la línea original no contiene ninguna .
El RFC de una persona está formado por 4 caracteres en mayúsculas (inicial del
primer apellido, primera vocal del primer apellido, inicial del segundo apellido e
inicial del primer nombre, 6 números (los dos últimos del año de nacimiento,
mes y día), un número y dos caracteres en mayúscula que representan una
clave.