/*
* Universidad Nacional de San Juan
* Facultad de Ciencias Exactas Físicas y naturales
* Programación Procedural año 2010
* Iván Neira Reg. 13583
*
* Práctico 1
* Ejercicio 10:
* Dada una matriz cuadrada A de dimesión 7 codificar un programa que permita:
* a) Calcular la traza de la martriz A (Suma de los elementos de la diagonal
* principal).
* b) Dado un escalar e , generar una matriz R resultante del producto escalar
* e*A . Mostrar la matriz R.
* c) Realizar el producto de las matrices A y R y mostrar la matriz resultante.
*/
#include<stdio.h>
#define K 7
void mostrar(int a[][K])
{
int i,j;
for(i=0;i<K;i++)
{
for(j=0;j<K;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
}
void main(void)
{
int i,j,e,k=0,l=0,A[K][K],R[K][K],M[K][K], acumulador=0;
//Ingreso del arreglo
for(i=0;i<K;i++)
{
for(j=0;j<K;j++)
{
printf("\nIngrese valor de la fila %d columna %d\n",i+1,j+1);
scanf("%d",&A[i][j]);
fflush(stdin);
}
}
//muestra arreglo A
mostrar(A);
//Calcula y muestra la traza
for(i=0;i<K;i++)
acumulador+=A[i][i];
printf("\nLa traza resultante de la matriz A es %d\n", acumulador);
//Realiza el producto escalar por un número e ingresado
printf("\nIngrese un número para calcular el producto escalar\n");
scanf("%d",&e);
fflush(stdin);
for(i=0;i<K;i++)
{
for(j=0;j<K;j++)
{
R[i][j]=e*A[i][j];
}
}
//Muestra la matriz resultante del producto escalar R
printf("\nLa matriz resultante R es:\n");
mostrar(R);
acumulador=0;
printf("\nLa matriz resultante de la multipicación de A y R\n");
for(i=0;i<K;i++)
{
l=0;
for(j=0;j<K;j++)
{
acumulador=0;
for(k=0;k<K;k++) acumulador+= A[k][j]*R[i][k];
M[i][l]=acumulador;
l++;
}
}
mostrar(M);
getchar();
}
Ejercicio 10 (de entrega) : Multiplicación de matrices
Pasar valores de arreglos bidimensionales a funciones en c
#include<stdio.h>
#define K 4 //la constante modificable
//void porque no quiero que me devuelva nada a main()
//Atencion a como se pone el corchete vacío para recibir la direccion
void muestra(int a[])
{
int i;
for(i=0;i<K;i++) printf("%d ",a[i]);
}
main()
{
int i,A[K];
for(i=0;i<K;i++)
{
scanf("%d",&A[i]);
fflush(stdin);
}
//Fijate como va sin corchetes ni nada
//y en la funcion se pone distinto al recibirlo
muestra(A);
}
#include<stdio.h>
#define K 4 //imaginando que trabajamos con una matriz cuadrada
//La primera dimensión no se pone, pero las demás si
void muestra(int a[][K])
{
int i,j;
for(i=0;i<K;i++) for(j=0;j<K;j++)printf("%d ",a[i][j]);
}
main()
{
int i,j,A[K][K];
for(i=0;i<K;i++)
{
for(j=0;j<K;j++)
{
scanf("%d",&A[i][j]);
fflush(stdin);
}
}
//Sigue poniéndose sin corchetes
muestra(A);
}
Ejercicio 6 (de entrega) , Inserción de elementos en un arreglo
/*
* Universidad Nacional de San Juan
* Facultad de Ciencias Exactas Físicas y naturales
* Programación Procedural año 2010
* Iván Neira Reg. 13583
*
* Práctico 1
* Ejercicio 6:
* "Generar un arreglo de 10 componentes enteras a través de un menú de opciones que:
* a) Permita seleccionar la posición en donde se desea cargar el elemento leído.
* 1) Al principio.
* 2) Al final (a continuación de la última componente)
* 3) Intermedia, en ese caso, leer la posición y validarla (entre 1 y 8)
* (que no supere la posición de la última componente agregada)
* b) Mostrar las posiciones de las componentes libres del arreglo.
*
* Nota: Si la posición que se ingresa está ocupada, desplazar las componentes hacia la
* derecha de modo que sea posible la inseción. Emitir un mensaje cuando no sea posible
* la inserción.
*
* Disponible online en: http://ivpaste.com/v/uKK7uvOI
*/
#include <stdio.h>
int main(int argc, char** argv)
{
int arreglo[10],que,donde,posicion,i;
//Inicializacion del arreglo
for(i=0;i<10;i++)
{
arreglo[i]=-1;
}
//Comienzo del programa
//Muestra arreglo
printf("\n|");
for(i=0;i<10;i++)
{
if(arreglo[i]==-1)printf("%dLibre|",i);
else printf("%d|",arreglo[i]);
}
printf("\n");
//Comienza ingreso
printf("\nIngrese número entero a insertar, o un negativo para terminar\n-numero-");
scanf("%d",&que);
fflush(stdin);
while(que>=0)
{
//Menu
printf("\nIngrese lugar donde desea insertarlo\n1- Al principio\n2- Al final\n3- Intermedio\n4- Reintentar\n-lugar-");
scanf("%d",&donde);
switch(donde)
{
//Inserta en la primer posicion o posicion 0 (cero)
case 1:
arreglo[0]=que;
printf("\nNúmero %d insertado en la primera posición\n",que);
break;
//Inserta en la última posición o posición 9
case 2:
arreglo[9]=que;
printf("\nNúmero %d insertado en la última posición\n",que);
break;
//Inserción intermedia
case 3:
//Pregunta posicion en donde ingresar
printf("\nIngrese posición entre 1 y 8 inclusive\n-posicion-");
scanf("%d",&posicion);
fflush(stdin);
//Verifica que el rango sea correcto
while((posicion<1)||(posicion>8))
{
printf("\nFuera de rango, ingrese nuevamente\n-posicion-");
scanf("%d",&posicion);
fflush(stdin);
}
//Verifica que el lugar no este ocupado
while((arreglo[posicion]!=-1)&&(posicion<=8))
{
printf("\nPosicion %d ocupada\n",posicion);
posicion++;
}
//Agrega el elemento si hubo un espacio libre
if(posicion!=9)
{
arreglo[posicion]=que;
printf("\nNúmero %d insertado en la posición %d\n",que, posicion);
}
else printf("\nNo se pudo insertar el elemento %d, no hay lugar libre\n",que);
break;
//En caso que se equivoque el numero a insertar
case 4:
printf("\n**Reintentar**\n");
break;
//Easter Egg =)
case 99:
printf("\nPongame un 10 =)\n");
break;
}
//Muestra arreglo
printf("\n|");
for(i=0;i<10;i++)
{
if(arreglo[i]==-1)printf("%dLibre|",i);
else printf("%d|",arreglo[i]);
}
printf("\n");
//Siguiente ingreso
printf("\nIngrese número entero a insertar, o un negativo para terminar\n-numero-");
scanf("%d",&que);
fflush(stdin);
}
}
Y hay que entregarlo el Lunes a la tarde así que espero que esté bien porque no pienso modificarlo.
Saludos!
Uno mas fácil que el otro
/*
* Universidad Nacional de San Juan
* Facultad de Ciencias Exactas Físicas y naturales
* Programación Procedural año 2010
* Iván Neira Reg. 13583
*
* Práctico 1
* Ejercicio 3:
* "Un negocio de automotores procesa las ventas realizadas por sus 15 vendedores. Cada
* vendedor puede vender 0 o mas autos. Por cada auto vendido se ingresa: marca del auto
* e importe de venta.
* Las marcas de autos están codificadas de la siguiente manera:
* 1:Ford, 2:Fiat, 3:Renault, 4:Chevrolet, 5:Peugeot
* Realizar un algoritmo en C que permita:
* a) Ingresar información de las ventas realizadas por los distintos vendedores. Por cada
* vendedor el ingreso de las ventas termina con una marca igual a cero (0).
* b) Mostrar la cantidad total de autos de marca Fiat vendidos por cada vendedor.
* c) Mostrar importe promedio de autos vendidos por cada marca.
* d) Mostrar porcentaje de autos Peugeot vendidos respecto de la cantidad total de
* unidades vendidas.
* e) Indicar si se vendieron mas autos marca Renault que marca Chevrolet."
*/
#include <stdio.h>
#define vendedores 3
int main(int argc, char** argv)
{
int i, marca, autos[5], solo_fiat=0,auxiliar;
float importe[5],precio;
//Inicializacion de arreglos acumuladores
for(i=0;i<5;i++)
{
autos[i]=0;
importe[i]=0;
}
for(i=0;i<vendedores;i++)
{
printf("\nVendedor número %d\n",i+1);
printf("\nIngrese marca de vehículo vendido\n");
scanf("%d",&marca);
fflush(stdin);
while(marca!=0)
{
autos[marca-1]++;
printf("\nIngrese importe\n");
scanf("%f",&precio);
importe[marca-1]+=precio;
if(marca==2) solo_fiat++;
printf("\nIngrese marca de vehículo vendido\n");
scanf("%d",&marca);
fflush(stdin);
}
printf("\nEl vendedor %d vendió %d autos marca Fiat\n",i+1,solo_fiat);
solo_fiat=0;
}
printf("\n**Importe promedio de autos vendidos por cada marca**\n");
printf("\nFord: $%f",importe[0]/autos[0]);
printf("\nFiat: $%f",importe[1]/autos[1]);
printf("\nRenault: $%f",importe[2]/autos[2]);
printf("\nChevrolet: $%f",importe[3]/autos[3]);
printf("\nPeugeot: $%f",importe[4]/autos[4]);
auxiliar=autos[0]+autos[1]+autos[2]+autos[3]+autos[4];
printf("\nEl promedio de autos Peugeot vendidos es de %3.2f %%\n",(float)100*autos[4]/auxiliar);
if(autos[2]>autos[3]) printf("\nSe vendieron mas autos Renault que Chevrolet\n");
}
Primer ejercicio
/*
* Universidad Nacional de San Juan
* Facultad de Ciencias Exactas Físicas y naturales
* Programación Procedural año 2010
* Iván Neira Reg. 13583
*
* Práctico 1
* Ejercicio 2:
* "Realizar un programa en C que permita:
* a) Ingresar por teclado números enteros positivos menores que un número ingresado
* previamente. El ingreso finaliza cuando se lee un número negativo.
* b) Mostrar el promedio de números válidos ingresados.
* c) Mostrar el primer y el último valor ingresado.
* d) Indicar si el ingreso de los mismos fué ordenado ascendentemente.
*/
#include <stdio.h>
int main(int argc, char** argv)
{
int numero_ingresado, numero_nuevo=0, primer_valor, ultimo_valor, acumulador=0,contador=0, ingreso_anterior=0, bandera=0;
printf("\nIngrese un numero entero\n");
scanf("%d",&numero_ingresado);
fflush(stdin);
printf("\nIngrese un numero entero menor a %d . Termine con numero negativo\n",numero_ingresado);
scanf("%d",&numero_nuevo);
fflush(stdin);
primer_valor=numero_nuevo;
while(numero_nuevo>=0)
{
if(numero_nuevo<ingreso_anterior) bandera=1;
if(numero_nuevo<numero_ingresado)
{
printf("\nEl numero ingresado es valido\n");
acumulador+=numero_nuevo;
contador++;
}
else printf("\n%d es mayor o igual que %d\nEl numero ingresado *NO* es valido y no se promediara\n", numero_nuevo, numero_ingresado);
ingreso_anterior=numero_nuevo;
ultimo_valor=numero_nuevo;
printf("\nIngrese un numero entero menor a %d . Termine con numero negativo\n",numero_ingresado);
scanf("%d",&numero_nuevo);
fflush(stdin);
if(numero_nuevo<=0)
printf("\nFin de ingreso\n");
}
printf("\nPromedio de numeros validos ingresados: %f\n",(float)acumulador/contador);
if(bandera==0) printf("\nEl ingreso fue ordenado ascendentemente\n");
else printf("\nEl ingreso *NO* fue ordenado ascendentemente\n");
printf("\nEl primer valor ingresado fue %d\nEl ultimo valor ingresado fue: %d\n",primer_valor,ultimo_valor);
getchar();
}
Que uso?
Descargar el soporte C/C++
Si usted no tiene NetBeans IDE 6.0, vaya a la Página de Descarga de NetBeans IDE 6.0 y descargue una versión IDE que contenga el soporte para C/C++. Si usted tiene una instalación de NetBeans IDE que no incluye el soporte para C/C++, complete los siguientes pasos para agregar el soporte para C/C++ al IDE.
- Si su red usa un proxy, seleccione Tools > Options desde el menú principal, seleccione Manual Proxy Settings, introduzca el HTTP y el Puerto de su proxy, y haga click en el botón OK.
- Seleccione Tools > Plugins desde el menú principal.
- En el cuadro de diálogo Plugins, haga click en la pestaña Available Plugins, y desplácese hasta la categoría C/C++.
- Habilite la casilla de verificación C/C++.
- Haga click en Install.
El Instalador de NetBeans IDE se inicia. - En el Instalador de NetBeans IDE, haga click en Next.
- Lea el acuerdo de licencia, luego seleccione I Accept the Terms en el botón de selección All License Agreements, y haga click en Next.
- Haga click en Install.
- Despús de completarse la instalación, seleccione Restart IDE Now o Restart IDE Later y haga click en Finish.
Instalar y Configurar los Compiladores y las Herramientas
El paquete C/C++ de NetBeans requiere un compilador C, un compilador C++, una utilidad make, y un depurador gdb.
Windows
El paquete C/C++ de NetBeans ha sido probado con los siguientes compiladores y herramientas:
- Cygwin 1.5.21
- Cygwin gcc-core (compilador C) 3.4.x
- Cygwin gcc-c++ (compilador C++) 3.4.x
- Cygwin gdb (Depurador GNU) 6.5.50
- Cygwin make 3.80
Si usted ya tiene los compiladores GNU Cygwin, GNU make, y el depurador gdb instalados en su sistema Windows y el path está configurado correctamente, asegurese de tener las versiones correctas. Si usted tiene las versiones correctas, entonces no hacen falta configuraciones futuras.
Para verificar las versiones de sus compiladores Cygwin y de sus herramientas:
Verifique la versión de Cygwin escribiendo:
cygcheck -c cygwin- Verifique las versiones de los compiladores, make, y gdb escribiendo:
gcc --version g++ --version make --version gdb --versionPara instalar los compiladores GNU, make, y el depurador gdb desde cygwin.com:
- Descargue el programa Cygwin setup.exe haciendo click en el ícono Install o Update Now! en el centro de la página.
- Ejecute el programa setup.exe. Acepte las opciones por defecto hasta llegar a la página Select Your Internet Connection. Seleccione las opciones en esta página que se ajustan mas a sus necesidades. haga click en Next.
- En la página Choose Download Site, seleccione una dirección que usted crea que esté relativamente cerca a usted. Haga click en Next.
- En la página Select Packages seleccione los paquetes (packages) para descargar. Haga click en el signo + próximo a Devel para expandir las categorías de las herramientas de desarrollo. Quizá usted quiera reajustar el tamaño de la ventana para ver mas categorías al mismo tiempo.
- Seleccione cada paquete que desea descargar haciendo click en la etiqueta Skip al lado de cada paquete. Como mínimo, seleccione gcc-core: el compilador C, gcc-g++: el compilador C++, gdb: el depurador GNU, y make: la versión GNU de la utilidad 'make'.
- Ahora agregue el directorio del Compilador a su path:
- Abra el Panel de Control (Inicio > Configuración > Panel de Control) y haga doble click sobre el ícono Sistema.
- Seleccione la pestaña Avanzado y haga click en Variables de Entorno.
- En el panel de las Variables de Sistema del cuadro de diálogo Variables de Entorno, seleccione la variable Path y haga click en Editar.
- Agregue el directorio directorio-cygwin\bin a la variable Path, y haga click en OK. Por defecto, directorio-cygwin es C:\cygwin. Los nombres de los directorios deben estar separados con punto y coma.
- Haga click en OK en el cuadro de diálogo Variables de Entorno y en el cuadro de diálogo Propiedades del Sistema.
Hola Mundo
El primer semestre fue bastante aburrido con pseudocódigo pero ahora que estamos mas de lleno en C me parece interesante postear mis ejercicios para tenerlos a mano y que de paso reciba alguna crítica constructiva (o no) de algún compañero o colega (o no).
Si Linus Torvalds hizo una ganzada parecida y ahora esta podrido en plata... digo, hizo un sistema operativo excelente =).
licencia
Ejercicios de programación by Iván Neira (ae) is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Based on a work at paraserlicenciado.blogspot.com.