<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8850682569020595270</id><updated>2024-11-01T01:24:11.348-07:00</updated><title type='text'>FPO Programador De Sistemas</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>129</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-4726634686339240155</id><published>2019-09-09T03:38:00.000-07:00</published><updated>2014-10-04T03:30:18.388-07:00</updated><title type='text'></title><content type='html'>&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-size: x-large;&quot;&gt;&lt;span style=&quot;font-family: Verdana,sans-serif;&quot;&gt;Bienvenidos al&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-size: x-large;&quot;&gt;&lt;span style=&quot;font-family: Verdana,sans-serif;&quot;&gt;&amp;nbsp;curso de&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-large;&quot;&gt;&lt;span style=&quot;font-family: Verdana,sans-serif;&quot;&gt;FPO Programador De Sistemas&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/presentacion.html&quot;&gt;&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;Presentación&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/sistemas-decimal-binario-y-hexadecimal.html&quot;&gt;Sistemas: Decimal, Binario y Hexadecimal&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/particiones.html&quot;&gt;Particiones..&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/descargas.html&quot;&gt;Descargas&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/enlaces.html&quot;&gt;Enlaces&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/videos.html&quot;&gt;Videos&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/foro.html&quot;&gt;Foro&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/frases-celebres-que-se-escuchan-en.html&quot;&gt;Frases Célebres Que Se Escuchan En Clase&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/sobre-mi.html&quot;&gt;Sobre mi...&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;a href=&quot;http://www.blogger.com/goog_1442211180&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/pseudocodigo.html&quot;&gt;Pseudocodigo&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/como-almacenar-datos-variables.html&quot;&gt;Como almacenar datos: Variables&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/empezamos-primeros-pasos-en.html&quot;&gt;Empezamos: Primeros pasos en Pseudocódigo&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/pseudocodigo-operadores-y-comparaciones.html&quot;&gt;Pseudocódigo: Operadores y Comparaciones&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/bucles.html&quot;&gt;Bucles&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/bucles-practicas-y-ejercicios-i.html&quot;&gt;Bucles: Prácticas y Ejercicios (I)&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/bucles-practicas-y-ejercicios-ii.html&quot;&gt;&amp;nbsp;Bucles: Prácticas y Ejercicios (II)&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/bucles-practicas-y-ejercicios-iii-reloj.html&quot;&gt;Bucles: Prácticas y Ejercicios (III): Reloj y S/N&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/menus-y-calculadora.html&quot;&gt;Menus y Calculadora&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/menus-y-calculadora-ii-en.html&quot;&gt;Menus y Calculadora (II): En Caso,Procedimientos y Funciones&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/menus-y-calculadora-iii-ejemplos-de-uso.html&quot;&gt;Menus y Calculadora (III): Ejemplos de uso de funciones&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/numeros-aleatorios.html&quot;&gt;Numeros aleatorios&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/tablas-o-matrices-o-arrays-i.html&quot;&gt;Tablas o Matrices o Arrays (I)&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/tablas-o-matrices-o-arrays-ii.html&quot;&gt;Tablas o Matrices o Arrays (II)&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/gnulinux.html&quot;&gt;Gnu/Linux&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/instalacion-de-gnulinux.html&quot;&gt;Instalación de gnu/linux&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/primeros-pasos-acceso-la-terminal.html&quot;&gt;Primeros pasos: Acceso a la Terminal&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/comando-de-ayuda-man-y-sus-secciones.html&quot;&gt;Comando de ayuda: man y sus secciones&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/editor-de-texto-de-terminal-nano.html&quot;&gt;Editor de texto de terminal: Nano&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/comando-ls.html&quot;&gt;Comando: ls&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/organizacion-de-directorios-en-gnulinux.html&quot;&gt;Organización de directorios en gnu/linux&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/manipulacion-de-directorios.html&quot;&gt;Manipulación de Directorios: cd/mkdir/rmdir/tree&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/permisos-i.html&quot;&gt;Permisos (I)&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/comandos-para-manipular-archivos.html&quot;&gt;Comandos para manipular archivos&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/comandos-de-redes-1-en-gnulinux.html&quot;&gt;Comandos de redes (1) en gnu/linux&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/compartir-disco-de-red-de-forma-segura.html&quot;&gt;Compartir disco de red de forma segura (gnu/linux)&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/comando-linux-timeheadtail-tuberias.html&quot;&gt;Comando Linux: time,head,tail, TUBERIAS, more,less, wc&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/pwd-find-y-grep.html&quot;&gt;pwd, find y grep&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/permisos-y-copias-de-seguridad.html&quot;&gt;Permisos, y copias de seguridad (comprimir y descomprimir)&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/superar-las-limitaciones-del-los.html&quot;&gt;Superar las limitaciones del los servicios de permisos básicos de gnu/linux.&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/enlaces-duros-y-blandos-del-sistema.html&quot;&gt;Enlaces duros y blandos del sistema gnu/linux&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/programas-shell.html&quot;&gt;&amp;nbsp;Programas Shell&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/alias-y-variables-del-sistema-uso-del.html&quot;&gt;Alias y Variables del Sistema. Uso del PATH&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/comodines-en-gnulinux-o-de-expansion.html&quot;&gt;Comodines en gnu/linux o de expansión.&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/redireccionamiento.html&quot;&gt;Redireccionamiento&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/comandos-sort-y-cut.html&quot;&gt;comandos sort y cut&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/sistemas-de-procesos-en-gnulinux-y.html&quot;&gt;Sistemas de procesos en gnu/linux y multitarea en terminales.&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/comandos-de-tiempo-date-y-cron.html&quot;&gt;Comandos de tiempo: date y cron&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/sistemas-de-procesos.html&quot;&gt;SISTEMAS DE PROCESOS&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/repaso-de-las-variables-de-entorno.html&quot;&gt;Repaso de las variables de entorno.&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/variables-de-usuarios-en-bash.html&quot;&gt;Variables de Usuarios en Bash&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/sistema-de-archivos-y-montaje-de.html&quot;&gt;Sistema de archivos y montaje de memorias usb&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/nfs-protocolo-de-red-sistema-de.html&quot;&gt;NFS: Protocolo de red sistema de archivos de red.&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/lenguaje-c-estructurado.html&quot; target=&quot;_blank&quot;&gt;Lenguaje C estructurado&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/instalacion-de-c-y-su-ide-codelite.html&quot; target=&quot;_blank&quot;&gt;Instalacion de C y su IDE codelite&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/instalando-plugins-en-codelite.html&quot; target=&quot;_blank&quot;&gt;Instalando plugins en Codelite&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/codelite-versiones-mas-recientes.html&quot; target=&quot;_blank&quot;&gt;Codelite: versiones más recientes&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/tablas-de-equivalencias-entre.html&quot; target=&quot;_blank&quot;&gt;Tablas de Equivalencias entre Pseudolenguaje y C&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/practicas-de-c-i.html&quot; target=&quot;_blank&quot;&gt;Prácticas de C (I)&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/practicas-de-c-bucles-i.html&quot; target=&quot;_blank&quot;&gt;Prácticas de C: Bucles (I)&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/poner-comentarios-en-nuestros-programas.html&quot; target=&quot;_blank&quot;&gt;Poner comentarios en nuestros programas&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/codelite-depurador.html&quot; target=&quot;_blank&quot;&gt;Codelite: Depurador&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/practicas-de-c-bucles-ii.html&quot; target=&quot;_blank&quot;&gt;Prácticas de C: Bucles (II)&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/problema-numeros-primos.html&quot; target=&quot;_blank&quot;&gt;Problema: Números Primos&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/tablas-secuencias-de-numeros-i.html&quot; target=&quot;_blank&quot;&gt;&amp;nbsp;Tablas: Secuencias de Números (I)&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/tablas-secuencias-de-numeros-ii-ordenar.html&quot; target=&quot;_blank&quot;&gt;Tablas: Secuencias de numeros (II) Ordenar&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/numeros-aleatorios-en-c.html&quot; target=&quot;_blank&quot;&gt;Numeros Aleatorios en C&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/funciones-y-procedimientos.html&quot; target=&quot;_blank&quot;&gt;&amp;nbsp;Funciones y Procedimientos&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/define-bucle-for-y-funcion-qsort.html&quot; target=&quot;_blank&quot;&gt;Define, Bucle For y función Qsort&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/tipos-de-formatos-para-prinft-y-scanf.html&quot; target=&quot;_blank&quot;&gt;Tipos de formatos para prinft() y scanf()&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/funciones-que-forman-parte-de-la.html&quot; target=&quot;_blank&quot;&gt;Funciones que forman parte de la librería de C &amp;lt;stdio.h&amp;gt; :&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/manejo-de-ficheros-i.html&quot; target=&quot;_blank&quot;&gt;Manejo de ficheros (I)&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/ficheros-ii-y-tipos-de-datos-definidos.html&quot; target=&quot;_blank&quot;&gt;&amp;nbsp;Ficheros (II) y tipos de datos definidos por el usuario&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/funciones-para-manejar-cadenas-en-c-i.html&quot; target=&quot;_blank&quot;&gt;Funciones para manejar cadenas en C (I)&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/conversiones-de-texto-numeros.html&quot; target=&quot;_blank&quot;&gt;Conversiones de Texto &amp;lt;&amp;gt; Numeros&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/analisis-de-argumentos.html&quot; target=&quot;_blank&quot;&gt;Analisis de argumentos&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/problemas-analisis-de-argumentos.html&quot; target=&quot;_blank&quot;&gt;Problemas: Analisis de argumentos&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/problemas-crear-un-comando-similar-al.html&quot; target=&quot;_blank&quot;&gt;Problemas: crear un comando similar al cat y buscar una palabra dentro del archivo.&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/soluciones-profe-del-cat-flujos-de.html&quot; target=&quot;_blank&quot;&gt;Soluciones profe del Cat: Flujos de Información, malloc y free&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/ver-la-eficacia-de-nuestro-programa.html&quot; target=&quot;_blank&quot;&gt;Ver la eficacia de nuestro programa...&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/truco-comando-indent_12.html&quot; target=&quot;_blank&quot;&gt;Truco: Comando indent&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/analisis-de-argumentos-2-desplazamiento.html&quot; target=&quot;_blank&quot;&gt;&amp;nbsp;Analisis de argumentos 2: &amp;lt;&amp;lt; ( desplazamiento binario) y enmascaramiento binario&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/configurar-codelite-y-geany-para-pasar.html&quot; target=&quot;_blank&quot;&gt;Configurar Codelite y Geany para pasar los ejecutables a /home/usuario/bin&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/geany-indentacion-del-codigo-fuente.html&quot; target=&quot;_blank&quot;&gt;Geany: indentación del código fuente&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/mostrar-en-pantalla-el-contenido-de-una.html&quot; target=&quot;_blank&quot;&gt;Mostrar en pantalla el contenido de una variable de entorno o de sistema (HOME, PWD, etc) en C&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/c-trabajar-con-directorios.html&quot; target=&quot;_blank&quot;&gt;C: trabajar con directorios&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/colores-en-la-consola-i.html&quot; target=&quot;_blank&quot;&gt;Colores en la Consola (I)&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/colores-en-la-consola-ii-y-movimiento.html&quot; target=&quot;_blank&quot;&gt;Colores en la Consola (II) y movimiento del cursor&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/instalacion-del-ncurses-y-conioh.html&quot; target=&quot;_blank&quot;&gt;Instalación del ncurses y conio.h modificada&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/librerias-en-c-i.html&quot; target=&quot;_blank&quot;&gt;&amp;nbsp;librerias en C (I)&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/librerias-en-c-ii-como-se-crean-y-se.html&quot; target=&quot;_blank&quot;&gt;librerias en C (II): Como se crean y se usan&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/make-y-makefile.html&quot; target=&quot;_blank&quot;&gt;make y makefile&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/estructurar-los-programas-en-c-con.html&quot; target=&quot;_blank&quot;&gt;Estructurar los programas en C con módulos.&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/funciones-de-c-para-usar-comandos-del.html&quot; target=&quot;_blank&quot;&gt;funciones de C para usar comandos del sistema&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/listas-enlazadas-dobles-aplicacion-en.html&quot; target=&quot;_blank&quot;&gt;listas enlazadas dobles: aplicación en Menus&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/script-en-bash-introduccion.html&quot; target=&quot;_blank&quot;&gt;Script en Bash: Introducción&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/if-en-bash.html&quot; target=&quot;_blank&quot;&gt;&amp;nbsp;If en bash&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/gestion-de-multiples-argumentos-en.html&quot; target=&quot;_blank&quot;&gt;Gestion de multiples argumentos en Scripts: For&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Parametros, Expresiones, Test en Shell&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/let-case-ejemplos-de-script.html&quot; target=&quot;_blank&quot;&gt;Let / Case / ejemplos de script&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/ejercicios-de-script-i.html&quot; target=&quot;_blank&quot;&gt;Ejercicios de Script (I)&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/examenes.html&quot; target=&quot;_blank&quot;&gt;Examenes&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/examen-i.html&quot; target=&quot;_blank&quot;&gt;Examen I&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/examen1-solucion-en-pseudocodigo.html&quot; target=&quot;_blank&quot;&gt;examen1 solucion en pseudocodigo&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/examen1-solucion-en-c.html&quot; target=&quot;_blank&quot;&gt;examen1 solucion en c&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/la-solucion-del-profe.html&quot; target=&quot;_blank&quot;&gt;La solución del profe...&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/comentarios-sobre-la-correccion-del.html&quot; target=&quot;_blank&quot;&gt;Comentarios sobre la corrección del examen I&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/examen-2.html&quot; target=&quot;_blank&quot;&gt;&amp;nbsp;Examen 2&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/examen-2-solucion-del-alumno_12.html&quot; target=&quot;_blank&quot;&gt;examen 2: solución del alumno&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/examen-2-solucion-del-profe.html&quot; target=&quot;_blank&quot;&gt;examen 2: solución del profe&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/examen-3.html&quot; target=&quot;_blank&quot;&gt;Examen 3&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/examen-3-solucion-del-alumno.html&quot; target=&quot;_blank&quot;&gt;examen 3: solución del alumno&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/examen-3-solucion-del-alumno-2-variante.html&quot; target=&quot;_blank&quot;&gt;examen 3: solución del alumno (2º variante): Con uso de estructuras y switch case&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/examen-3-solucion-del-profe.html&quot; target=&quot;_blank&quot;&gt;examen 3: solución del profe&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/examen-4-calculadora-no-interactiva.html&quot; target=&quot;_blank&quot;&gt;Examen 4: calculadora no interactiva&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/solucion-4-alumno.html&quot; target=&quot;_blank&quot;&gt;solucion 4 alumno&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/examen-5-crear-comando-lsl.html&quot; target=&quot;_blank&quot;&gt;&amp;nbsp;Examen 5: crear comando lsl&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/examen-5-solucion-alumno-usando-colores.html&quot; target=&quot;_blank&quot;&gt;examen 5: solucion alumno (usando colores)&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/examen-5-solucion-compi-antonio.html&quot; target=&quot;_blank&quot;&gt;examen 5 solucion compi. Antonio&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/examen-6-gestion-de-trareas-y.html&quot; target=&quot;_blank&quot;&gt;Examen 6: Gestión de trareas y notificarlas&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/solucion-6-alumno.html&quot; target=&quot;_blank&quot;&gt;solucion 6: alumno&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/solucion-7-alumno.html&quot; target=&quot;_blank&quot;&gt;&amp;nbsp; Examen 7: Crear el comando &quot;mata&quot;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/solucion-7-alumno.html&quot; target=&quot;_blank&quot;&gt;Solucion 7: alumno&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/solucion-7-alumno-antonio.html&quot; target=&quot;_blank&quot;&gt;solucion 7: alumno antonio&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/programa-final.html&quot; target=&quot;_blank&quot;&gt;Programa Final&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://fpoprogramador.blogspot.com.es/2012/07/solucion-con-menus-graficos.html&quot; target=&quot;_blank&quot;&gt;Solución con Menus Graficos&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
Añadido:&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;a href=&quot;http://1cd9be66.linkbucks.com/url/http://fpoprogramador.blogspot.com.es/2012/07/programacion-de-sockets-en-c-de.html&quot;&gt;Programacion de sockets en C de Unix/Linux&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/4726634686339240155/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/09/bienvenidos-al-de-fpo-programador-de.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/4726634686339240155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/4726634686339240155'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/09/bienvenidos-al-de-fpo-programador-de.html' title=''/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-7754027225481539392</id><published>2012-07-14T14:14:00.003-07:00</published><updated>2012-07-14T14:14:34.948-07:00</updated><title type='text'>Programación de sockets en C de Unix/Linux</title><content type='html'>&lt;br /&gt;
&lt;h4&gt;
Fuente:&amp;nbsp;&lt;a href=&quot;http://www.chuidiang.com/clinux/sockets/sockets_simp.php&quot; target=&quot;_blank&quot;&gt;http://www.chuidiang.com/clinux/sockets/sockets_simp.php&lt;/a&gt; &lt;/h4&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
&amp;nbsp;&lt;/h4&gt;
&lt;h4&gt;
INTRODUCCIÓN&lt;/h4&gt;
&lt;br /&gt;
En una red de ordenadores hay varios ordenadores que están conectados 
      entre si por un cable. A través de dicho cable pueden transmitirse 
      información. Es claro que deben estar de acuerdo en cómo transmitir 
      esa información, de forma que cualquiera de ellos pueda entender 
      lo que están transmitiendo los otros, de la misma forma que nosotros 
      nos ponemos de acuerdo para hablar en inglés cuando uno es italiano, 
      el otro francés, el otro español y el otro alemán. 
    &lt;br /&gt;

    Al &quot;idioma&quot; que utilizan los ordenadores para comunicarse cuando están 
      en red se le denomina &lt;strong&gt;protocolo&lt;/strong&gt;. Hay muchísimos 
      protocolos de comunicación, entre los cuales el más extendido 
      es el &lt;strong&gt;TCP/IP&lt;/strong&gt;. El más extendido porque es el que 
      se utiliza en &lt;strong&gt;Internet&lt;/strong&gt;. &lt;br /&gt;

    Aunque todo esto pueda parecer complicado y que no podemos hacer mucho 
      con ello, lo cierto es que podemos aprovecharlo para comunicar dos programas 
      nuestros que estén corriendo en ordenadores distintos. De hecho, 
      con C en Linux/Unix tenemos una serie de funciones que nos permiten enviar 
      y recibir datos de otros programas, en C o en otros lenguajes de programación, 
      que estén corriendo en otros ordenadores de la misma red. &lt;br /&gt;

    En este artículo no se pretende dar una descripción detallada 
      y rigurosa del protocolo &lt;strong&gt;TCP/IP&lt;/strong&gt; y lo que va alrededor de 
      él. Simplemente se darán unas nociones básicas de manera 
      informal, con la intención de que se pueda comprender un pequeño 
      ejemplo de programación en C. &lt;br /&gt;

    Está, por tanto, orientado a personas que tengan unos conocimientos 
      básicos de C en Linux y deseen o necesiten comunicar dos programas 
      en C que corren simultáneamente en dos ordenadores distintos conectados 
      en red. El ejemplo propuesto puede servir como guía inicial que se 
      pude complicar todo lo que se desee.&lt;br /&gt;

    &lt;h4&gt;
 &lt;a href=&quot;&quot; id=&quot;sockets&quot; name=&quot;sockets&quot; style=&quot;text-decoration: underline;&quot;&gt;&lt;/a&gt;LOS 
      SOCKETS&lt;/h4&gt;
Una forma de conseguir que dos programas se transmitan datos, basada en 
      el protocolo &lt;strong&gt;TCP/IP&lt;/strong&gt;, es la programación de &lt;strong&gt;sockets&lt;/strong&gt;. 
      Un &lt;strong&gt;socket&lt;/strong&gt; no es más que un &quot;canal de comunicación&quot; 
      entre dos programas que corren sobre ordenadores distintos o incluso en 
      el mismo ordenador. &lt;br /&gt;

    Desde el punto de vista de programación, un &lt;strong&gt;socket&lt;/strong&gt; 
      no es más que un &quot;fichero&quot; que se abre de una manera especial. Una 
      vez abierto se pueden escribir y leer datos de él con las habituales 
      funciones de &lt;strong&gt;read()&lt;/strong&gt; y &lt;strong&gt;write()&lt;/strong&gt; del lenguaje 
      C. Hablaremos de todo esto con detalle más adelante. &lt;br /&gt;

    Existen básicamente dos tipos de &quot;canales de comunicación&quot; 
      o &lt;strong&gt;sockets&lt;/strong&gt;, los &lt;strong&gt;orientados a conexión&lt;/strong&gt; 
      y los &lt;strong&gt;no orientados a conexión&lt;/strong&gt;. &lt;br /&gt;

    En el primer caso ambos programas deben conectarse entre ellos con un &lt;strong&gt;socket&lt;/strong&gt; 
      y hasta que no esté establecida correctamente la conexión, 
      ninguno de los dos puede transmitir datos. Esta es la parte &lt;strong&gt;TCP&lt;/strong&gt; 
      del protocolo &lt;strong&gt;TCP/IP&lt;/strong&gt;, y garantiza que todos los datos van 
      a llegar de un programa al otro correctamente. Se utiliza cuando la información 
      a transmitir es importante, no se puede perder ningún dato y no importa 
      que los programas se queden &quot;bloqueados&quot; esperando o transmitiendo datos. 
      Si uno de los programas está atareado en otra cosa y no atiende la 
      comunicación, el otro quedará bloqueado hasta que el primero 
      lea o escriba los datos. &lt;br /&gt;

    En el segundo caso, no es necesario que los programas se conecten. Cualquiera 
      de ellos puede transmitir datos en cualquier momento, independientemente 
      de que el otro programa esté &quot;escuchando&quot; o no. Es el llamado protocolo 
      &lt;strong&gt;UDP&lt;/strong&gt;, y garantiza que los datos que lleguen son correctos, 
      pero no garantiza que lleguen todos. Se utiliza cuando es muy importante 
      que el programa no se quede bloqueado y no importa que se pierdan datos. 
      Imaginemos, por ejemplo, un programa que está controlando la temperatura 
      de un horno y envía dicha temperatura a un ordenador en una sala 
      de control para que éste presente unos gráficos de temperatura. 
      Obviamente es más importante el control del horno que el perfecto 
      refresco de los gráficos. El programa no se puede quedar bloqueado 
      sin atender al horno simplemente porque el ordenador que muestra los gráficos 
      esté ocupado en otra cosa.&lt;br /&gt;

    En el ejemplo y a partir de este momento nos referimos únicamente 
      a sockets &lt;strong&gt;TCP&lt;/strong&gt;. Los &lt;strong&gt;UDP&lt;/strong&gt; son básicamente 
      iguales, aunque hay pequeñas diferencias en la forma de abrirlos 
      y de enviar los mensajes. Puedes ver un &lt;a href=&quot;http://www.chuidiang.com/clinux/sockets/udp/udp.php&quot;&gt;ejemplo de 
      programación de socket UDP&lt;/a&gt;.&lt;br /&gt;

    &lt;h4&gt;
&lt;br /&gt;
      &lt;a href=&quot;&quot; id=&quot;clienteservidor&quot; name=&quot;clienteservidor&quot; style=&quot;text-decoration: underline;&quot;&gt;&lt;/a&gt; 
      ARQUITECTURA CLIENTE / SERVIDOR&lt;/h4&gt;
A la hora de comunicar dos programas, existen varias posibilidades para 
      establecer la conexión inicialmente. Una de ellas es la utilizada 
      aquí. Uno de los programas debe estar arrancado y en espera de que 
      otro quiera conectarse a él. Nunca da &quot;el primer paso&quot; en la conexión. 
      Al programa que actúa de esta forma se le conoce como &lt;strong&gt;servidor&lt;/strong&gt;. 
      Su nombre se debe a que normalmente es el que tiene la información 
      que sea disponible y la &quot;sirve&quot; al que se la pida. Por ejemplo, el servidor 
      de páginas web tiene las páginas web y se las envía 
      al navegador que se lo solcite. &lt;br /&gt;

    El otro programa es el que da el primer paso. En el momento de arrancarlo 
      o cuando lo necesite, intenta conectarse al servidor. Este programa se denomina 
      &lt;strong&gt;cliente&lt;/strong&gt;. Su nombre se debe a que es el que solicita información 
      al &lt;strong&gt;servidor&lt;/strong&gt;. El navegador de Internet pide la página 
      web al servidor de Internet. &lt;br /&gt;

    En este ejemplo, el servidor de páginas web se llama &lt;strong&gt;servidor&lt;/strong&gt; 
      porque está (o debería de estar) siempre encendido y pendiente 
      de que alguien se conecte a él y le pida una página. El navegador 
      de Internet es el &lt;strong&gt;cliente&lt;/strong&gt;, puesto que se arranca cuando 
      nosotros lo arrancamos y solicita conexión con el servidor cuando 
      nosotros escribimos, por ejemplo, &lt;a href=&quot;http://www.chuidiang.com/&quot;&gt;www.chuidiang.com&lt;/a&gt; 
    &lt;br /&gt;

    En el juego del Quake, debe haber un &lt;strong&gt;servidor&lt;/strong&gt; que es el 
      que tiene el escenario del juego y la situación de todos los jugadores 
      en él. Cuando un nuevo jugador arranca el juego en su ordenador, 
      se conecta al servidor y le pide el escenario del juego para presentarlo 
      en la pantalla. Los movimientos que realiza el jugador se transmiten al 
      servidor y este actualiza escenarios a todos los jugadores. &lt;br /&gt;

    Resumiendo, &lt;strong&gt;servidor&lt;/strong&gt; es el programa que permanece pasivo 
      a la espera de que alguien solicite conexión con él, normalmente, 
      para pedirle algún dato. &lt;strong&gt;Cliente&lt;/strong&gt; es el programa 
      que solicita la conexión para, normalmente, pedir datos al servidor. 
    &lt;br /&gt;

    &lt;h4&gt;
&lt;br /&gt;
      &lt;a href=&quot;&quot; id=&quot;conexion&quot; name=&quot;conexion&quot; style=&quot;text-decoration: underline;&quot;&gt;&lt;/a&gt;LA 
      CONEXIÓN&lt;/h4&gt;
Para poder realizar la conexión entre ambos programas son necesarias 
      varias cosas: &lt;br /&gt;

    &lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Dirección IP del servidor&lt;/strong&gt;.&lt;br /&gt;
        &lt;br /&gt;
        Cada ordenador de una red tiene asignado un número único, 
        que sirve para identificarle y distinguirle de los demás, de forma 
        que cuando un ordenador quiere hablar con otro, manda la información 
        a dicho número. Es similar a nuestros números de teléfono. 
        Si quiero hablar con mi amigo &quot;Josechu&quot;, primero marco su número 
        de teléfono y luego hablo con él.&lt;br /&gt;
        &lt;br /&gt;
        El servidor no necesita la dirección de ninguno de los dos ordenadores, 
        al igual que nosotros, para recibir una llamada por teléfono, no 
        necesitamos saber el número de nadie, ni siquiera el nuestro. El 
        cliente sí necesita saber el número del servidor, al igual 
        que nosotros para llamar a alguien necesitamos saber su número 
        de teléfono. &lt;br /&gt;
        &lt;br /&gt;
        La dirección IP es un número del estilo 192.100.23.4.&amp;nbsp; 
        ¡Todos lo hemos visto en Internet!. En resumidas cuentas, el cliente 
        debe conocer a qué ordenador desea conectarse. En nuestro navegador 
        de Internet facilitamos la dirección IP del servidor al que queremos 
        conectarnos a través de su nombre (&lt;a href=&quot;http://www.chuidiang.com/&quot;&gt;www.chuidiang.com&lt;/a&gt;). Obviamente este nombre 
        hay que traducirlo a una dirección IP, pero nuestro navegador e 
        Internet se encargan de eso por nosotros. &lt;br /&gt;
        &lt;br /&gt;
      &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Servicio&lt;/strong&gt; que queremos crear / utilizar. &lt;br /&gt;
        &lt;br /&gt;
        Si llamamos a una empresa, puede haber en ella muchas personas, cada una 
        con su extensión de teléfono propia. Normalmente la persona 
        en concreto con la que hablemos nos da igual, lo que queremos es alguien 
        que nos atienda y nos de un determinado &quot;servicio&quot;, como recoger una queja, 
        darnos una información, tomarnos nota de un pedido, etc.&lt;br /&gt;
        &lt;br /&gt;
        De la misma forma, en un mismo ordenador pueden estar corriendo varios 
        programas servidores, cada uno de ellos dando un servicio distinto. Por 
        ejemplo, un ordenador puede tener un servidor de Quake y un servidor de 
        páginas web corriendo a la vez. Cuando un cliente desea conectarse, 
        debe indicar qué servicio quiere, igual que al llamar a la empresa 
        necesitamos decir la extensión de la persona con la que queremos 
        hablar o, al menos, decir su nombre o el departamento al que pertenece 
        para que la telefonista nos ponga con la persona adecuada.&lt;br /&gt;
        &lt;br /&gt;
        Por ello, cada servicio dentro del ordenador debe tener un número 
        único que lo identifique (como la extensión de teléfono). 
        Estos números son enteros normales y van de 1 a 65535. Los número 
        bajos, desde 1 a 1023 están reservados para servicios habituales 
        de los sistemas operativos (www, ftp, mail, ping, etc). El resto están 
        a disposición del programador y sirven para cosas como Quake.&lt;br /&gt;
        &lt;br /&gt;
        Tanto el servidor como el cliente deben conocer el número del servicio 
        al que atienden o se conectan. El servidor le indica al sistema operativo&amp;nbsp; 
        qué servicio quiere atender, al igual que en una empresa el empleado 
        recién contratado (o alguien en su lugar) debe informar a la telefonista 
        en qué extensión se encuentra. &lt;br /&gt;
        &lt;br /&gt;
        El cliente, cuando llame a la empresa, debe dar el número de extensión 
        (o nombre de empleado), de forma que la telefonista le ponga con la persona 
        adecuada. En el caso del navegador de Internet, estamos indicando el servicio 
        con la www en &lt;a href=&quot;http://www.chuidiang.com/&quot;&gt;www.chuidiang.com&lt;/a&gt;, 
        servicio de páginas web. También es posible, por ejemplo 
        &quot;ftp.chuidiang.com&quot;, si chuidiang.com admite clientes ftp. Nuestro ordenador 
        es lo suficientemente listo como para saber a qué número 
        corresponden esos servicios habituales.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
 &lt;a href=&quot;&quot; id=&quot;servidor&quot; name=&quot;servidor&quot; style=&quot;text-decoration: underline;&quot;&gt;&lt;/a&gt;EL 
      SERVIDOR&lt;/h4&gt;
A partir de este punto comenzamos con lo que es la programación 
      en C de los sockets. Si no tienes unos mínimos conocimientos de C, 
      es mejor que los adquieras antes de seguir. &lt;br /&gt;

    Con C en Unix/Linux, los pasos que debe seguir un programa servidor son 
      los siguientes: &lt;br /&gt;

    &lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Apertura de un socket&lt;/strong&gt;, mediante la función 
        &lt;strong&gt;socket()&lt;/strong&gt;. Esta función devuelve un descriptor 
        de fichero normal, como puede devolverlo open(). La función socket() 
        no hace absolutamente nada, salvo devolvernos y preparar un descriptor 
        de fichero que el sistema posteriormente asociará a una conexión 
        en red.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Avisar al sistema operativo&lt;/strong&gt; de que hemos abierto un 
        socket y queremos que asocie nuestro programa a dicho socket. Se consigue 
        mediante la función &lt;strong&gt;bind()&lt;/strong&gt;. El sistema todavía 
        no atenderá a las conexiones de clientes, simplemente anota que 
        cuando empiece a hacerlo, tendrá que avisarnos a nosotros. Es en 
        esta llamada cuando se debe indicar el número de servicio al que 
        se quiere atender.&lt;/li&gt;
&lt;li&gt; Avisar al sistema de que &lt;strong&gt;comience a atender dicha conexión&lt;/strong&gt; 
        de red. Se consigue mediante la función &lt;strong&gt;listen()&lt;/strong&gt;. 
        A partir de este momento el sistema operativo anotará la conexión 
        de cualquier cliente para pasárnosla cuando se lo pidamos. Si llegan 
        clientes más rápido de lo que somos capaces de atenderlos, 
        el sistema operativo hace una &quot;cola&quot; con ellos y nos los irá pasando 
        según vayamos pidiéndolo.&lt;/li&gt;
&lt;li&gt; Pedir y &lt;strong&gt;aceptar las conexiones&lt;/strong&gt; de clientes al sistema 
        operativo. Para ello hacemos una llamada a la función &lt;strong&gt;accept()&lt;/strong&gt;. 
        Esta función le indica al sistema operativo que nos dé al 
        siguiente cliente de la cola. Si no hay clientes se quedará bloqueada 
        hasta que algún cliente se conecte.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Escribir y recibir datos&lt;/strong&gt; del cliente, por medio de 
        las funciones&lt;strong&gt; write()&lt;/strong&gt; y &lt;strong&gt;read()&lt;/strong&gt;, que 
        son exactamente las mismas que usamos para escribir o leer de un fichero. 
        Obviamente, tanto cliente como servidor deben saber qué datos esperan 
        recibir, qué datos deben enviar y en qué formato. Puedes 
        ver cómo se pueden poner de acuerdo en estos mensajes en el apartado 
        de &lt;a href=&quot;http://www.chuidiang.com/clinux/sockets/mensajes.php&quot;&gt;mensajes&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Cierre de la comunicación&lt;/strong&gt; y del socket, por 
        medio de la función &lt;strong&gt;close()&lt;/strong&gt;, que es la misma que 
        sirve para cerrar un fichero.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
 &lt;a href=&quot;&quot; id=&quot;cliente&quot; name=&quot;cliente&quot; style=&quot;text-decoration: underline;&quot;&gt;&lt;/a&gt;EL 
      CLIENTE &lt;/h4&gt;
Los pasos que debe seguir un programa cliente son los siguientes: &lt;br /&gt;

    &lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Apertura de un socket&lt;/strong&gt;, como el servidor, por medio 
        de la función &lt;strong&gt;socket()&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Solicitar conexión&lt;/strong&gt; con el servidor por medio 
        de la función &lt;strong&gt;connect()&lt;/strong&gt;. Dicha función 
        quedará bloqueada hasta que el servidor acepte nuestra conexión 
        o bien si no hay servidor en el sitio indicado, saldrá dando un 
        error. En esta llamada se debe facilitar la dirección IP del servidor 
        y el número de servicio que se desea.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Escribir y recibir datos&lt;/strong&gt; del servidor por medio de 
        las funciones &lt;strong&gt;write()&lt;/strong&gt; y &lt;strong&gt;read()&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Cerrar la comunicación&lt;/strong&gt; por medio de &lt;strong&gt;close()&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
 &lt;a href=&quot;&quot; id=&quot;ficheroimplicados&quot; name=&quot;ficheroimplicados&quot; style=&quot;text-decoration: underline;&quot;&gt;&lt;/a&gt;FICHEROS 
      UNIX/LINUX IMPLICADOS&lt;/h4&gt;
Para la programación de &lt;strong&gt;socket&lt;/strong&gt; no es estrictamente 
      necesario ningún fichero. Sabiendo la &lt;strong&gt;dirección IP&lt;/strong&gt; 
      y el &lt;strong&gt;número de servicio&lt;/strong&gt;, se ponen directamente en 
      código y todo resuelto. Sin embargo, esto no es lo más cómodo 
      ni lo más portable de unos ordenadores a otros. &lt;br /&gt;

    Hay dos ficheros en Unix/Linux que nos facilitan esta tarea, aunque hay 
      que tener permisos de root para modificarlos. Estos ficheros serían 
      el equivalente a una agenda de teléfonos, en uno tenemos apuntados 
      el nombre de la empresa con su número de teléfono y en el 
      otro fichero el nombre de la persona y su extensión&amp;nbsp; (EmpresaGorda, 
      tlfn 123.456.789; JoseGordo, extensión 2245; ...) &lt;br /&gt;

    &lt;strong&gt;/etc/hosts&lt;/strong&gt; : Esta es la agenda en la que tenemos las empresas 
      y sus números de teléfono. En este fichero hay una lista de 
      nombres de ordenadores conectados en red y dirección IP de cada uno. 
      Habitualmente en el /etc/hosts del cliente se suele colocar el nombre del 
      servidor y su dirección IP. Luego, desde programa, se hace una llamada 
      a la función &lt;strong&gt;gethostbyname()&lt;/strong&gt;, a la que pasándole 
      el nombre del ordenador como una cadena de caracteres, devuelve una estructura 
      de datos entre los que está la dirección IP. &lt;br /&gt;

    Una línea de lo que puede aparecer en este fichero es la siguiente, 
      en el que vemos la dirección IP y el nombre del ordenador que nos 
      da el servicio de Quake. &lt;br /&gt;

    &lt;div class=&quot;codigo&quot;&gt;
192.30.10.1 Ordenador_Quake &lt;/div&gt;
En Windows, este fichero suele encontrarse en C:\WINNT\system32\drivers\etc\hosts.&lt;br /&gt;

    &lt;strong&gt;/etc/services&lt;/strong&gt; : Este fichero es el equivalente a la agenda 
      donde tenemos apuntados los distintos departamentos/personas de la empresa 
      y sus números de extensión telefónica. En este fichero 
      hay una lista de servicios disponibles, indicando nombre de servicio, número 
      de servicio y tipo (ftp/udp). &lt;br /&gt;

    Tanto el servidor como el cliente deben tener en este fichero el servicio 
      que están atendiendo / solicitando con el mismo número y tipo 
      de servicio. El nombre puede ser distinto, igual que cada uno en su agenda 
      pone el nombre que quiere, pero no es lo habitual. &lt;br /&gt;

    Desde programa, tanto cliente como servidor, deben hacer una llamada a 
      la función &lt;strong&gt;getservbyname()&lt;/strong&gt;, a la que pasándole 
      el nombre del servicio, devuelve una estructura de datos entre los que está 
      el número de servicio y el tipo. &lt;br /&gt;

    Un ejemplo de lo que puede aparecer en un fichero /etc/services es el siguiente, 
      en el que vemos en cada línea nombre del servicio, número 
      / tipo y un comentario opcional detrás del símbolo #. &quot;Casualmente&quot;, 
      se ve el servicio www, cuyo número de servicio conocido por todos 
      los ordenadores de Internet, es el 80. &lt;br /&gt;

    &lt;div class=&quot;codigo&quot;&gt;
tftp 69/udp &lt;br /&gt;
      gopher 70/tcp # Internet Gopher &lt;br /&gt;
      gopher 70/udp &lt;br /&gt;
      rje 77/tcp &lt;br /&gt;
      finger 79/tcp &lt;br /&gt;
      www 80/tcp http # Worldwide Web HTTP &lt;br /&gt;
      www 80/udp # HyperText Transfer Protocol &lt;br /&gt;
      link 87/tcp ttylink &lt;/div&gt;
En Windows, el ficherito de marras está en C:\WINNT\system32\drivers\etc\services&lt;br /&gt;

    &lt;h4&gt;
&lt;br /&gt;
      &lt;a href=&quot;&quot; id=&quot;ejemplo&quot; name=&quot;ejemplo&quot; style=&quot;text-decoration: underline;&quot;&gt;&lt;/a&gt;EJEMPLO&lt;/h4&gt;
Sentadas las bases de los &lt;strong&gt;sockets&lt;/strong&gt;, vamos a ver un pequeño &lt;a href=&quot;https://docs.google.com/open?id=0B7uxDVszpXK2WVZWdnpINGdJMmM&quot;&gt;fuente.zip&lt;/a&gt; de programa &lt;strong&gt;servidor&lt;/strong&gt; 
      y &lt;strong&gt;cliente&lt;/strong&gt;, realizado con C en Linux. El servidor esperará 
      la conexión del cliente. Una vez conectados, se enviarán una 
      cadena de texto el uno al otro y ambos escribirán en pantalla la 
      cadena recibida. &lt;br /&gt;

    Para ejecutar el ejemplo no es necesario tener dos ordenadores. Se pude 
      ejecutar el servidor desde una ventana y el cliente desde otra. En la ventana 
      del servidor veremos la cadena que ha enviado el cliente y al revés. 
    &lt;br /&gt;

    &lt;h4&gt;
&lt;a href=&quot;&quot; id=&quot;detallesservidor&quot; name=&quot;detallesservidor&quot;&gt;&lt;/a&gt;DETALLES DEL SERVIDOR&lt;/h4&gt;
En este apartado vamos a detallar las llamadas a las funciones del servidor 
      que indicamos anteriormente. Explicaremos con cierto detalle qué 
      parámetros se deben pasar y cual es el resultado de dichas llamadas. 
    &lt;br /&gt;

    En primer lugar el servidor debe &lt;strong&gt;obtener el número del servicio&lt;/strong&gt; 
      al que quiere atender, haciendo la llamada a &lt;strong&gt;getservbyname()&lt;/strong&gt;. 
      Esta función devuelve una estructura (en realidad puntero a la estructura) 
      en el que uno de sus campos contiene el número de servicio solicitado. 
    &lt;br /&gt;

    &lt;div class=&quot;codigo&quot;&gt;
struct servent Puerto; &lt;span class=&quot;comentario_codigo&quot;&gt;/* 
      Estructura devuelta */ &lt;/span&gt;&lt;br /&gt;
    &lt;br /&gt;
      &lt;span class=&quot;comentario_codigo&quot;&gt; /* La llamada a la función */ &lt;/span&gt;&lt;br /&gt;
      Puerto = getservbyname (&quot;Nombre_Servicio&quot;, &quot;tcp&quot;); &lt;/div&gt;
Los parámetros de la función son dos cadenas de caracteres. 
      La primera es el &lt;strong&gt;nombre del servicio&lt;/strong&gt;, tal cual lo escribimos 
      en el fichero &lt;strong&gt;/etc/services&lt;/strong&gt;. El segundo es el tipo de protocolo 
      que queremos usar. &quot;&lt;strong&gt;tcp&lt;/strong&gt;&quot; o &quot;&lt;strong&gt;udp&lt;/strong&gt;&quot;, Dentro 
      de lo que devuelve la función, el número de servicio que nos 
      interesa está en un campo de &lt;strong&gt;Puerto&lt;/strong&gt;: &lt;br /&gt;

    &lt;div class=&quot;codigo&quot;&gt;
Puerto-&amp;gt;s_port &lt;/div&gt;
Ya tenemos todos los datos que necesita el servidor para abrir el socket, 
      así que procedemos a hacerlo. El socket se abre mediante la llamada 
      a la función &lt;strong&gt;socket()&lt;/strong&gt; y devuelve un entero que es 
      el &lt;strong&gt;descriptor de fichero&lt;/strong&gt; o –1 si ha habido algún 
      error. &lt;br /&gt;

    &lt;div class=&quot;codigo&quot;&gt;
int Descriptor; &lt;br /&gt;
      Descriptor = socket (AF_INET, SOCK_STREAM, 0); &lt;br /&gt;
      if (Descriptor == -1) &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; printf (&quot;Error\n&quot;); &lt;/div&gt;
El primer parámetro es &lt;strong&gt;AF_INET&lt;/strong&gt; o AF_UNIX para indicar 
      si los clientes pueden estar en otros ordenadores distintos del servidor 
      o van a correr en el mismo ordenador. &lt;strong&gt;AF_INET&lt;/strong&gt; vale para 
      los dos casos. &lt;strong&gt;AF_UNIX&lt;/strong&gt; sólo para el caso de que 
      el cliente corra en el mismo ordenador que el servidor, pero lo implementa 
      de forma más eficiente. Si ponemos &lt;strong&gt;AF_UNIX&lt;/strong&gt;, el resto 
      de las funciones varía ligeramente. &lt;br /&gt;

    El segundo parámetro indica si el socket es orientado a conexión 
      (&lt;strong&gt;SOCK_STREAM&lt;/strong&gt;) o no lo es (&lt;strong&gt;SOCK_DGRAM&lt;/strong&gt;). 
      De esta forma podremos hacer sockets de red o de Unix tanto orientados a 
      conexión como no orientados a conexión. &lt;br /&gt;

    El tercer parámetro indica el &lt;strong&gt;protocolo&lt;/strong&gt; a emplear. 
      Habitualmente se pone 0. &lt;br /&gt;

    Si se ha obtenido un descriptor correcto, se puede indicar al sistema que 
      ya lo tenemos abierto y que vamos a atender a ese servicio. Para ello utilizamos 
      la función &lt;strong&gt;bind()&lt;/strong&gt;. El problema de la función 
      &lt;strong&gt;bind()&lt;/strong&gt; es que lleva un parámetro bastante complejo 
      que debemos rellenar. &lt;br /&gt;

    &lt;div class=&quot;codigo&quot;&gt;
struct sockaddr_in Direccion; &lt;br /&gt;
      Direccion.sin_family = AF_INET; &lt;br /&gt;
      Direccion.sin_port = Puerto-&amp;gt;s_port; &lt;br /&gt;
      Direccion.sin_addr.s_addr =INADDR_ANY; &lt;br /&gt;
    &lt;br /&gt;if (bind (Descriptor, (struct sockaddr 
      *)&amp;amp;Direccion, sizeof (Direccion)) == -1) &lt;br /&gt;
      { &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; printf (&quot;Error\n&quot;); &lt;br /&gt;
      } &lt;/div&gt;
El parámetro que necesita es una estructura &lt;strong&gt;sockaddr&lt;/strong&gt;. 
      Lleva varios campos, entre los que es obligatorio rellenar los indicados 
      en el código. &lt;br /&gt;

    &lt;strong&gt;sin_family&lt;/strong&gt; es el tipo de conexión (por red o interna), 
      igual que el primer parámetro de &lt;strong&gt;socket()&lt;/strong&gt;. &lt;br /&gt;
      &lt;strong&gt;sin_port&lt;/strong&gt; es el número correspondiente al servicio 
      que obtuvimos con &lt;strong&gt;getservbyname()&lt;/strong&gt;. El valor está 
      en el campo &lt;strong&gt;s_port&lt;/strong&gt; de Puerto. &lt;br /&gt;
      Finalmente &lt;strong&gt;sin_addr.s_addr&lt;/strong&gt; es la dirección del cliente 
      al que queremos atender. Colocando en ese campo el valor &lt;strong&gt;INADDR_ANY&lt;/strong&gt;, 
      atenderemos a cualquier cliente. &lt;br /&gt;

    La llamada a &lt;strong&gt;bind()&lt;/strong&gt; lleva tres parámetros: &lt;br /&gt;

    &lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Descriptor del socket&lt;/strong&gt; que hemos abierto&lt;br /&gt;
      &lt;/li&gt;
&lt;li&gt; Puntero a la &lt;strong&gt;estructura Direccion&lt;/strong&gt; con los datos indicados 
        anteriormente. La estructura admitida por este parámetro es general 
        y valida para cualquier tipo de socket y es del tipo &lt;strong&gt;struct sockaddr&lt;/strong&gt;. 
        Cada socket concreto lleva su propia estructura. Los &lt;strong&gt;AF_INET&lt;/strong&gt; 
        como este caso llevan &lt;strong&gt;struct sockaddr_in&lt;/strong&gt;, los &lt;strong&gt;AF_UNIX&lt;/strong&gt; 
        llevan la estructura &lt;strong&gt;struct sockaddr_un&lt;/strong&gt;. Por eso, a la 
        hora de pasar el parámetro, debemos hacer un &quot;cast&quot; al tipo &lt;strong&gt;struct 
        sockaddr&lt;/strong&gt;. La operación cast es un pequeño truco 
        que admite C. Cuando tenemos un dato de un determinado tipo, por ejemplo, 
        un entero int, es posible convertirlo a otro tipo que nos venga mejor 
        poniendo el nuevo tipo deseado entre paréntesis y detrás 
        la variable del tipo no deseado. Por ejemplo, para convertir de entero 
        a flotante:&lt;br /&gt;
        &lt;br /&gt;
        &lt;div class=&quot;codigo&quot;&gt;
Variable_Flotante = (float)Variable_Entera;&lt;/div&gt;
&lt;br /&gt;
        Esto es válido siempre y cuando los dos tipos tengan algún 
        tipo de relación y sea posible convertir uno en el otro. En nuestro 
        ejemplo las estructuras &lt;strong&gt;sockaddr_in&lt;/strong&gt; y &lt;strong&gt;sockaddr_un&lt;/strong&gt; 
        pueden convertirse sin problemas al tipo &lt;strong&gt;sockaddr&lt;/strong&gt;. &lt;br /&gt;
      &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Longitud&lt;/strong&gt; de la estructura Direccion.&lt;/li&gt;
&lt;/ul&gt;
La función devuelve -1 en caso de error. 
    Una vez hecho esto, podemos decir al sistema que empiece a atender las 
      llamadas de los clientes por medio de la función &lt;strong&gt;listen()&lt;/strong&gt; 
    &lt;br /&gt;

    &lt;div class=&quot;codigo&quot;&gt;
if (listen (Descriptor, 1) == -1) &lt;br /&gt;
      { &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; printf (&quot;Error\n&quot;); &lt;br /&gt;
      } &lt;/div&gt;
La función &lt;strong&gt;listen()&lt;/strong&gt; admite dos parámetros, 
      afortunadamente sencillos: &lt;br /&gt;

    &lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Descriptor del socket&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Número máximo de clientes encolados&lt;/strong&gt;. 
        Supongamos que recibimos la conexión de un primer cliente y le 
        atendemos. Mientras lo estamos haciendo, se conecta un segundo cliente, 
        al que no atendemos puesto que estamos ejecutando el código necesario 
        para atender al primero. Mientras sucede todo esto, llega un tercer cliente 
        que también se conecta. Estamos atendiendo al primero y tenemos 
        dos en la &quot;lista de espera&quot;. El segundo parámetro de &lt;strong&gt;listen()&lt;/strong&gt; 
        indica cuántos clientes máximo podemos tener en la lista 
        de espera. Cuando un cliente entra en la lista de espera, su llamada a 
        &lt;strong&gt;connect()&lt;/strong&gt; queda bloqueada hasta que se le atiende. Si 
        la lista de espera está llena, el nuevo cliente que llama a &lt;strong&gt;connect()&lt;/strong&gt; 
        recibirá un error de dicha función. Algo así como 
        un &quot;vuelva usted mañana&quot;.&lt;/li&gt;
&lt;/ul&gt;
La función &lt;strong&gt;listen()&lt;/strong&gt; devuelve –1 en caso de error. 
    Con todo esto ya sólo queda recoger los clientes de la lista de 
      espera por medio de la función &lt;strong&gt;accept()&lt;/strong&gt;. Si no hay 
      ningún cliente, la llamada quedará bloqueada hasta que lo 
      haya. Esta función devuelve un &lt;strong&gt;descriptor de fichero&lt;/strong&gt; 
      que es el que se tiene que usar para &quot;hablar&quot; con el cliente. El descriptor 
      anterior corresponde al servicio y sólo sirve para encolar a los 
      clientes. Digamos que el primer descriptor es el aparato de teléfono 
      de la telefonista de la empresa y el segundo descriptor es el aparato de 
      teléfono del que está atendiendo al cliente. &lt;br /&gt;

    &lt;div class=&quot;codigo&quot;&gt;
struct sockaddr Cliente; &lt;br /&gt;
      int Descriptor_Cliente; &lt;br /&gt;
      int Longitud_Cliente; &lt;br /&gt;
    &lt;br /&gt;Descriptor_Cliente = accept (Descriptor, 
      &amp;amp;Cliente, &amp;amp;Longitud_Cliente); &lt;br /&gt;
      if (Descriptor_Cliente == -1) &lt;br /&gt;
      { &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; printf (&quot;Error\n&quot;); &lt;br /&gt;
      } &lt;/div&gt;
La función &lt;strong&gt;accept()&lt;/strong&gt; es otra que lleva un parámetro 
      complejo, pero que no debemos rellenar. Los parámetros que admite 
      son &lt;br /&gt;

    &lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Descriptor del socket&lt;/strong&gt; abierto.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Puntero a estructura sockaddr&lt;/strong&gt;. A la vuelta de la función, 
        esta estructura contendrá la dirección y demás datos 
        del ordenador cliente que se ha conectado a nosotros.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Puntero a un entero&lt;/strong&gt;, en el que se nos devolverá 
        la longitud útil del campo anterior.&lt;/li&gt;
&lt;/ul&gt;
La función devuelve un –1 en caso de error. 
    Si todo ha sido correcto, ya podemos &quot;hablar&quot; con el cliente. Para ello 
      se utilizan las funciones &lt;strong&gt;read()&lt;/strong&gt; y &lt;strong&gt;write()&lt;/strong&gt; 
      de forma similar a como se haría con un fichero. Supongamos que sabemos 
      que al conectarse un cliente, nos va a mandar una cadena de cinco caracteres. 
      Para leerla sería &lt;br /&gt;

    &lt;div class=&quot;codigo&quot;&gt;
int Leido = 0;&lt;span class=&quot;comentario_codigo&quot;&gt;/* Número 
      de caracteres leídos hasta el momento */&lt;/span&gt; &lt;br /&gt;
      int Aux = 0; &lt;span class=&quot;comentario_codigo&quot;&gt;/* Guardaremos el valor devuelto 
      por read() */&lt;/span&gt; &lt;br /&gt;
      int Longitud = 5; &lt;span class=&quot;comentario_codigo&quot;&gt;/* Número de caracteres 
      a leer */ &lt;/span&gt;&lt;br /&gt;
      char Datos[5]; &lt;span class=&quot;comentario_codigo&quot;&gt;/* Buffer donde guardaremos 
      los caracteres */&lt;/span&gt; &lt;br /&gt;
    &lt;br /&gt;
      &lt;span class=&quot;comentario_codigo&quot;&gt; /* Bucle hasta que hayamos leído 
      todos los caracteres que &lt;br /&gt;
      estamos esperando */ &lt;/span&gt;&lt;br /&gt;
      while (Leido &amp;lt; Longitud) &lt;br /&gt;
      { &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=&quot;comentario_codigo&quot;&gt;/* Se leen los caracteres 
      */&lt;/span&gt; &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; Aux = read (Descriptor, Datos + Leido, Longitud - Leido); 
   &lt;br /&gt;
    &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=&quot;comentario_codigo&quot;&gt;/* Si hemos conseguido 
      leer algún carácter */&lt;/span&gt; &lt;br /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Aux &amp;gt; 0) 
      &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=&quot;comentario_codigo&quot;&gt;/* 
      Se incrementa el número de caracteres leídos */&lt;/span&gt; &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
      Leido = Leido + Aux; &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=&quot;comentario_codigo&quot;&gt;/* 
      Si no se ha leído ningún carácter, se comprueba &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;comentario_codigo&quot;&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; la condición de socket 
      cerrado */ &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
      if (Aux == 0) &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
      { &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
      printf (&quot;Socket cerrado\n&quot;); &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
      } &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
      else &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=&quot;comentario_codigo&quot;&gt;/* 
      y la condición de error */&lt;/span&gt; &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
      if (Aux == -1) &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
      { &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
      printf (&quot;Error\n&quot;); &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
      } &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/span&gt;&lt;br style=&quot;color: #3333ff;&quot; /&gt;
      &lt;span&gt;} &lt;/span&gt;&lt;/div&gt;
Parece un poco complicado. A ver si somos capaces de aclararlo. La función 
      &lt;strong&gt;read()&lt;/strong&gt; admite como parámetros &lt;br /&gt;

    &lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Descriptor del fichero&lt;/strong&gt; / socket del que se quiere 
        leer&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Puntero a char &lt;/strong&gt;donde se almacenarán los datos 
        leídos&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Número de caracteres&lt;/strong&gt; que se quieren leer.&lt;/li&gt;
&lt;/ul&gt;
La función devuelve –1 si ha habido error, 0 si el socket se 
    ha cerrado o el fichero ha llegado a fin de fichero, o bien el número 
    de caracteres si se ha conseguido leer alguno. En el caso de socket, si no 
    hay errores y el socket sigue abierto y no hay caracteres para leer (no los 
    han enviado desde el otro extremo), la llamada queda bloqueada. 
    En el caso de leer de socket, tenemos un pequeño problema añadido 
      y es que se leen los caracteres disponibles y se vuelve. Si pedimos 5 caracteres, 
      entra dentro de lo posible que &lt;strong&gt;read()&lt;/strong&gt; lea 3 caracteres 
      y vuelva, sin dar error, pero sin leer todos los que hemos pedido. Por ese 
      motivo, al leer de socket es casi obligatorio (totalmente obligatorio si 
      queremos transmitir muchos caracteres de un solo golpe) el&lt;strong&gt; leer 
      con un bucle&lt;/strong&gt;, comprobando cada vez cuantos caracteres se han leído 
      y cuantos faltan. &lt;br /&gt;

    Por este motivo, &lt;strong&gt;read()&lt;/strong&gt; va dentro de un &lt;strong&gt;while()&lt;/strong&gt; 
      en el que se mira si el total de caracteres leídos es menor que el 
      número de caracteres que queremos leer. La lectura del &lt;strong&gt;read()&lt;/strong&gt; 
      debe además pasar como parámetro cada vez la posición 
      dentro del buffer de lectura en la que queremos situar los caracteres &lt;strong&gt;(Datos 
      + Leido )&lt;/strong&gt; y la longitud de caracteres a leer, &lt;strong&gt;(Longitud 
      - Leido )&lt;/strong&gt; que también cambia según se va leyendo. 
    &lt;br /&gt;

    En cuanto a escribir caracteres, la función &lt;strong&gt;write()&lt;/strong&gt; 
      admite los mismos parámetros, con la excepción de que el &lt;strong&gt;buffer&lt;/strong&gt; 
      de datos debe estar previamente relleno con la información que queremos 
      enviar. Tiene el mismo problema, que escribe lo que puede y vuelve, pudiendo 
      no haber escrito toda la información, por lo que hay que hacer un 
      trozo de código similar. &lt;br /&gt;

    &lt;div class=&quot;codigo&quot;&gt;
int Escrito = 0; &lt;span class=&quot;comentario_codigo&quot;&gt;/* Núm. 
      de caracteres que ya se han escrito */&lt;/span&gt; &lt;br /&gt;
      int Aux = 0; &lt;span class=&quot;comentario_codigo&quot;&gt;/* Número de caracteres 
      escritos en cada pasada */&lt;/span&gt; &lt;br /&gt;
      int Longitud = 5; &lt;span class=&quot;comentario_codigo&quot;&gt;/* Total de caracteres 
      a escribir */&lt;/span&gt; &lt;br /&gt;
      char Datos[] = &quot;Hola&quot;; &lt;span class=&quot;comentario_codigo&quot;&gt;/* El 5º carácter 
      es el \0 del final */&lt;/span&gt; &lt;br /&gt;
    &lt;br /&gt;
      &lt;span class=&quot;comentario_codigo&quot;&gt; /* Bucle mientras no se hayan escrito todos 
      los caracteres &lt;br /&gt;
      deseados */ &lt;/span&gt;&lt;br /&gt;
      while (Escrito &amp;lt; Longitud) &lt;br /&gt;
      { &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=&quot;comentario_codigo&quot;&gt;/* Se escriben los caracteres 
      */ &lt;/span&gt;&lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; Aux = write (Descriptor, Datos + Escrito, Longitud - 
      Escrito); &lt;br /&gt;
    &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=&quot;comentario_codigo&quot;&gt;/* Si hemos conseguido 
      escribir algún carácter */ &lt;/span&gt;&lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; if (Aux &amp;gt; 0) &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=&quot;comentario_codigo&quot;&gt;/* 
      Incrementamos el número de caracteres escritos */&lt;/span&gt; &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Escrito = Escrito + Aux; &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; else &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=&quot;comentario_codigo&quot;&gt;/* 
      Si no hemos podido escribir caracteres, &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; comprobamos la condición 
      de socket cerrado */&lt;/span&gt; &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Aux == 0) &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf 
      (&quot;Socket cerrado\n&quot;); &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class=&quot;comentario_codigo&quot;&gt;/* 
      y la condición de error */&lt;/span&gt; &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Aux == -1) &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf 
      (&quot;Error\n&quot;); &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;
      } &lt;/div&gt;
En un programa más serio, ni el cliente ni el servidor saben a priori 
      qué es lo que tienen que leer. Normalmente hay una serie de &lt;a href=&quot;http://www.chuidiang.com/clinux/sockets/mensajes.php&quot;&gt;mensajes&lt;/a&gt; 
      que los dos conocen precedidos de una &quot;&lt;strong&gt;cabecera&lt;/strong&gt;&quot;, en la 
      que suelen ir campos del estilo &quot;&lt;strong&gt;Identificador&lt;/strong&gt; de mensaje&quot; 
      y &quot;&lt;strong&gt;Longitud&lt;/strong&gt; del mensaje&quot;. De esta forma, primero se leen 
      estos dos campos y sabiendo qué mensaje va a llegar y su longitud, 
      se procede a leerlo. A la hora de escribir, primero se manda la cabecera 
      diciendo qué mensaje se va a mandar y qué longitud tiene, 
      y luego se manda el mensaje en sí. &lt;br /&gt;

    Una vez que se han leído / enviado todos los datos necesarios, se 
      procede a &lt;strong&gt;cerrar el socket&lt;/strong&gt;. Para ello se llama a la función 
      &lt;strong&gt;close()&lt;/strong&gt;, que admite como parámetro el descriptor 
      del socket que se quiere cerrar. &lt;br /&gt;

    &lt;div class=&quot;codigo&quot;&gt;
close (Descriptor_Cliente); &lt;/div&gt;
Normalmente el servidor cierra el descriptor del cliente (Descriptor_Cliente), 
      no el del socket (Descriptor), ya que este se suele dejar abierto para volver 
      a realizar una llamada a &lt;strong&gt;accept()&lt;/strong&gt; y sacar al siguiente 
      cliente de la cola. Es como si una vez que un amable señor de una 
      empresa nos ha atendido le dice a la telefonista que no atienda más 
      el teléfono. Esas cosas sólo las hacen los jefes. &lt;br /&gt;

    &lt;h4&gt;
&lt;br /&gt;
      &lt;a href=&quot;&quot; id=&quot;detallescliente&quot; name=&quot;detallescliente&quot;&gt;&lt;/a&gt;DETALLES 
      DEL CLIENTE&lt;/h4&gt;
Puesto que la escritura / lectura y cierre de sockets es idéntica 
      a la del servidor, únicamente contaremos la apertura del socket que, 
      cómo no, es más compleja que la del servidor, puesto que además 
      del &lt;strong&gt;número de servicio&lt;/strong&gt;, debe obtener la &lt;strong&gt;dirección 
      IP&lt;/strong&gt; del servidor. &lt;br /&gt;

    En primer lugar, como en el servidor, obtenemos el número del servicio. 
    &lt;br /&gt;

    &lt;div class=&quot;codigo&quot;&gt;
struct servent *Puerto; &lt;br /&gt;
      Puerto = getservbyname (&quot;Nombre_Servicio&quot;, &quot;tcp&quot;); &lt;br /&gt;
    &lt;br /&gt;if (Puerto == NULL) &lt;br /&gt;
      { &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; printf (&quot;Error\n&quot;); &lt;br /&gt;
      } &lt;/div&gt;
Después obtenemos la dirección &lt;strong&gt;IP&lt;/strong&gt; del servidor. 
      El parámetro que hay que pasar es una cadena de caracteres con el 
      &lt;strong&gt;nombre del servidor&lt;/strong&gt;, tal cual lo pusimos en el fichero 
      /etc/hosts. Devuelve los datos del servidor en una estructura hostent. &lt;br /&gt;

    &lt;div class=&quot;codigo&quot;&gt;
struct hostent *Host; &lt;br /&gt;
    &lt;br /&gt;Host = gethostbyname (&quot;Nombre_Servidor&quot;); &lt;br /&gt;
      if (Host == NULL) &lt;br /&gt;
      { &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; printf (&quot;Error\n&quot;); &lt;br /&gt;
      } &lt;/div&gt;
Una vez que tenemos todos los datos necesarios, abrimos el socket igual 
      que en el servidor. &lt;br /&gt;

    &lt;div class=&quot;codigo&quot;&gt;
Descriptor = socket (AF_INET, SOCK_STREAM, 0); &lt;br /&gt;
    &lt;br /&gt;if (Descriptor == -1) &lt;br /&gt;
      { &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; printf (&quot;Error\n&quot;); &lt;br /&gt;
      } &lt;/div&gt;
Ya tenemos todo lo necesario para solicitar conexión con el servidor. 
      El parámetro de &lt;strong&gt;connect()&lt;/strong&gt; ya es conocido y sólo 
      tenemos que rellenarlo, igual que en &lt;strong&gt;bind()&lt;/strong&gt; del servidor. 
    &lt;br /&gt;

    &lt;div class=&quot;codigo&quot;&gt;
struct sockaddr_in Direccion; &lt;br /&gt;
      Direccion.sin_family = AF_INET; &lt;br /&gt;
      Direccion.sin_addr.s_addr = ((structin_addr*)(Host-&amp;gt;h_addr))-&amp;gt;s_addr; 
      &lt;br /&gt;
      Direccion.sin_port = Puerto-&amp;gt;s_port; &lt;br /&gt;
    &lt;br /&gt;if (connect (Descriptor, (struct sockaddr *)&amp;amp;Direccion,sizeof 
      (Direccion)) == -1) &lt;br /&gt;
      { &lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; printf (&quot;Error\n&quot;); &lt;br /&gt;
      } &lt;/div&gt;
La única novedad es que la dirección del servidor se coloca 
      en &lt;strong&gt;Direccion.sin_addr.s_addr&lt;/strong&gt; y no como pusimos antes, &lt;strong&gt;INADDR_ANY&lt;/strong&gt;. 
      Dicha dirección la tenemos dentro de la estructura obtenida con &lt;strong&gt;gethostbyname()&lt;/strong&gt;, 
      en el campo &lt;strong&gt;((structin_addr*)(Host-&amp;gt;h_addr))-&amp;gt;s_addr&lt;/strong&gt;. 
      ¡Vaya por Dios!, ¡Menudo campo!. Nos pasa como dijimos antes, 
      los tipos no son exactamente los mismos y tenemos estructuras anidadas en 
      estructuras, con lo que la sintaxis queda de esa forma tan horrible. La 
      explicación es la siguiente: &lt;br /&gt;

    La estructura &lt;strong&gt;Host&lt;/strong&gt; tiene un campo &lt;strong&gt;h_addr&lt;/strong&gt;, 
      de ahí la parte &lt;strong&gt;Host-&amp;gt;h_addr&lt;/strong&gt;. &lt;br /&gt;

    Este campo no es del tipo deseado, así que se convierte con un cast 
      a &lt;strong&gt;struct in_addr&lt;/strong&gt;, de ahí lo de &lt;strong&gt;(struct in_addr*)(Host-&amp;gt;h_addr)&lt;/strong&gt;. 
    &lt;br /&gt;

    Bueno, pues todo esto es a su vez una estructura, de la que nos interesa 
      el campo &lt;strong&gt;s_addr&lt;/strong&gt;, así que metemos todo entre paréntesis, 
      cogemos el campo y nos queda lo que tenemos puesto en el código &lt;strong&gt;((structin_addr*)(Host-&amp;gt;h_addr))-&amp;gt;s_addr&lt;/strong&gt; 
    &lt;br /&gt;

    El resto es exactamente igual que en el servidor. &lt;br /&gt;

    &lt;h4&gt;
 &lt;a href=&quot;&quot; id=&quot;consideraciones&quot; name=&quot;consideraciones&quot; style=&quot;text-decoration: underline;&quot;&gt;&lt;/a&gt;ALGUNAS 
      CONSIDERACIONES&lt;/h4&gt;
&lt;h5&gt;
Puede haber variaciones con otro tipo de sockets. &lt;/h5&gt;
El &lt;a href=&quot;http://www.chuidiang.com/clinux/sockets/Fuentes.zip&quot;&gt;ejemplo&lt;/a&gt; aquí expuesto funciona correctamente, 
      pero si se quieren hacer otras cosas un poco más serias hay que tener 
      en cuenta varios puntos que indicamos aquí por encima. &lt;br /&gt;

    En primer lugar el ejemplo es con &lt;strong&gt;sockets orientados a conexión&lt;/strong&gt; 
      y de tipo &lt;strong&gt;AF_INET&lt;/strong&gt; ( para que pueda funcionar con servidor 
      en un ordenador y cliente en otro). Si cambiamos de tipo de socket o de 
      conexión, la idea básica es la misma, pero la sintaxis del 
      código cambia ligeramente. Antes de realizar dicho cambio, conviene 
      saber qué cosas hay que cambiar en el código. Un ejemplo claro, 
      si usamos &lt;strong&gt;sockets no orientados a conexión&lt;/strong&gt;, sobra 
      la llamada a &lt;strong&gt;connect()&lt;/strong&gt; que hace el cliente y la de &lt;strong&gt;accept()&lt;/strong&gt; 
      que hace el servidor, pero en su lugar el cliente debe hacer una llamada 
      a &lt;strong&gt;bind()&lt;/strong&gt;. Puedes ver aquí &lt;a href=&quot;http://www.chuidiang.com/clinux/sockets/udp/udp.php&quot;&gt;un 
      ejemplo de socket &lt;strong&gt;udp&lt;/strong&gt;&lt;/a&gt;.&lt;br /&gt;

    Si usamos sockets &lt;strong&gt;AF_UNIX&lt;/strong&gt;, sobra pedir la &lt;strong&gt;dirección 
      IP&lt;/strong&gt; del servidor, ya que es el mismo ordenador en el que corren 
      ambos programas. &lt;br /&gt;

    &lt;h5&gt;
Organización de los enteros. &lt;/h5&gt;
En el mundo de los ordenadores, están los micros de intel (y los 
      que los emulan) y los demás. La diferencia, entre otras muchas,&amp;nbsp; 
      es que organizan los enteros de forma distinta; uno pone antes el byte más 
      significativo del entero y el otro lo pone al final. Si conectamos dos ordenadores 
      con sockets, una de las informaciones que se transmiten en la conexión 
      es un entero con el número de servicio. ¡Ya la hemos liado! 
      hay micros que no se entienden entre sí. Para evitar este tipo de 
      problemas están la funciones &lt;strong&gt;htons()&lt;/strong&gt;, &lt;strong&gt;htonl()&lt;/strong&gt; 
      y similares. Esta función convierte los enteros a un formato &quot;standard&quot; 
      de red, con lo que se garantiza que nos podemos entender con cualquier entero. 
      Eso implica que algunos de los campos de las estructuras que hemos rellenado 
      arriba, debemos aplicarles esta función antes de realizar la conexión. 
      Si enviamos después enteros con &lt;strong&gt;write()&lt;/strong&gt; o los leemos 
      con &lt;strong&gt;read()&lt;/strong&gt;, debemos convertirlos y desconvertirlos a &lt;strong&gt;formato 
      red&lt;/strong&gt;. &lt;br /&gt;

    Puedes ver un ejemplo de todo esto al conectar un &lt;a href=&quot;http://www.chuidiang.com/java/sockets/cpp_java/cpp_java.php&quot; target=&quot;_top&quot;&gt;socket en Java con uno en C&lt;/a&gt;. 
      Aunque ambos corran en el mismo ordenador, java tiene su propia máquina 
      virtual, por lo que es como si corriera en su propio microprocesados, distinto 
      de los pentium. &lt;br /&gt;

    &lt;h5&gt;
Atención al cliente &lt;/h5&gt;
Una técnica habitual en el servidor es que cree nuevos &lt;a href=&quot;http://www.chuidiang.com/clinux/procesos/procesoshilos.php&quot; target=&quot;_top&quot;&gt;procesos (o hilos)&lt;/a&gt; para 
      cada cliente. Puedes echar un ojo a la función &lt;strong&gt;fork()&lt;/strong&gt;. 
      &lt;a href=&quot;http://www.chuidiang.com/clinux/sockets/socketselect.php&quot; target=&quot;_top&quot;&gt;Si no se quieren crear procesos&lt;/a&gt;, 
      se puede usar la función &lt;strong&gt;select()&lt;/strong&gt;. A esta función 
      se le dicen todos los sockets que estamos atendiendo y cuando la llamemos, 
      nos quedamos bloqueados hasta que en alguno de ellos haya &quot;actividad&quot;. Esto 
      nos evita estar en un bucle mirando todos los sockets clientes uno por uno 
      para ver si alguno quiere algo. &lt;br /&gt;

    Se suelen crear procesos con &lt;strong&gt;fork()&lt;/strong&gt; cuando el servidor 
      no es capaz de atender todas las peticiones de los clientes a suficiente 
      velocidad. Al tener un proceso dedicado a cada cliente, se puede atender 
      a varios &quot;simultaneamente&quot;. Se suele usar &lt;strong&gt;select()&lt;/strong&gt; cuando 
      podemos atender a los clientes lo suficientemente rápido como para 
      hacerlo de uno en uno, sin hacer esperar demasiado a nadie. &lt;br /&gt;

    Poniendo un ejemplo, si en una ventanilla de un banco &quot;gotean&quot; los clientes 
      y se despacha rápido a cada uno, basta con una única ventanilla 
      y una persona en ella que &quot;duerma disimuladamente&quot; mientras llega 
      un cliente. Si los clientes llegan a mogollón y se tarda en atender 
      a cada uno de ellos, es mejor que haya muchas ventanillas, lo ideal, una 
      por cada cliente. &lt;br /&gt;

    
    &lt;h4&gt;
 &lt;a href=&quot;&quot; id=&quot;bibliografia&quot; name=&quot;bibliografia&quot;&gt;&lt;/a&gt;BIBLIOGRAFÍA
    &lt;/h4&gt;
Un excelente libro para programación avanzada en C sobre entorno 
      Unix es &quot;&lt;a href=&quot;http://www.chuidiang.com/varios/Libros/libros.php&quot;&gt;UNIX, Programación 
      avanzada&lt;/a&gt;&quot; de Fco. Manuel Márquez García, editorial ra-ma. 
    &lt;br /&gt;

    Tienes una guia bastante simple, pero más detallada de sockets en 
      &lt;a href=&quot;http://www.arrakis.es/%7Edmrq/beej/index.html&quot; target=&quot;_top&quot;&gt;http://www.arrakis.es/~dmrq/beej/index.html&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/7754027225481539392/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/programacion-de-sockets-en-c-de.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/7754027225481539392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/7754027225481539392'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/programacion-de-sockets-en-c-de.html' title='Programación de sockets en C de Unix/Linux'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-3669553093508567170</id><published>2012-07-12T10:53:00.003-07:00</published><updated>2012-07-12T11:25:37.653-07:00</updated><title type='text'>Solución con Menus Graficos</title><content type='html'>Os dejo aqui un enlace para la descarga de la solución usando menus graficos:&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;div style=&quot;display: block; text-align: left;&quot;&gt;
&lt;a href=&quot;https://sites.google.com/site/fpoprogramadorsistemas/solucion-con-menus-graficos/examen%20final%20del%20curso%20de%20programador%20de%20sistemas.png?attredirects=0&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;261&quot; src=&quot;https://sites.google.com/site/fpoprogramadorsistemas/_/rsrc/1305974639840/solucion-con-menus-graficos/examen%20final%20del%20curso%20de%20programador%20de%20sistemas.png?height=261&amp;amp;width=400&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;Nota:&lt;/b&gt;&lt;br /&gt;
He echo una pequeña mejora con el comando paste, para añadir y mezclar 
distinto tipo de información en un mismo menu ( permisos y nombre de 
archivos)&lt;br /&gt;
&lt;br /&gt;
(fuente: &lt;a href=&quot;http://html.rincondelvago.com/unix_9.html&quot; rel=&quot;nofollow&quot;&gt;http://html.rincondelvago.com/unix_9.html&lt;/a&gt; )&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Nota Importante:&lt;/b&gt; term.h&lt;br /&gt;
Si al compilar conio.h, os da un error en la linea: &lt;br /&gt;
#include &amp;lt;term.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tendreis que instalar desde synaptic la siguiente libreria:&lt;br /&gt;
&lt;b&gt;libncurses5-dev&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
(fuente: &lt;a href=&quot;http://www.ubuntu-es.org/node/25843&quot; rel=&quot;nofollow&quot;&gt;http://www.ubuntu-es.org/node/25843&lt;/a&gt; )</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/3669553093508567170/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/solucion-con-menus-graficos.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/3669553093508567170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/3669553093508567170'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/solucion-con-menus-graficos.html' title='Solución con Menus Graficos'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-5019812318081169685</id><published>2012-07-12T10:53:00.001-07:00</published><updated>2012-07-12T11:25:10.646-07:00</updated><title type='text'>Programa Final</title><content type='html'>Realizar un programa que desempeñe las funciones de un administrador de archivos.&lt;br /&gt;
&lt;br /&gt;
Debe poder gestionar tanto ficheros como directorios y puntos de montaje&lt;br /&gt;
&lt;br /&gt;
Directorios:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; crear&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; borrar&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; renombrar y mover&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; enlazar&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mostrar contenido&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; desplazarse por ellos&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; gestion de permisos&lt;br /&gt;
&lt;br /&gt;
Ficheros &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; copiar&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; borrar&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; renombrar/mover&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ver contenido (Texto y Hexadecimal)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Gestion Permisos&lt;br /&gt;
&lt;br /&gt;
Puntos de montaje: manejar las descripciones conetenidas en el archivo /etc/fstab&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Montar sistema de archivos&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Desmontar sistemas de archivos</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/5019812318081169685/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/programa-final.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/5019812318081169685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/5019812318081169685'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/programa-final.html' title='Programa Final'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-4046445223671199757</id><published>2012-07-12T10:52:00.003-07:00</published><updated>2012-07-12T10:52:38.382-07:00</updated><title type='text'>solucion 7: alumno antonio</title><content type='html'>#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;&lt;br /&gt;int main(int argc, char **argv) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char Npid[10];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char hazlo[20];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char proceso[20];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char op = &#39; &#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;void menu();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int pedirNum();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;while (op != 0) {&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;//Mientras no se elija la opcion de salida,me muestra el menu y la 
función pedirNum.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;system(&quot;clear&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;menu();&lt;br /&gt;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;op=pedirNum();&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
//Ejecutamos la función pedirNum y lo que devuelve se lo asignamos a op.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;switch (op) {&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;//Tratamos los casos con %s para no tener problemas si el usuario 
uintroduce una letra en la selección en lugar de un número.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case &#39;1&#39;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;system(&quot;ps -Ao user,pid,comm,stat |grep -i $USER | grep -v 
mata&quot;);&amp;nbsp;&amp;nbsp; &amp;nbsp;//Me muestra los apartados que quiero y filtramos nuestro 
usuario y evitamos que aparezca nuestro programa.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;\nEscriba el PID del proceso que quiere matar: &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;scanf(&quot;%s&quot;, Npid);&lt;br /&gt;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;sprintf(hazlo, &quot;kill -9 %s&quot;, Npid);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;//Copiamos lo que leemos en Npid junto con el comando a ejecutar en la 
cadena (hazlo).&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;system(hazlo);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case &#39;2&#39;:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;system(&quot;ps -Ao user,pid,comm,stat |grep -i $USER | grep -v mata&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;\nEscriba el PID del proceso que quiere parar: &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;scanf(&quot;%s&quot;, Npid);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;sprintf(hazlo, &quot;kill -19 %s&quot;, Npid);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;system(hazlo);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case &#39;3&#39;:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;system(&quot;ps -Ao user,pid,comm,stat | grep T&quot;);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;//Mostramos los apartados que nos interesa y filtramos los que esten 
parados y podamos continuar.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;\nEscriba el PID del proceso que quiere continuar: &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;scanf(&quot;%s&quot;, Npid);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;sprintf(hazlo, &quot;kill -18 %s&quot;, Npid);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;system(hazlo);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case &#39;4&#39;:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;system(&quot;ps -Ao user,pid,comm,stat |grep -i $USER | grep -v mata&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;\nEscriba el PID del proceso que quiere terminar: &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;scanf(&quot;%s&quot;, Npid);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;sprintf(hazlo, &quot;kill -9 %s&quot;, Npid);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;system(hazlo);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case &#39;5&#39;:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;system(&quot;ps -Ao user,pid,comm,stat |grep -i $USER | grep -v mata&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;Escriba el nombre del proceso que quiere terminar: &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;scanf(&quot;%s&quot;, proceso);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;sprintf(hazlo, &quot;killall %s&quot;, proceso);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;system(hazlo);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case &#39;6&#39;:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;system(&quot;gnome-terminal -e top&quot;);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//Abrimos otra terminal y le pasamos el comando top.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case &#39;0&#39;:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;system(&quot;clear&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;Saliendo del programa...\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;exit(1);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;default:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;--OPCION INCORRECTA--&quot;);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//Si no es una opción correcta, nos muestra el mensaje.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Procedimiento menu.&lt;br /&gt;&lt;br /&gt;void menu() {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;\n\n-------MENU-------\n\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;1.Matar un proceso.\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;2.Para un proceso.\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;3.Continua un proceso.\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;4.Termina un proceso.\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;5.Matar procesos por su nombre.\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;6.Ver procesos por consumo.\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;0.Salir del programa.\n&quot;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Función Pedir Número.&lt;br /&gt;int pedirNum() {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char num = &#39; &#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;\nElija operación(0-6)&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;scanf(&quot;%s&quot;, &amp;amp;num);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return num;&lt;br /&gt;}</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/4046445223671199757/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/solucion-7-alumno-antonio.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/4046445223671199757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/4046445223671199757'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/solucion-7-alumno-antonio.html' title='solucion 7: alumno antonio'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-2744036359523223593</id><published>2012-07-12T10:52:00.001-07:00</published><updated>2012-07-12T10:52:02.101-07:00</updated><title type='text'>Solucion 7: alumno</title><content type='html'>#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;&lt;br /&gt;void rehacer_pantalla();&lt;br /&gt;void presentar_menu();&lt;br /&gt;void ejecutar_ps_completo();&lt;br /&gt;&lt;br /&gt;int buscaespacio1(char *texto);&lt;br /&gt;int buscaespacio2(int,char *texto);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;typedef struct{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int num;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int proceso;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char nombre[350];&lt;br /&gt;}linea_datos;&lt;br /&gt;&lt;br /&gt;linea_datos linea[500];// numero maximo de procesos a gestionar&lt;br /&gt;&lt;br /&gt;int main(int argc, char **argv) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int op = 1000;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char entrada_texto[10];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *comando[100];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pro;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rehacer_pantalla();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (op != 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; op = atoi(gets(entrada_texto));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; switch (op) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 1:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system(&quot;ps&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n&amp;nbsp;&amp;nbsp;&amp;nbsp; Pulse Enter \n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 2:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system(&quot;ps a&quot;);&lt;br /&gt;printf(&quot;\n&amp;nbsp;&amp;nbsp;&amp;nbsp; Pulse Enter \n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 3:&lt;br /&gt;system(&quot;ps u&quot;);&lt;br /&gt;printf(&quot;\n&amp;nbsp;&amp;nbsp;&amp;nbsp; Pulse Enter \n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&lt;br /&gt;case 4:&lt;br /&gt;system(&quot;ps x&quot;);&lt;br /&gt;printf(&quot;\n&amp;nbsp;&amp;nbsp;&amp;nbsp; Pulse Enter \n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&lt;br /&gt;case 5:&lt;br /&gt;system(&quot;ps f&quot;);&lt;br /&gt;printf(&quot;\n&amp;nbsp;&amp;nbsp;&amp;nbsp; Pulse Enter \n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;case 6:&lt;br /&gt;system(&quot;jobs&quot;);&lt;br /&gt;printf(&quot;\n&amp;nbsp;&amp;nbsp;&amp;nbsp; Pulse Enter \n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 7:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ejecutar_ps_completo();&lt;br /&gt;printf(&quot;\n&amp;nbsp;&amp;nbsp;&amp;nbsp; Pulse Enter \n&quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 8:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\nNº del proceso (a parar) &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pro = atoi(gets(entrada_texto));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(comando,&quot;kill -19 %d&quot;,pro);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system(comando);&lt;br /&gt;printf(&quot;\n&amp;nbsp;&amp;nbsp;&amp;nbsp; Pulse Enter \n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 9:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\nNº del proceso (a continuar): &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pro = atoi(gets(entrada_texto));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(comando,&quot;kill -18 %d&quot;,pro);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system(comando);&lt;br /&gt;printf(&quot;\n&amp;nbsp;&amp;nbsp;&amp;nbsp; Pulse Enter \n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 10:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\nNº del proceso (a terminar): &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pro = atoi(gets(entrada_texto));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(comando,&quot;kill 15 %d&quot;,pro);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system(comando);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n&amp;nbsp;&amp;nbsp;&amp;nbsp; Pulse Enter \n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 11:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\nNº del proceso (a matar): &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pro = atoi(gets(entrada_texto));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(comando,&quot;kill 9 %d&quot;,pro);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system(comando) ;&lt;br /&gt;&amp;nbsp;&amp;nbsp; printf(&quot;\n&amp;nbsp;&amp;nbsp;&amp;nbsp; Pulse Enter \n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case -1:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; op=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; default:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; rehacer_pantalla();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; op=1020;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void rehacer_pantalla(muestra) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int resp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; resp = system(&quot;clear&quot;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; presentar_menu();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void presentar_menu() {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[47m\033[1;35m\033[2;0H&amp;nbsp;&amp;nbsp;&amp;nbsp; Menu: MATA&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; \033[0m\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[3;0H-1) Salir del programa\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[4;0H 1) Muestra los procesos del terminal\n &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[5;0H 2) Muestra los procesos de todos los usuarios del terminal\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[6;0H 3) Identifica el usuario que ha puesto en marcha ese proceso y cuando se inicio ese proceso\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[7;0H 4) Muestra los procesos que no dependen de un terminal&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[8;0H 5) Rastrear que proceso es el padre de que proceso (forma arbol)&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[9;0H 6) Muestra trabajos en 2º plano&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[10;0H 7) Todos los procesos del ordenador, mostrando usuario y en forma de arbol&quot;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[11;0H 8) Parar un proceso&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[12;0H 9) Continuar un proceso&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[13;0H10) Terminar un proceso&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[14;0H11) Matar un proceso&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[15;0HNúmero de la opción:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[15;21H&quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // para que se ponga en la misma linea del nº de opcion&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void ejecutar_ps_completo(){&lt;br /&gt;&amp;nbsp; int c = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *pf;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char texto[5455];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *p;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char proceso[100];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *lista_proceso[1000] ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int ac=0;// &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pos_espacio1=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pos_espacio2=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int b=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = texto;&lt;br /&gt;&lt;br /&gt;// obtengo los datos de la linea de procesos&lt;br /&gt;&amp;nbsp;&amp;nbsp; pf = popen(&quot;ps a u x f&quot;, &quot;r&quot;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fgets(texto,5450, pf);&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* no me funciona !!!!!!&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!feof(pf)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fgets(texto, 5450, pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;//printf(&quot;%s \n&quot;,texto);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // analizo linea....&lt;br /&gt;//sprintf(linea2,&quot;%3d: %s&quot;, c, texto);&lt;br /&gt;linea[c].num=c;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// buscar el primer &quot; &quot;&amp;nbsp; &lt;br /&gt;pos_espacio1=buscaespacio1(texto);&lt;br /&gt;pos_espacio2=buscaespacio2(pos_espacio1,texto);&lt;br /&gt;&lt;br /&gt;//printf(&quot;%3d , %3d \n %s \n&quot;,pos_espacio1,pos_espacio2,texto);&lt;br /&gt;&lt;br /&gt;// asignar el trozo que hemos seleccionado&lt;br /&gt;b=-1;&lt;br /&gt;ac=pos_espacio1-1;&lt;br /&gt;while (ac&amp;lt;pos_espacio2){&lt;br /&gt;b++;&lt;br /&gt;ac++;&lt;br /&gt;proceso[b]=texto[ac];&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;proceso[b+1]=&#39;\0&#39;;&lt;br /&gt;&lt;br /&gt;//printf(&quot;%3d , %3d, proceso: %s \n %s \n&quot;,pos_espacio1,pos_espacio2,proceso,texto);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;strcpy(lista_proceso[linea[c].num],proceso);&lt;br /&gt;&lt;br /&gt;//printf(&quot;%3d %s \n&quot;,linea[c].num,proceso);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;pclose(pf);&lt;br /&gt;&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// escribo en pantalla los procesos&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pf = popen(&quot;ps a u x f&quot;, &quot;r&quot;);&lt;br /&gt;c=-1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fgets(texto, 350, pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;printf(&quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %s&quot;, texto); // dibuja rotulo&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!feof(pf)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fgets(texto, 350, pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;printf(&quot;%3d: %s&quot;,c, texto);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;pclose(pf);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int buscaespacio1(char *texto){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int a=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int paso1=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (a!=1){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (texto[c]==&#39; &#39;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; paso1=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (paso1==1 &amp;amp;&amp;amp; texto[c]!=&#39; &#39;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return c;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;return 0;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int buscaespacio2(int inicio,char *texto){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int a=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int paso1=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c=inicio;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (a!=1){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (texto[c]==&#39; &#39;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; paso1=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return c;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/2744036359523223593/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/solucion-7-alumno.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/2744036359523223593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/2744036359523223593'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/solucion-7-alumno.html' title='Solucion 7: alumno'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-8285282519174139006</id><published>2012-07-12T10:51:00.001-07:00</published><updated>2012-07-12T10:51:26.950-07:00</updated><title type='text'>Examen 7: Crear el comando &quot;mata&quot;</title><content type='html'>El programa debe permitir gestionar los procesos en ejecución del usuario, dando la posibilidad de finalizar alguno de ellos.&lt;br /&gt;&lt;br /&gt;Opcional: Impedir que el programa se mate a si mismo.</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/8285282519174139006/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-7-crear-el-comando-mata.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/8285282519174139006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/8285282519174139006'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-7-crear-el-comando-mata.html' title='Examen 7: Crear el comando &quot;mata&quot;'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-1649332327519139648</id><published>2012-07-12T10:50:00.003-07:00</published><updated>2012-07-12T10:50:50.630-07:00</updated><title type='text'>solucion 6: alumno</title><content type='html'>&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;&lt;br /&gt;void presentar_calendario();&lt;br /&gt;void relleno_tareas();&lt;br /&gt;void relleno_tareas_diarias();&lt;br /&gt;void presentar_menu();&lt;br /&gt;void anadir();&lt;br /&gt;void editar();&lt;br /&gt;void rehacer_pantalla(int muestra);&lt;br /&gt;void annadir_tarea_diaria();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main(int argc, char **argv) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int op = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char entrada_texto[10];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char cadena[20];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int muestra = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // tareas: periodo 1, dia 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char otrotexto[20]; // &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rehacer_pantalla(muestra);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (op != 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; op = atoi(gets(entrada_texto));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (op == 1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; anadir();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; rehacer_pantalla(muestra);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (op == 2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; annadir_tarea_diaria();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; rehacer_pantalla(muestra);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (op == 4) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (muestra == 1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; muestra = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; muestra = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; rehacer_pantalla(muestra);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //borrar tarea diaria &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (op==3) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Numero: &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(otrotexto, gets(cadena));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //sprintf(&quot;atrm %s&quot;,otrotexto);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //printf(&quot;lo que va a ejecutar es: atrm %s&quot;,otrotexto);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(cadena,&quot;atrm %s&quot;,otrotexto);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;%s&quot;,cadena);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; system(cadena);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; rehacer_pantalla(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (op == 9) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; op = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; op = 10;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; system(&quot;clear&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; system(&quot;echo Fin del programa&quot;);&lt;br /&gt;//&amp;nbsp; printf(&quot;\033[40;0H&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void presentar_calendario() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *pf;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char texto[255];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *p;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = texto;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pf = popen(&quot;cal&quot;, &quot;r&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[47m\033[34m\033[0;550H&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fgets(texto, 80, pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!feof(pf)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[47m\033[34m\033[0%d;55H&quot;, c);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;%21s\033[0m&quot;, texto);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fgets(texto, 80, pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pclose(pf);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pf = popen(&quot;date +\&quot;%A %d %B %Y\&quot; &quot;, &quot;r&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fgets(texto, 80, pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!feof(pf)) {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[1;1HFecha: %s&quot;, texto);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fgets(texto, 80, pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pclose(pf);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void relleno_tareas() {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[11;1H\033[47m\033[32m&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Listas de Tareas Programas&amp;nbsp; Periodicas&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; \033[0m\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *pf;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char texto[255];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *p;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = texto;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pf = popen(&quot;crontab -l&quot;, &quot;r&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //printf(&quot;\033[47m\033[34m\033[0;550H&quot; );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fgets(texto, 80, pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!feof(pf)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //printf(&quot;\033[47m\033[34m\033[0%d;55H&quot;,c );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //printf(&quot;%s\033[0m&quot;,texto);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;%2d:%s&quot;, c, texto);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fgets(texto, 200, pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pclose(pf);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void presentar_menu() {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[47m\033[1;35m\033[2;0H&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Menu:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; \033[0m\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[3;0H9)Salir del programa\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[4;0H1)Editar crontab.txt con nano para tareas periodicas\n &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[5;0H2)Añadir tarea del dia\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[6;0H3)Borrar tarea del dia\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[7;0H4)Mostrar tareas Periodicas/Diarias&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[9;0HNúmero de la opción:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[9;21H&quot;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void anadir() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; system(&quot;nano ~/.calendar/crontab.txt&quot;); // edito crontab&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; system(&quot;crontab ~/.calendar/crontab.txt&quot;); //actualizo mi crom&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void annadir_tarea_diaria() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char hora[40];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char minutos[40];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char entrada_texto[200];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char cadena[500];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char cadena_ejemplo[400];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; system(&quot;clear&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Introduce tarea del dia:\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Hora:&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(hora, gets(entrada_texto));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\nMinutos:&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(minutos, gets(entrada_texto));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(cadena, &quot;at %s:%s&quot;, hora, minutos);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\nEjemplo de notificación:\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(cadena_ejemplo,&quot;notify-send \&quot;hola\&quot; -i /usr/share/pixmaps/gnome-home.png &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;%s\n&quot;,cadena_ejemplo);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n Para salir pulse Crtl+D \n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ejecuto el comando at hora: minutos&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; system(cadena);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //salida ordenada&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Pulse una tecla\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gets(entrada_texto);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void rehacer_pantalla(muestra) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int resp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; resp = system(&quot;clear&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; presentar_calendario();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (muestra == 1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; relleno_tareas();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; relleno_tareas_diarias();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; presentar_menu();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void relleno_tareas_diarias() {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[11;1H\033[47m\033[35m&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Listas de Tareas Diarias&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; \033[0m\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *pf;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char texto[255];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *p;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = texto;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pf = popen(&quot;atq&quot;, &quot;r&quot;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fgets(texto, 80, pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!feof(pf)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;%2d:%s&quot;, c, texto);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fgets(texto, 80, pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pclose(pf);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;
&lt;div style=&quot;display: block; text-align: left;&quot;&gt;
&lt;a href=&quot;https://sites.google.com/site/fpoprogramadorsistemas/solucion-6-alumno/menus%20y%20tareas%20cron.png?attredirects=0&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;277&quot; src=&quot;https://sites.google.com/site/fpoprogramadorsistemas/_/rsrc/1300885072901/solucion-6-alumno/menus%20y%20tareas%20cron.png?height=277&amp;amp;width=400&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/1649332327519139648/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/solucion-6-alumno.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/1649332327519139648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/1649332327519139648'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/solucion-6-alumno.html' title='solucion 6: alumno'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-9015039835962153083</id><published>2012-07-12T10:50:00.001-07:00</published><updated>2012-07-12T10:50:11.262-07:00</updated><title type='text'>Examen 6: Gestión de trareas y notificarlas</title><content type='html'>Crear programa que permita gestionar tareas y que las notifique el usuario el día adecuado.&lt;br /&gt;&lt;br /&gt;Nuestro
 programa debe mostrar el calendario del mes actual junto con las tareas
 del día; además, debe permitir añadir, modificar, y eliminar tareas 
para un dia concreto.&lt;br /&gt;&lt;br /&gt;Las tareas, pueden ser periódicas, de forma
 que se repitan cada día, cada semana, cada mes, o cada año, o 
simplemente que no se repitan.&lt;br /&gt;&lt;br /&gt;El programa puede tener interfaz de usuario basada en menu o en argumentos. A elección del programa.&lt;br /&gt;&lt;br /&gt;Opcional: Las tareas se asignan a días, no a horas concretas, por lo que la gestión de horas es opcional.</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/9015039835962153083/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-6-gestion-de-trareas-y.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/9015039835962153083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/9015039835962153083'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-6-gestion-de-trareas-y.html' title='Examen 6: Gestión de trareas y notificarlas'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-5608942156436163668</id><published>2012-07-12T10:49:00.001-07:00</published><updated>2012-07-12T10:49:38.611-07:00</updated><title type='text'>examen 5 solucion compi. Antonio</title><content type='html'>Antonio, es otro alumno del curso, que ha resuelto&amp;nbsp; el problema de otra 
forma (aunque no resuelve el caso de que le demos un fichero). Pero como
 siempre es interesante ver las distintas formas resolver el problema, 
aqui os lo dejo:&lt;br /&gt;&lt;br /&gt;#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;#include &amp;lt;dirent.h&amp;gt;&lt;br /&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;time.h&amp;gt;&lt;br /&gt;#include &amp;lt;pwd.h&amp;gt;&lt;br /&gt;#include &amp;lt;grp.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#define FALSE 0&lt;br /&gt;#define TRUE !0&lt;br /&gt;&lt;br /&gt;void
 VerResultado(char *, struct stat *,int ,int);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//Función que te 
muestra los resultados de lsl dependiendo de los argumentos.&lt;br /&gt;void 
permisos (char *, struct stat *);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//Función que nos 
compara st_mode con sus banderas y nos escribe las letras en la cadena 
perm.&lt;br /&gt;&lt;br /&gt;int main(int argc, char **argv) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;DIR *pdir;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// declaramos un puntero de tipo DIR que permite manejar directorios.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char nomcomp[255];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;struct stat st;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// variable st de tipo strut stat.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;struct dirent *dp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// puntero dp de tipo struct dirent.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int c=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int argumento_a=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int argumento_c=0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;while(c&amp;lt;argc) {&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Mientras c sea menor que el número de palabras introducidas, sigue comprobando.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(strcmp(argv[c],&quot;-a&quot;)==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;argumento_a=TRUE;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(strcmp(argv[c],&quot;-c&quot;)==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;argumento_c=TRUE;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(strcmp(argv[c],&quot;-ac&quot;)==0 || (strcmp(argv[c],&quot;-ca&quot;)==0 )) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;argumento_c=TRUE;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;argumento_a=TRUE;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(argumento_c==TRUE &amp;amp;&amp;amp; argumento_a==TRUE) {&amp;nbsp; //Si ya tiene los 2 argumentos, se sale del bucle.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;c=argc;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;pdir = opendir(argv[c]);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//si el 
argumento no es válido intentamos abrir (argv[c]) como directorio.&lt;br /&gt;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (pdir == NULL) {&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// si no se
 puede abrir ese directorio nos dara error y se saldra del programa.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perror(argv[0]);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// nos devuelve el mensaje de error actual de tu programa (perror)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;exit(-1);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;c++;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//Aseguramos la salida sumando 1 a c.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;pdir = opendir(argv[argc-1]);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// abrimos un directorio que 
lo recibimos en argv[argc-1] y lo pasamos al puntero pdir (opendir)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (pdir == NULL) {&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;pdir = opendir(&quot;.&quot;);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//si no se puede abrir 
argv[argc-1](se supone que es el directorio),abriremos el 
actual(significará que se ha escrito solo lsl porque si nos falla por un
 argumento inválido ya lo tenemos controlado anteriormente)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (pdir == NULL) {&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// si no se puede abrir ese directorio nos dara error y se saldra del programa.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perror(argv[0]);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// nos devuelve el mensaje de error actual de tu programa (perror)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;exit(-1);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;strcpy(argv[argc-1],&quot;.&quot;);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Si consigue abrir el 
directorio actual, le decimos que el actual es &quot;.&quot; que si es el 
directorio válido.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;dp = readdir(pdir);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// si la linea 24 ha funcionado, leemos una entrada del directorio
 (readdir) y la pasamos a dp&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;while (dp != NULL) {&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// mientras haya directorios que leer.&lt;br /&gt;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;sprintf(nomcomp, &quot;%s/%s&quot;, argv[argc-1], dp-&amp;gt;d_name);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// 
como dp es un puntero ponemos dp-&amp;gt;d_name(sino fuera puntero dp.d_name
 que seria igual que la que teniamos en otro programa donde poniamos 
tablaRecords.nombre)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (stat(nomcomp, &amp;amp;st) &amp;lt; 0) {&amp;nbsp;&amp;nbsp; 
&amp;nbsp;// stat te devuelve un valor numerico y obtiene informacion de un 
fichero y me la guarda en &amp;amp;st(que hace referencia a la direccion de 
memoria donde se almacena esa variable)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perror(nomcomp);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;VerResultado(dp-&amp;gt;d_name, 
&amp;amp;st,argumento_a,argumento_c);&amp;nbsp;&amp;nbsp; &amp;nbsp;// si obtiene la informacion y la 
ha podido guardar en st le pasamos a la funcion VerResultado el nombre 
fichero y la direccion de memoria donde esta almacenada su información.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;dp = readdir(pdir);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// leo el siguiente nombre de 
archivo que haya en el directorio hasta que devuelva un NULL al puntero 
dp&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;closedir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Funcion que muestra el nombre de fichero o directorio y la informacion detallada.&lt;br /&gt;&lt;br /&gt;void
 VerResultado(char *nomfich, struct stat *st,int argumento_a,int 
argumento_c) {&amp;nbsp;&amp;nbsp; &amp;nbsp;// recifimos un puntero llamado nomfich y un puntero a
 la variable st de tipo struct stat&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;struct tm *t;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// creamos una structura del tipo tm y la manejamos por medio del puntero t&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;struct passwd *pwu;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// creamos otras 2 estructuras para el id de grupo y se usuario.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;struct group *pwg;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char perm[10];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;t = gmtime(&amp;amp;st-&amp;gt;st_mtime);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// a t le 
pasamos la funcion gmtime(coge el numero q te da st_mtime y lo desglosa 
en horas,minutos,segundos,etc) le indicamos el trozo de memoria de st 
,mtime&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;pwu = getpwuid(st-&amp;gt;st_uid);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// a
 pwu y pwg le pasamos los nombres de usuario y grupo respectivamente.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;pwg = getgrgid(st-&amp;gt;st_gid);&lt;br /&gt;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;permisos(perm,st);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// declaramos la 
función permisos, que nos devuelve la variable perm con los permisos en 
letras.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(argumento_a==TRUE &amp;amp;&amp;amp; argumento_c==FALSE) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;%s %3d %s %s %8ld bytes %02d/%02d/%4d %02d:%02d:%02d %-20s\n&quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;st-&amp;gt;st_nlink,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;pwu-&amp;gt;pw_name,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;pwg-&amp;gt;gr_name,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;st-&amp;gt;st_size,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;t-&amp;gt;tm_mday,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;t-&amp;gt;tm_mon + 1,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;t-&amp;gt;tm_year + 1900,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;t-&amp;gt;tm_hour,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;t-&amp;gt;tm_min,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;t-&amp;gt;tm_sec,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;nomfich);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(argumento_a==TRUE &amp;amp;&amp;amp; argumento_c ==TRUE) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;%20s\n&quot;,nomfich);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//Nos muestra directorios y ficheros y además ocultos cada uno en una línea.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(nomfich[0]!=&#39;.&#39;) {&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//Si el argumento a es FALSE(no muestra los ocultos),imprime los directorios visibles.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(argumento_a==FALSE &amp;amp;&amp;amp; argumento_c==TRUE) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;%20s\n&quot;,nomfich);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(argumento_a==FALSE &amp;amp;&amp;amp; argumento_c==FALSE) {&amp;nbsp;&amp;nbsp; &amp;nbsp;//Si no se especifica ningun argumento.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;%s %3d %s %s %8ld bytes %02d/%02d/%4d %02d:%02d:%02d %-20s\n&quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm,&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//variable que contiene una cadena de caracteres con los permisos.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;st-&amp;gt;st_nlink,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;pwu-&amp;gt;pw_name,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;pwg-&amp;gt;gr_name,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;st-&amp;gt;st_size,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;t-&amp;gt;tm_mday,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;t-&amp;gt;tm_mon + 1,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;t-&amp;gt;tm_year + 1900,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;t-&amp;gt;tm_hour,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;t-&amp;gt;tm_min,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;t-&amp;gt;tm_sec,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;nomfich);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Procedimiento que te escribe los permisos en letras.&lt;br /&gt;&lt;br /&gt;void permisos (char *perm, struct stat *st) {&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//comparamos st_mode con sus banderas para escribir los permisos en perm.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (S_ISDIR(st-&amp;gt;st_mode)) {&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//es un directorio?&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[0] = &#39;d&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else if(S_ISLNK(st-&amp;gt;st_mode)) {&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//es un enlace?&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[0] = &#39;l&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//es un fichero?&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[0]= &#39;-&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (st-&amp;gt;st_mode &amp;amp; S_IRUSR) {&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//tiene permiso de lectura el usuario? &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[1] = &#39;r&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[1] = &#39;-&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (st-&amp;gt;st_mode &amp;amp; S_IWUSR) {&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//tiene permiso de escritura el usuario?&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[2] = &#39;w&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[2] = &#39;-&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (st-&amp;gt;st_mode &amp;amp; S_IXUSR) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[3] = &#39;x&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[3] = &#39;-&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (st-&amp;gt;st_mode &amp;amp; S_IRGRP) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[4] = &#39;r&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[4] = &#39;-&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (st-&amp;gt;st_mode &amp;amp; S_IWGRP) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[5] = &#39;w&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[5] = &#39;-&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (st-&amp;gt;st_mode &amp;amp; S_IXGRP) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[6] = &#39;x&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[6] = &#39;-&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (st-&amp;gt;st_mode &amp;amp; S_IROTH) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[7] = &#39;r&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[7] = &#39;-&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (st-&amp;gt;st_mode &amp;amp; S_IWOTH) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[8] = &#39;w&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[8] = &#39;-&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (st-&amp;gt;st_mode &amp;amp; S_IXOTH) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[9] = &#39;x&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;perm[9] = &#39;-&#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;} 		 	   		  
</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/5608942156436163668/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-5-solucion-compi-antonio.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/5608942156436163668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/5608942156436163668'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-5-solucion-compi-antonio.html' title='examen 5 solucion compi. Antonio'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-142408708894348000</id><published>2012-07-12T10:48:00.003-07:00</published><updated>2012-07-12T10:48:51.147-07:00</updated><title type='text'>examen 5: solucion alumno (usando colores)</title><content type='html'>&lt;div style=&quot;display: block; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;a href=&quot;https://sites.google.com/site/fpoprogramadorsistemas/examen-5-solucion-alumno/lsl%20en%20colores.png?attredirects=0&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;213&quot; src=&quot;https://sites.google.com/site/fpoprogramadorsistemas/_/rsrc/1299751690933/examen-5-solucion-alumno/lsl%20en%20colores.png?height=213&amp;amp;width=400&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div style=&quot;display: block; text-align: left;&quot;&gt;
&lt;a href=&quot;https://sites.google.com/site/fpoprogramadorsistemas/examen-5-solucion-alumno/esquema%20del%20main%20del%20lsl.jpg?attredirects=0&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://sites.google.com/site/fpoprogramadorsistemas/_/rsrc/1299759986452/examen-5-solucion-alumno/esquema%20del%20main%20del%20lsl.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Paginas web de referencia:&lt;br /&gt;// tomado del: https://sites.google.com/site/fpoprogramadorsistemas/analisis-de-argumentos-2&lt;br /&gt;// https://sites.google.com/site/fpoprogramadorsistemas/soluciones-profe-del-cat&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;limits.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;&lt;br /&gt;// https://sites.google.com/site/fpoprogramadorsistemas/c-trabajar-con-directorios&lt;br /&gt;#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;#include &amp;lt;dirent.h&amp;gt;&lt;br /&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;time.h&amp;gt;&lt;br /&gt;&lt;br /&gt;// para datos del usuario: man getpwuid&lt;br /&gt;#include &amp;lt;pwd.h&amp;gt;&lt;br /&gt;&lt;br /&gt;//http://www.fismat.umich.mx/mn1/manual/node19.html&lt;br /&gt;#include &amp;lt;unistd.h&amp;gt; // leer la ruta actual donde este el programa&lt;br /&gt;&lt;br /&gt;#include &amp;lt;grp.h&amp;gt; // datos del grupo&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void VerResultadoA(char *, struct stat *); //lsl -a: ocultos y visibles mas datos.&lt;br /&gt;void escribedatos(char *, struct stat *);&lt;br /&gt;void VerResultadoAC(char *, struct stat *); //lsl -aca: ocultos y visibles sin datos&lt;br /&gt;void VerResultadoC(char *, struct stat *); //lsl -c: solo nombre de visibles&lt;br /&gt;void VerResultadoLSL(char *, struct stat *); //lsl: de visibles mas datos&lt;br /&gt;int comprobar_Directorio_o_Fichero(char *); // lsl comprobar directorio o fichero&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int procesarArgumentos(int, char **);&lt;br /&gt;&lt;br /&gt;DIR *pdir;&lt;br /&gt;char *nomfich;&lt;br /&gt;char nomcomp[255];&lt;br /&gt;struct stat st;&lt;br /&gt;struct dirent *dp;&lt;br /&gt;FILE *pf;&lt;br /&gt;&lt;br /&gt;char cadena[125]; // aqui guarda el directorio actual si solo ejecuto LSL&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// procesa todos los argumentos que reciba, y devuelve un numero&lt;br /&gt;// positivo= la suma de los valores de los argumentos&lt;br /&gt;// negativo =hay argumentos pero no son validos&lt;br /&gt;// cero= no hay ningun argumento&lt;br /&gt;&lt;br /&gt;int argumento(char *); // procesa&amp;nbsp;&amp;nbsp; cada argumento de forma&lt;br /&gt;&lt;br /&gt;int esArgumento(char *); // comprueba que es un argumento&lt;br /&gt;&lt;br /&gt;int main(int argc, char **argv)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int resul;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int numero_de_argumentos=0; // contador de argumentos&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int uno=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int dos=0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int archivo=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int valor=0;&lt;br /&gt;&lt;br /&gt;// caso de lsl solo&lt;br /&gt;// comprobacion si: es un archivo o directorio, y si existen....&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (argc==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Se trata del comando lsl solo.\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // se trata de solo la orden lsl&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pdir = opendir(&quot;.&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dp = readdir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (dp != NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(nomcomp, &quot;%s/%s&quot;, &quot;.&quot;, dp-&amp;gt;d_name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; nomfich = dp-&amp;gt;d_name;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (stat(nomcomp, &amp;amp;st) &amp;lt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; perror(nomcomp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; VerResultadoLSL(nomfich, &amp;amp;st);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dp = readdir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; closedir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 0; //&amp;nbsp; termino el programa aqui&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// hay mas de 1 arguento......&lt;br /&gt;&lt;br /&gt;// PROCESAR ARGUMENTOS......&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; resul = procesarArgumentos(argc, argv);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Trabajo realizar: \n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (resul &amp;gt; 0) { //&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &amp;nbsp;&amp;nbsp;&amp;nbsp; if (resul &amp;amp; 1) { // Enmascaramiento Binario: pregunto por los 
numero &amp;amp;(=y logico a nivel de bits). (no es lo mismo que&amp;nbsp; 
&amp;amp;&amp;amp;) posicion 1, vease final&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Usado argumento \&quot;a\&quot;\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; numero_de_argumentos++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; uno=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (resul &amp;amp; 2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Usado argumento \&quot;c\&quot;\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dos=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (uno!=1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // para que no sume cuando la a esta tambien...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; numero_de_argumentos++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;//***********************************************************************************&lt;br /&gt;// dos= 1 ,numero de agumento =1&lt;br /&gt;// uno=1, numero de agumento =1&lt;br /&gt;// uno=1 y dos=1, numero de argumentos=2&lt;br /&gt;//***********************************************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// caso de lsl y directorio/fichero&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (uno==0 &amp;amp;&amp;amp; dos==0 &amp;amp;&amp;amp; argc==2) {&lt;br /&gt;// ver si es un archivo o un directorio y listar como si fuera lsl solo&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; valor=comprobar_Directorio_o_Fichero(argv[1]);&lt;br /&gt;// devuelve 1 si es directorio.&lt;br /&gt;// devuelve 2 si es fichero.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (valor==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pdir = opendir(argv[1]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dp = readdir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (dp != NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(nomcomp, &quot;%s/%s&quot;, argv[1], dp-&amp;gt;d_name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; nomfich = dp-&amp;gt;d_name;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (stat(nomcomp, &amp;amp;st) &amp;lt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; perror(nomcomp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; VerResultadoLSL(nomfich, &amp;amp;st);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dp = readdir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; closedir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 0; //&amp;nbsp; termino el programa aqui&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (valor==2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if((pf = fopen(argv[1], &quot;r&quot;)) != NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // es un archivo... lo que nos han pasado&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; archivo=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b style=&quot;color: red;&quot;&gt;&amp;nbsp; //Importante: cargo con la funcio stat los datos del fichero a st&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (stat(argv[1], &amp;amp;st) &amp;lt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; perror(argv[1]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; VerResultadoLSL(argv[1], &amp;amp;st);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fclose(pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Error: no encuentro el fichero&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// caso de lsl un argumento y sin nada: caso a al directorio actual&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (uno==1 &amp;amp;&amp;amp; dos==0 &amp;amp;&amp;amp; argc==2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // ver si es un archivo o un directorio y listar como si fuera lsl solo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pdir = opendir(&quot;.&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dp = readdir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (dp != NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(nomcomp, &quot;%s/%s&quot;, &quot;.&quot;, dp-&amp;gt;d_name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; nomfich = dp-&amp;gt;d_name;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (stat(nomcomp, &amp;amp;st) &amp;lt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; perror(nomcomp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; VerResultadoA(nomfich, &amp;amp;st);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dp = readdir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; closedir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 0; //&amp;nbsp; termino el programa aqui&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// caso de lsl un argumento y sin nada: caso c&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (uno==0 &amp;amp;&amp;amp; dos==1 &amp;amp;&amp;amp; argc==2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // ver si es un archivo o un directorio y listar como si fuera lsl solo&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pdir = opendir(&quot;.&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dp = readdir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (dp != NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(nomcomp, &quot;%s/%s&quot;, &quot;.&quot;, dp-&amp;gt;d_name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; nomfich = dp-&amp;gt;d_name;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (stat(nomcomp, &amp;amp;st) &amp;lt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; perror(nomcomp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; VerResultadoC(nomfich, &amp;amp;st);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dp = readdir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; closedir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 0; //&amp;nbsp; termino el programa aqui&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// caso de lsl un argmento y con directorio/fichero: caso a&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (uno==1 &amp;amp;&amp;amp; dos==0 &amp;amp;&amp;amp; argc==3) {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; valor=comprobar_Directorio_o_Fichero(argv[3-1]);&lt;br /&gt;// devuelve 1 si es directorio.&lt;br /&gt;// devuelve 2 si es fichero.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (valor==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pdir = opendir(argv[3-1]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dp = readdir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (dp != NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(nomcomp, &quot;%s/%s&quot;,argv[3-1] , dp-&amp;gt;d_name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; nomfich = dp-&amp;gt;d_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (stat(nomcomp, &amp;amp;st) &amp;lt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; perror(nomcomp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; VerResultadoA(nomfich, &amp;amp;st);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dp = readdir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; closedir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 0; //&amp;nbsp; termino el programa aqui&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (valor==2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if((pf = fopen(argv[3-1], &quot;r&quot;)) != NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // es un archivo... lo que nos han pasado&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; archivo=1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (stat(argv[3-1], &amp;amp;st) &amp;lt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; perror(argv[3-1]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; VerResultadoA(argv[3-1], &amp;amp;st);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fclose(pf);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// caso de lsl un argmento y con directorio/fichero: caso c&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (uno==0 &amp;amp;&amp;amp; dos==1 &amp;amp;&amp;amp; argc==3) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; valor=comprobar_Directorio_o_Fichero(argv[3-1]);&lt;br /&gt;&lt;br /&gt;// devuelve 1 si es directorio.&lt;br /&gt;// devuelve 2 si es fichero.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (valor==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pdir = opendir(argv[3-1]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dp = readdir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (dp != NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(nomcomp, &quot;%s/%s&quot;,argv[3-1] , dp-&amp;gt;d_name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; nomfich = dp-&amp;gt;d_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (stat(nomcomp, &amp;amp;st) &amp;lt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; perror(nomcomp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; VerResultadoC(nomfich, &amp;amp;st);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dp = readdir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; closedir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 0; //&amp;nbsp; termino el programa aqui&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (valor==2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if((pf = fopen(argv[3-1], &quot;r&quot;)) != NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // es un archivo... lo que nos han pasado&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; archivo=1;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (stat(argv[3-1], &amp;amp;st) &amp;lt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; perror(argv[3-1]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; VerResultadoC(argv[3-1], &amp;amp;st);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fclose(pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;// caso de lsl dos argumentos y sin nada: lsl -a -c ó es -a-c&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (uno==1 &amp;amp;&amp;amp; dos==1 &amp;amp;&amp;amp;&amp;nbsp; argc==2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pdir = opendir(&quot;.&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dp = readdir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (dp != NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(nomcomp, &quot;%s/%s&quot;,&quot;.&quot; , dp-&amp;gt;d_name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; nomfich = dp-&amp;gt;d_name;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (stat(nomcomp, &amp;amp;st) &amp;lt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; perror(nomcomp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; VerResultadoAC(nomfich, &amp;amp;st);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dp = readdir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; closedir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 0; //&amp;nbsp; termino el programa aqui&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// caso de lsl dos argumentos con fichero: lsl -a -c ó es -ac ó es -ca + fichero&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (uno==1 &amp;amp;&amp;amp; dos==1 &amp;amp;&amp;amp;&amp;nbsp; argc==3) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; valor=comprobar_Directorio_o_Fichero(argv[3-1]);&lt;br /&gt;// devuelve 1 si es directorio.&lt;br /&gt;// devuelve 2 si es fichero.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (valor==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pdir = opendir(argv[3-1]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dp = readdir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (dp != NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(nomcomp, &quot;%s/%s&quot;,argv[3-1], dp-&amp;gt;d_name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; nomfich = dp-&amp;gt;d_name;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (stat(nomcomp, &amp;amp;st) &amp;lt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; perror(nomcomp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; VerResultadoAC(nomfich, &amp;amp;st);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dp = readdir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; closedir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 0; //&amp;nbsp; termino el programa aqui&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (valor==2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if((pf = fopen(argv[3-1], &quot;r&quot;)) != NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // es un archivo... lo que nos han pasado&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; archivo=1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (stat(argv[3-1], &amp;amp;st) &amp;lt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; perror(argv[3-1]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; VerResultadoC(argv[3-1], &amp;amp;st);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fclose(pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;// caso de lsl dos argumentos y con directorio o fichero&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (uno==1 &amp;amp;&amp;amp; dos==1 &amp;amp;&amp;amp; argc==4) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; valor=comprobar_Directorio_o_Fichero(argv[4-1]);&lt;br /&gt;// devuelve 1 si es directorio.&lt;br /&gt;// devuelve 2 si es fichero.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (valor==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pdir = opendir(argv[4-1]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dp = readdir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (dp != NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(nomcomp, &quot;%s/%s&quot;,argv[4-1] , dp-&amp;gt;d_name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; nomfich = dp-&amp;gt;d_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (stat(nomcomp, &amp;amp;st) &amp;lt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; perror(nomcomp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; VerResultadoAC(nomfich, &amp;amp;st);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dp = readdir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; closedir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 0; //&amp;nbsp; termino el programa aqui&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (valor==2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if((pf = fopen(argv[4-1], &quot;r&quot;)) != NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // es un archivo... lo que nos han pasado&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; archivo=1;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (stat(argv[4-1], &amp;amp;st) &amp;lt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; perror(argv[4-1]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; VerResultadoAC(argv[4-1], &amp;amp;st);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fclose(pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//-------------------------------------------------------------------------------&lt;br /&gt;// FIN DEL MAIN&lt;br /&gt;//-------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//-------------------------------------------------------------------------------&lt;br /&gt;// OTRAS FUNCIONES&lt;br /&gt;//-------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;// Procesa la lista de argumentos.&lt;br /&gt;// Devuelve un nº positivo indicando la suma de los argumentos empleados&lt;br /&gt;// Negativo si alguna letra no es válida&lt;br /&gt;&lt;br /&gt;int procesarArgumentos(int argc, char **argv)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char usados[100] = &quot;&quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int suma = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *argu; // para procesar la lista de argumentos&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int valor;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *posUsados;&lt;br /&gt;// para buscar en la tabla de usados&lt;br /&gt;// el argumento 0 no lo proceso ya que&amp;nbsp; es el nombre del programa, y empieza por el c=1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (c = 1; c &amp;lt; argc; c++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; argu = argv[c];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(esArgumento(argu)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //sumo al puntero 1 posicion, me desplazo a la derecha una posicion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //(salto al signo menos que no me interesa analizar ahora dentro de la cadena)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; argu++;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //*argu=conenido a lo que apuntaba argu: la letra &quot;a&quot; en asci no vale cero,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // por lo tanto cumple la condicion de que sea distinto de cero&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // cuando encuentre \0, el valor numerico es 0, con lo cual parará el while.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (*argu) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; valor = argumento(argu);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // 0 es cuando no tenga signo menos, y negativo cuendo no lo encuentra en la tabla&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (valor &amp;gt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; posUsados = strchr(usados, *argu);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // si el usuario pone varias veces el mismo argumento, solo lo cuenta una vez&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //si no lo he encontrado lo meto en la tabla&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (posUsados == NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; usados[strlen(usados)] = *argu;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // si la he encontrado, es porque ha repetido el valor&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; valor = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // calculo la suma de todos los arguemntos&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; suma += valor;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //me desplazo al siguiente argumento&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; argu++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return suma;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Procesa un argumento de forma individual&lt;br /&gt;// Devuelve INT_MIN si no es válido y positivo si lo es (2 ^ posicion)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int argumento(char *argu)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;// los argumentos validos van a ser: a,c&lt;br /&gt;// el comando -l ya lo doy visto&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char valen[] = { &quot;ac&quot; };&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // tabla sin tamaño definido([]), el compilador cuenta los elementos &quot;abcdef&quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // y lo dimensiona automaticamente, tambien valdria: char valen[6]={ &quot;abcdef&quot; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *pos;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int dif; // es la diferencia....&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((pos = strchr(valen, argu[0]))) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // la asignación pos=strchr. La función strchr te busca un caracter en una cadena:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // si lo encuentra lo que hace es que pos apunte al caracter,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // y la expresion (pos=strchr(valen, *argu[0])) la evalua el if.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // si strchr() devuelve una posicion, pos = esa posicion, con lo cual es correcto(verdadero)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // si strchr() no devuelve nada (NULL), no lo ha encontrado, pos=NULL, con lo cual el falso&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dif = (pos - valen); // se pueden hacer operaciones aritmeticas con los puntero,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // se estan restando las posiciones.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // por ejemplo si pos marcaria 12034, y si valen marcaria 12035, dif=1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return (1 &amp;lt;&amp;lt; dif); // &amp;lt;&amp;lt; operador binario que trabaja con bits, y hace desplazamiento a la izquierda&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return INT_MIN; //&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int esArgumento(char *argu)&lt;br /&gt;{&lt;br /&gt;// en el puntero *argu, (guarda la posicion donde esta apuntando)&lt;br /&gt;//...y nos puede mostrar&amp;nbsp; el contenido a donde apunta:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (*argu == &#39;-&#39;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // si el primer carater es &#39;-&#39; es un argumento.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 1; // verdadero&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0; // falso&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//------------------------------------------------------------------------------------------&lt;br /&gt;void VerResultadoA(char *nomfich, struct stat *st)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; escribedatos(nomfich,st); // todos, incluidos los ocultos&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void VerResultadoAC(char *nomfich, struct stat *st)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // voy a colorear segun sea fichero,directorio,o enlace&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct tm *t;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct passwd *p;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct group *p2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct stat atributos;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char permiso[13];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; t = gmtime(&amp;amp;st-&amp;gt;st_mtime);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int ejecutable=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int directorio=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int enlace=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int fichero=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lstat(nomfich,&amp;amp;atributos); // leo todos los atributos de nomfich&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((atributos.st_mode &amp;amp; S_IXUSR)!=0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ejecutable=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( S_ISDIR(st-&amp;gt;st_mode )) {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; directorio=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(( S_ISREG(st-&amp;gt;st_mode ))) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //ES UN FICHERO&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fichero=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if((S_ISLNK(st-&amp;gt;st_mode ))) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // es un enlace Simbolico&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; enlace=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;if (ejecutable==1 &amp;amp;&amp;amp; fichero==1 ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // lo pongo en verde&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[0;32m %-20s \033[m\n&quot;,&amp;nbsp; nomfich);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (directorio==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // lo pongo en azul&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[0;34m %-20s \033[m\n&quot;,&amp;nbsp; nomfich);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (fichero==1 &amp;amp;&amp;amp; ejecutable==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // lo pongo en gris claro&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[1;30m %-20s \033[m\n&quot;,&amp;nbsp; nomfich);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void VerResultadoC(char *nomfich, struct stat *st)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (nomfich[0]!=&#39;.&#39;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // se trata visible&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; VerResultadoAC(nomfich,st);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void VerResultadoLSL(char *nomfich, struct stat *st)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;// muestro todos los archivos (incluido los ocultos)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; escribedatos(nomfich,st);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//-----------------------------------------------------------------------------------------------&lt;br /&gt;// Funcion para saber si lo me pasan es un directorio o un fichero&lt;br /&gt;//----------------------------------------------------------------------------------------------&lt;br /&gt;// intento abrirlo con &lt;b style=&quot;color: black;&quot;&gt;opendir(),&lt;/b&gt;&lt;br /&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; si me da error no es un directorio en caso contrario es un directorio y devuelve 1&lt;br /&gt;// si ha dado error en opendir(), intento abrirlo como un fichero&lt;b style=&quot;color: black;&quot;&gt; fopen()&lt;/b&gt;, si no da error es un fichero y &lt;br /&gt;// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; devuelve 2, en caso contrario devuelve 0&lt;br /&gt;&lt;br /&gt;// devuelve 1 si es directorio.&lt;br /&gt;// devuelve 2 si es fichero.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int comprobar_Directorio_o_Fichero(char *argumento)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pdir = opendir(argumento);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pdir != NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // es un directorio.... lo que nos han dado&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //directorio=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;directorio: %s\n&quot;,argumento);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; closedir(pdir);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if((pf = fopen(argumento, &quot;r&quot;)) != NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // es un archivo... lo que nos han pasado&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;&amp;nbsp;&amp;nbsp; archivo=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Fichero: %s\n&quot;,argumento);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fclose(pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void escribedatos(char *nomfich, struct stat *st)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct tm *t;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct passwd *p;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct group *p2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct stat atributos;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char permiso[13];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; t = gmtime(&amp;amp;st-&amp;gt;st_mtime);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p=getpwuid(st-&amp;gt;st_uid);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p2=getgrgid(st-&amp;gt;st_gid);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int ejecutable=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int directorio=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int fichero=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int enlace=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // http://www.juntadeandalucia.es/averroes/iesbajoguadalquivir/inf/dfsi/lstat.c&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lstat(nomfich,&amp;amp;atributos);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\nPermisos:\n&quot;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//&amp;nbsp; p=passwd(&amp;amp;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;%8ld bytes %02d/%02d/%4d %02d:%02d:%02d&amp;nbsp; %-10s %-10s &quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; st-&amp;gt;st_size,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t-&amp;gt;tm_mday,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t-&amp;gt;tm_mon + 1,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t-&amp;gt;tm_year + 1900,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t-&amp;gt;tm_hour,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t-&amp;gt;tm_min,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t-&amp;gt;tm_sec,&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; t-&amp;gt;tm_nlink ,&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p-&amp;gt;pw_name,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p2-&amp;gt;gr_name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //-------------------&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // es un directorio&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( S_ISDIR(st-&amp;gt;st_mode )) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot; D &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; directorio=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(( S_ISREG(st-&amp;gt;st_mode ))) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //ES UN FICHERO&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot; F &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fichero=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if((S_ISLNK(st-&amp;gt;st_mode ))) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // es un enlace Simbolico&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot; E &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; enlace=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((atributos.st_mode &amp;amp; S_IRUSR)!=0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;r&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;-&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((atributos.st_mode &amp;amp; S_IWUSR)!=0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;w&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;-&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((atributos.st_mode &amp;amp; S_IXUSR)!=0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;x&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ejecutable=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;-&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((atributos.st_mode &amp;amp; S_IRGRP)!=0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;r&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;-&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((atributos.st_mode &amp;amp; S_IWGRP)!=0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;w&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;-&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((atributos.st_mode &amp;amp; S_IXGRP)!=0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;x&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;-&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((atributos.st_mode &amp;amp; S_IROTH)!=0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;r&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;-&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((atributos.st_mode &amp;amp; S_IWOTH)!=0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;w&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;-&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((atributos.st_mode &amp;amp; S_IXOTH)!=0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;x&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;-&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((atributos.st_mode &amp;amp; S_ISUID)!=0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;1&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;-&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((atributos.st_mode &amp;amp; S_ISGID)!=0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;2&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;-&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((atributos.st_mode &amp;amp; S_ISVTX)!=0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;t&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;-&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (ejecutable==1 &amp;amp;&amp;amp; fichero==1 ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // lo pongo en verde&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[0;32m %-20s \033[m\n&quot;,&amp;nbsp; nomfich);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (directorio==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // lo pongo en azul&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[0;34m %-20s \033[m\n&quot;,&amp;nbsp; nomfich);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (fichero==1 &amp;amp;&amp;amp; ejecutable==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // lo pongo en gris claro&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\033[1;30m %-20s \033[m\n&quot;,&amp;nbsp; nomfich);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/142408708894348000/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-5-solucion-alumno-usando-colores.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/142408708894348000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/142408708894348000'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-5-solucion-alumno-usando-colores.html' title='examen 5: solucion alumno (usando colores)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-3297119720856552115</id><published>2012-07-12T10:48:00.001-07:00</published><updated>2012-07-12T10:48:07.659-07:00</updated><title type='text'>Examen 5: crear comando lsl</title><content type='html'>Crear un programa llamado &quot;lsl.c&quot; que realice la misma tarea que el comando ls -l.&lt;br /&gt;&lt;br /&gt;Formato:&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;lsl [opciones] [fichero...]&lt;br /&gt;&lt;br /&gt;Nuestro
 programa debe admitir los argumentos -a y -c y toda combinación de 
ellos, es decir, puede admitirlo de forma individual, usando dos de 
ellos, usando los dos o sin usar ninguno.&lt;br /&gt;&lt;br /&gt;Además, los argumentos 
deber pode unirse, es decir, se considerará un argumento válido -ac y 
debe interpretarse como los argumentos -a y -c&lt;br /&gt;&lt;br /&gt;Descripción de los argumentos:&lt;br /&gt;-a Muestra tambien los ficheros y directorios ocultos.&lt;br /&gt;-c Muestra solo los nombres de ficheros y directorios, cada uno en una linea&lt;br /&gt;Cualquier otro argumentos, debe de ser tratado como un nombre de fichero o directorio.&lt;br /&gt;&lt;br /&gt;Fecha limite de entrega: Viernes 11 de marzo de 2011.&lt;br /&gt;&lt;br /&gt;Nota:&lt;br /&gt;Traducción del enunciado:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div style=&quot;display: block; text-align: left;&quot;&gt;
&lt;a href=&quot;https://sites.google.com/site/fpoprogramadorsistemas/examen-5-crear-comando-ls/Pantallazo-1.png?attredirects=0&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;118&quot; src=&quot;https://sites.google.com/site/fpoprogramadorsistemas/_/rsrc/1299583836334/examen-5-crear-comando-ls/Pantallazo-1.png?height=118&amp;amp;width=400&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/3297119720856552115/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-5-crear-comando-lsl.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/3297119720856552115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/3297119720856552115'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-5-crear-comando-lsl.html' title='Examen 5: crear comando lsl'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-5175515377058903774</id><published>2012-07-12T10:47:00.001-07:00</published><updated>2012-07-12T10:47:29.619-07:00</updated><title type='text'>solucion 4 alumno</title><content type='html'>#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;&lt;br /&gt;float operacion(char *,float,float);// char es operacion, 1º float es resultado, 2º float en numero que carga&lt;br /&gt;&lt;br /&gt;int main(int argc, char **argv)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c=0; // contador&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float resultado=0; // contiene el resulado&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char operador[10]; // contiene la operacion que estoy analizando&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float numero=0; // arguemento convertido en numero&lt;br /&gt;&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; while (c&amp;lt;argc) {&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Argumento nº %d, es el %s \n&quot;,c,argv[c]);&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(operador,&quot;+&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (c&amp;lt;argc) {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if&amp;nbsp; (strcmp(argv[c],&quot;-&quot;)==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(operador,&quot;-&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (strcmp(argv[c],&quot;+&quot;)==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(operador,&quot;+&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (strcmp(argv[c],&quot;x&quot;)==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(operador,&quot;x&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (strcmp(argv[c],&quot;/&quot;)==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(operador,&quot;/&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // o es numero o un operador desconocido...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //convierto el argumento en un numero float&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; numero=atof(argv[c]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; resultado=operacion(operador,resultado,numero);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(operador,&quot; &quot;); // reinicio el operador, lo siguiente tiene que ser un operador&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;%f\n&quot;,resultado);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// funcion de realizacion de operacion&lt;br /&gt;float operacion(char *ope,float resultado,float numero)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&amp;nbsp; (strcmp(ope,&quot;-&quot;)==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return resultado-numero&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&amp;nbsp; (strcmp(ope,&quot;+&quot;)==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return resultado+numero&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&amp;nbsp; (strcmp(ope,&quot;x&quot;)==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return resultado*numero&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&amp;nbsp; (strcmp(ope,&quot;/&quot;)==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return resultado/numero&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Error: operador no entindido %s&quot;,ope);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;return 1;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;nota:&lt;br /&gt;El * me daba problemas con lo cual tuve que poner &quot;x&quot; , supongo que el sistema entiende que es un comodin.</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/5175515377058903774/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/solucion-4-alumno.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/5175515377058903774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/5175515377058903774'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/solucion-4-alumno.html' title='solucion 4 alumno'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-1386107831797221540</id><published>2012-07-12T10:46:00.003-07:00</published><updated>2012-07-12T10:46:47.474-07:00</updated><title type='text'>Examen 4: calculadora no interactiva</title><content type='html'>&lt;div dir=&quot;ltr&quot;&gt;

&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;
Programa: Calculadora no interactiva.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;

&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;
Hacer una calculadora que pueda
multiplicar, dividir, sumar y restar, pero que &lt;b&gt;no se interactiva&lt;/b&gt;.
Osea que en la linea de comando se le diga la operación que tiene
que resolver. Resolviendolo de izquiera a derecha sin preferencia de
operadores. (y se le pueden poner varias operaciones)&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/1386107831797221540/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-4-calculadora-no-interactiva.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/1386107831797221540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/1386107831797221540'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-4-calculadora-no-interactiva.html' title='Examen 4: calculadora no interactiva'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-347230692595343791</id><published>2012-07-12T10:46:00.001-07:00</published><updated>2012-07-12T10:46:10.817-07:00</updated><title type='text'>examen 3: solución del profe</title><content type='html'>&lt;span style=&quot;color: black;&quot;&gt;Vease:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ver tema: &lt;br /&gt;
&lt;ul style=&quot;color: blue;&quot;&gt;
&lt;li&gt;&lt;div dir=&quot;ltr&quot; style=&quot;padding-left: 38px;&quot;&gt;
Analisis de argumentos 2: &amp;lt;&amp;lt; ( desplazamiento binario) y enmascaramiento binario
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/347230692595343791/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-3-solucion-del-profe.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/347230692595343791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/347230692595343791'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-3-solucion-del-profe.html' title='examen 3: solución del profe'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-8843773503706762968</id><published>2012-07-12T10:45:00.001-07:00</published><updated>2012-07-12T10:45:21.976-07:00</updated><title type='text'>examen 3: solución del alumno (2º variante): Con uso de estructuras y switch case</title><content type='html'>//examen 3: solución del alumno (2º variante): Con uso de estructuras y switch case (en pruebas)&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wcjsbsan.c&lt;br /&gt;//&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Copyright 2011 julio&lt;br /&gt;//&lt;br /&gt;// Usando estructuras para los distintos casos de argumentos. y switch Case&lt;br /&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt; // manejamos&amp;nbsp; cadenas (copiar, comparar)&lt;br /&gt;&lt;br /&gt;// defino funciones....&lt;br /&gt;void contar(int,int,int,char *);&lt;br /&gt;// primer argumento es si cuento caracteres&lt;br /&gt;// segundo argumento es si cuento palabras &quot; &quot;,&quot;\t&quot;,&quot;\n&quot;&lt;br /&gt;// tercero argumento es si cuento lineas&amp;nbsp; &quot;\n&quot;&lt;br /&gt;// cuarto argumento es el nombre del archivo&lt;br /&gt;&lt;br /&gt;// crear estructura de opciones de argumentos&amp;nbsp; y tareas a hacer....&lt;br /&gt;typedef struct {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char nombre[15]; //14 caracteres (+1 de /0): adminteria -adfk y -a (por ejemplo)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int tarea; // un numero que especifique que tarea hara...&lt;br /&gt;} tipoopciones;&lt;br /&gt;&lt;br /&gt;int main(int argc, char **argv) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // vemos los argumentos que nos han introducido....&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c=0; // contador&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int d=0; //contador 2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int posicion_nombre_archivo=0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // guarda donde esta el archivo en los argumentos&lt;br /&gt;&lt;br /&gt; &lt;b style=&quot;color: red;&quot;&gt;// estas variables hacen una funcion de &quot;interruptores&quot;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int contarpalabra=0; // &lt;span style=&quot;color: #134f5c;&quot;&gt;si vale 0 no las contará, si vale 1&amp;nbsp; contara palabras&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp; contarlinea=0;//&lt;span style=&quot;color: #38761d;&quot;&gt; si vale 0 no las contará, si vale 1 contara lineas&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int contarcaracter=0; //&lt;span style=&quot;color: #bf9000;&quot;&gt;  si vale 0 no las contará, si vale 1 contara caracteres&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int errores=0;//contar errores (introduccion de parametros no validos&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (c&amp;lt;argc) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Argumento nº %d, es el %s \n&quot;,c,argv[c]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tipoopciones opcion[17]; //maximo numero de argumentos que nos va ha aceptar el programa&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // reviso cada argumento, si la primera letra es un - (guion),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // se trata de un argumento a analizar, sino es el nombre del archivo a analizar...&lt;br /&gt;&lt;br /&gt;// tabla de opciones posibles....&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(opcion[0].nombre,&quot;-w&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[0].tarea=1; //contarpalabra=1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[1].nombre,&quot;-l&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[1].tarea=2; //contarlinea=1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[2].nombre,&quot;-c&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[2].tarea=3; //contarcaracter=1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(opcion[3].nombre,&quot;-wl&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[3].tarea=4;//contarpalabra=1 //contarlinea=1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[4].nombre,&quot;-lw&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[4].tarea=4;//contarpalabra=1 //contarlinea=1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(opcion[5].nombre,&quot;--lines&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[5].tarea=2; //contarlinea=1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(opcion[6].nombre,&quot;--words&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[6].tarea=1; //contarpalabra=1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(opcion[7].nombre,&quot;-cw&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[7].tarea=8; //contarpalabra=1 //contarcaracter=1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(opcion[8].nombre,&quot;-wc&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[8].tarea=8; //contarpalabra=1 //contarcaracter=1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(opcion[9].nombre,&quot;-lc&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[9].tarea=9; //contarlinea=1 //contarcaracter=1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(opcion[10].nombre,&quot;-cl&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[10].tarea=9; //contarlinea=1 //contarcaracter=1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(opcion[11].nombre,&quot;-lwc&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[11].tarea=10; //contarlinea=1 //contarcaracter=1 //contarpalabra=1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(opcion[12].nombre,&quot;-wlc&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[12].tarea=10; //contarlinea=1 //contarcaracter=1 //contarpalabra=1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(opcion[13].nombre,&quot;-wcl&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[13].tarea=10; //contarlinea=1 //contarcaracter=1 //contarpalabra=1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(opcion[14].nombre,&quot;-cwl&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[14].tarea=10; //contarlinea=1 //contarcaracter=1 //contarpalabra=1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(opcion[15].nombre,&quot;-clw&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[15].tarea=10; //contarlinea=1 //contarcaracter=1 //contarpalabra=1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(opcion [16].nombre,&quot;-lcw&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; opcion[16].tarea=10; //contarlinea=1 //contarcaracter=1 //contarpalabra=1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (argc&amp;gt;20) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, &quot;%s: %d: El numero de argumentos a superado los 20 elementos \n&quot;, argv[0], argc);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; errores++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // caso&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (c&amp;lt;argc) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (argv[c][0]==&#39;-&#39;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // se trada de un argumento reviso la tabla....&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; d=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (d&amp;lt;argc) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //empiezo a comparar el argumento (c), con la lista de opciones que tengo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if ( strcmp(argv[c],opcion[d].nombre)==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; switch(opcion[d].tarea) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 1:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarpalabra=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 2:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarlinea=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 3:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarcaracter=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 4:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarpalabra=1 ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarlinea=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 8:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarpalabra=1 ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarcaracter=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 9:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarlinea=1 ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarcaracter=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 10:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarlinea=1 ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarcaracter=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarcaracter=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; default:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // en caso contrario las combinaciones de letras no valdrían...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, &quot;%s: %s: Opcion no valia\n&quot;, argv[0], argv[c]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; errores++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; d++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //sera el nombre del archivo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (argc&amp;gt;0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; posicion_nombre_archivo=c;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, &quot;%s: %s: No se ha especificado nombre de archivo valido\n&quot;, argv[0], argv[0]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (errores!=0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (argc==2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //significa que solo ha escrio el comando y el nombre de archivo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //tenemos que ejecutar -w -l -c&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarpalabra=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarlinea=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarcaracter=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stdout, &quot;wcjsb contara del archivo: %s\n&quot;,argv[posicion_nombre_archivo]);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (contarlinea==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(&amp;nbsp; stdout, &quot;contara lineas\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (contarpalabra==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(&amp;nbsp; stdout, &quot;contara palabras\n&quot;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (contarcaracter==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(&amp;nbsp; stdout, &quot;contara caracteres\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; contar(contarcaracter,contarpalabra,contarlinea,argv[posicion_nombre_archivo]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void contar(int caracter,int palabra,int linea, char *archivo) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int numero_caracter=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int numero_palabra=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int numero_linea=0&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *pf;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char letra;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char letraAnterior;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int errores=0;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((pf=fopen(archivo,&quot;r&quot;))==NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, &quot;%s: %s: No se puede abrir el fichero\n&quot;, archivo, archivo);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; errores++;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Lee el primer caracter del archivo ¡porque es posible que el archivo este vacio!&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; letra = fgetc(pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; letraAnterior = letra + 1; // asi nuestra letra anterior nos aseguramos que es distinta al anterior&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //numero_caracter++;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Mientras no sea fin de fichero&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while(!feof(pf)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // tengo que analizar el caracter:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (palabra==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if ( ((letra==&#39; &#39;) || (letra==&#39;\n&#39;) || (letra==&#39;\t&#39;)) &amp;amp;&amp;amp; (letra!=letraAnterior) ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // comprobramos que esta entre espacios y que no son espacios consecutivos (letra != letraAnterior)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; numero_palabra++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (linea==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (letra==&#39;\n&#39;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; numero_linea++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; numero_caracter++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; letraAnterior = letra;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; letra = fgetc(pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Cierra el archivo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fclose(pf);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // escribe resultado segun lo que nos hayan pedido....&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(&amp;nbsp; stdout, &quot;-------------Resultados-------------\n&quot;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (linea==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(&amp;nbsp; stdout, &quot;Nº de&amp;nbsp; lineas: %d\n&quot;,numero_linea);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (palabra==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(&amp;nbsp; stdout, &quot;Nº de palabras: %d\n&quot;,numero_palabra);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (caracter==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(&amp;nbsp; stdout, &quot;Nº de caracteres: %d\n&quot;,numero_caracter);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(&amp;nbsp; stdout, &quot;-------------&amp;nbsp; fin&amp;nbsp; -------------\n&quot;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/8843773503706762968/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-3-solucion-del-alumno-2-variante.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/8843773503706762968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/8843773503706762968'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-3-solucion-del-alumno-2-variante.html' title='examen 3: solución del alumno (2º variante): Con uso de estructuras y switch case'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-6569489609858478467</id><published>2012-07-12T10:44:00.001-07:00</published><updated>2012-07-12T10:44:42.155-07:00</updated><title type='text'>examen 3: solución del alumno</title><content type='html'>//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wcjsbsan.c&lt;br /&gt;//&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Copyright 2011 julio&lt;br /&gt;//&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt; // manejamos&amp;nbsp; cadenas (copiar, comparar)&lt;br /&gt;&lt;br /&gt;// defino funciones....&lt;br /&gt;void contar(int,int,int,char *);&lt;br /&gt;// primer argumento es si cuento caracteres&lt;br /&gt;// segundo argumento es si cuento palabras &quot; &quot;,&quot;\t&quot;,&quot;\n&quot;&lt;br /&gt;// tercero argumento es si cuento lineas&amp;nbsp; &quot;\n&quot;&lt;br /&gt;// cuarto argumento es el nombre del archivo&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main(int argc, char **argv)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // vemos los argumentos que nos han introducido....&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c=0; // contador&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp; char archivo[256]; // guarda el nombre del archivo: esto es una limitacion (ver comentario final)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: red;&quot;&gt;// posible mejora: &lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;int posicion_nombre_archivo=0&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // guarda donde esta el archivo &lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;en los argumentos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;b style=&quot;color: red;&quot;&gt;// estas variables hacen una funcion de &quot;interruptores&quot;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int contarpalabra=0; //&lt;span style=&quot;color: #134f5c;&quot;&gt; si vale 0 no las contará, si vale 1&amp;nbsp; contara palabras&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp; contarlinea=0;//&lt;span style=&quot;color: #38761d;&quot;&gt; si vale 0 no las contará, si vale 1 contara lineas&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int contarcaracter=0; //  &lt;span style=&quot;color: #7f6000;&quot;&gt;si vale 0 no las contará, si vale 1 contara caracteres&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; int errores=0;//contar errores (introduccion de parametros no validos&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (c&amp;lt;argc) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Argumento nº %d, es el %s \n&quot;,c,argv[c]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // reviso cada argumento, si la primera letra es un - (guion),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // se trata de un argumento a analizar, sino es el nombre del archivo a analizar...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (c&amp;lt;argc) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (argv[c][0]==&#39;-&#39;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //se trata de un argumento a analizar&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (strcmp(argv[c],&quot;-w&quot;)==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarpalabra=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (strcmp(argv[c],&quot;-l&quot;)==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarlinea=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (strcmp(argv[c],&quot;-c&quot;)==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarcaracter=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (strcmp(argv[c],&quot;-wl&quot;)==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarpalabra=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarlinea=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (strcmp(argv[c],&quot;-lw&quot;)==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarpalabra=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarlinea=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (strcmp(argv[c],&quot;--lines&quot;)==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarlinea=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (strcmp(argv[c],&quot;--words&quot;)==0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarpalabra=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // en caso contrario las combinaciones de letras no valdrían...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, &quot;%s: %s: Opcion no valia\n&quot;, argv[0], argv[c]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; errores++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //sera el nombre del archivo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (argc&amp;gt;0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: red;&quot;&gt;strcpy(archivo,argv[c]);&lt;/span&gt; // ver comentario final,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // mejora: &lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;posicion_nombre_archivo=c;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, &quot;%s: %s: No se ha especificado nombre de archivo valido\n&quot;, argv[0], argv[0]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (errores!=0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (argc==2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //significa que solo ha escrio el comando y el nombre de archivo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //tenemos que ejecutar -w -l -c&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarpalabra=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarlinea=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contarcaracter=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stdout, &quot;wcjsb contara del archivo: %s\n&quot;,archivo);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (contarlinea==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(&amp;nbsp; stdout, &quot;contara lineas\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (contarpalabra==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(&amp;nbsp; stdout, &quot;contara palabras\n&quot;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (contarcaracter==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(&amp;nbsp; stdout, &quot;contara caracteres\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; // podiamos llamar sin usar la variable archivo de esta manera:&lt;br /&gt;&amp;nbsp; // &amp;nbsp;&amp;nbsp; contar(contarcaracter,contarpalabra,contarlinea&lt;span style=&quot;color: red;&quot;&gt;,&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;argv[posicion_nombre_archivo]&lt;/span&gt;&lt;/b&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; contar(contarcaracter,contarpalabra,contarlinea&lt;span style=&quot;color: red;&quot;&gt;,archivo&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void contar(int caracter,int palabra,int linea, char *archivo)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int numero_caracter=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int numero_palabra=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int numero_linea=0&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *pf;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char letra;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char letraAnterior;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int errores=0;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((pf=fopen(archivo,&quot;r&quot;))==NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(stderr, &quot;%s: %s: No se puede abrir el fichero\n&quot;, archivo, archivo);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; errores++;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Lee el primer caracter del archivo ¡porque es posible que el archivo este vacio!&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; letra = fgetc(pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; letraAnterior = letra + 1; // asi nuestra letra anterior nos aseguramos que es distinta al anterior&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //numero_caracter++;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Mientras no sea fin de fichero&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while(!feof(pf)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // tengo que analizar el caracter:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (palabra==1) {&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if ( ((letra==&#39; &#39;) || (letra==&#39;\n&#39;) || (letra==&#39;\t&#39;)) &amp;amp;&amp;amp; (letra!=letraAnterior) &lt;/span&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // comprobramos que esta entre espacios y que no son espacios consecutivos (letra != letraAnterior)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; numero_palabra++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (linea==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (letra==&#39;\n&#39;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; numero_linea++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; numero_caracter++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; letraAnterior = letra;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; letra = fgetc(pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Cierra el archivo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fclose(pf);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // escribe resultado segun lo que nos hayan pedido....&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(&amp;nbsp; stdout, &quot;-------------Resultados-------------\n&quot;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (linea==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(&amp;nbsp; stdout, &quot;Nº de&amp;nbsp; lineas: %d\n&quot;,numero_linea);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (palabra==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(&amp;nbsp; stdout, &quot;Nº de palabras: %d\n&quot;,numero_palabra);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (caracter==1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(&amp;nbsp; stdout, &quot;Nº de caracteres: %d\n&quot;,numero_caracter);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(&amp;nbsp; stdout, &quot;-------------&amp;nbsp; fin&amp;nbsp; -------------\n&quot;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;Nota:&lt;/span&gt;&lt;br /&gt;He corregido las condiciones que evaluaban la instruccion&lt;span style=&quot;color: black;&quot;&gt; if &lt;/span&gt;que contaba las palabras, ahora va bien.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;Mejora:&lt;/b&gt; &lt;span style=&quot;color: red;&quot;&gt;limitación al definir char archivo[256]&lt;/span&gt; (Comentada por  los campañeros Luismiguel , Enrique y Beatriz)&lt;br /&gt;El
 hecho de definir esta variable, es una limitación ya que estamos 
&quot;limitando&quot; operar con archivos (+ longitud ruta) que no superen los 255
 caracteres (el ultimo tiene que estar servado a &#39;\0&#39;).&lt;br /&gt;Se puede evitar esto, creando una variable numerica int (por ejemplo llamandola &lt;b&gt;&lt;span style=&quot;color: lime;&quot;&gt;posicion_nombre_archivo&lt;/span&gt;&lt;/b&gt;), que guarde la posicion del nombre del archivo dentro de la tabla de argv[] (normalmente, este argumento es el ultimo...):&lt;br /&gt;&lt;br /&gt;argv[pocicion_nombre_archivo]</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/6569489609858478467/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-3-solucion-del-alumno.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/6569489609858478467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/6569489609858478467'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-3-solucion-del-alumno.html' title='examen 3: solución del alumno'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-1041015516459587008</id><published>2012-07-12T10:43:00.003-07:00</published><updated>2012-07-12T10:43:50.727-07:00</updated><title type='text'>Examen 3</title><content type='html'>&lt;h3 align=&quot;left&quot; id=&quot;sites-page-title-header&quot;&gt;

&lt;span dir=&quot;ltr&quot; id=&quot;sites-page-title&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/h3&gt;
Crear un programa que realice las mismas tareas que el comando &lt;b&gt;wc&lt;/b&gt;.&lt;br /&gt;Nuestro
 programa debe admitir los argumentos -w -l -c, y toda la combinación de
 ellos, es decir, puede admitirlo de forma individual, usando dos de 
ellos, usando los tres o sin usar ninguno.&lt;br /&gt;&lt;br /&gt;Ademas, los argumentos
 deben poder unirse, es decir se considerará un argumento válido -wl y 
debe interpretase como los argumento -w y -l</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/1041015516459587008/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-3.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/1041015516459587008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/1041015516459587008'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-3.html' title='Examen 3'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-1637613036477218667</id><published>2012-07-12T10:43:00.001-07:00</published><updated>2012-07-12T10:43:13.771-07:00</updated><title type='text'>examen 2: solución del profe</title><content type='html'>#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;lt;limits.h&amp;gt;&lt;br /&gt;#include &amp;lt;time.h&amp;gt;&lt;br /&gt;&lt;br /&gt;// Tabla de records&lt;br /&gt;// crear estructura&lt;br /&gt;typedef struct {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char nombre[20];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int intentos;&lt;br /&gt;} tipoRecord;&lt;br /&gt;&lt;br /&gt;// Funciones&lt;br /&gt;void leerArchivoRecords(tipoRecord *);&lt;br /&gt;void asignarRecordsIniciales(tipoRecord *);&lt;br /&gt;void guardarArchivoRecords(tipoRecord *);&lt;br /&gt;void mostrarTablaRecords(tipoRecord *);&lt;br /&gt;int pedirNum(char *);&lt;br /&gt;int jugarPartida();&lt;br /&gt;void comprobarTablaRecords(int, tipoRecord *);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main(int argc, char **argv)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Variables&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tipoRecord tablaRecords[10];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Contador para bucles&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int op = -1;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Opción del usuario&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int inten = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Intentos usados en cada partida&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Preparamos secuencia de nº aleatorios&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; srand(time(NULL));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // leer archivo de records y pasarlo a la tabla&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; leerArchivoRecords(tablaRecords);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Mientras quiera seguir jugando&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(op != 2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Mostrar records actuales&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mostrarTablaRecords(tablaRecords);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Mostrar menú&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;1 Jugar&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 Salir\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Pedir opción al usuario&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; op = pedirNum(&quot;Introduzca la opción &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Procesar opción de menú&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; switch(op) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 1:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Jugar partida&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; inten = jugarPartida();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; comprobarTablaRecords(inten, tablaRecords);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 2:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Salir&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Hasta luego\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } // Fin mientras&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Guardar archivo con tabla de records&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; guardarArchivoRecords(tablaRecords);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// pasa los 10 records del archivo a la tabla&lt;br /&gt;void leerArchivoRecords(tipoRecord *tr)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *pf;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Abrir de lectura&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((pf = fopen(&quot;records&quot;, &quot;r&quot;)) == NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Ha fallado la apertura (No existe el archivo)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; asignarRecordsIniciales(tr);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; guardarArchivoRecords(tr);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pf = fopen(&quot;records&quot;, &quot;r&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Leer contenido&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fread(tr, sizeof(tipoRecord), 10, pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Cerrar&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fclose(pf);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Guarda la tabla de records en el archivo&lt;br /&gt;void guardarArchivoRecords(tipoRecord *tr)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *pf;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Abrir de escritura&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((pf = fopen(&quot;records&quot;, &quot;w&quot;)) == NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Ha fallado la apertura (error irrecuperable)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Cascazo del 15\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; exit(1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Guardar contenido&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwrite(tr, sizeof(tipoRecord), 10, pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Cerrar&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fclose(pf);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Asigna valores iniciales a la tabla de records&lt;br /&gt;void asignarRecordsIniciales(tipoRecord *tr)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Recorre los 10 records&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(c = 0; c &amp;lt; 10; c++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(tr[c].nombre, &quot;Nadie&quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp; // A cada record le asigna como nombre &quot;nadie&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tr[c].intentos = 999999;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // A cada record le asigna como intentos 999999&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Muestra los 10 records actuales&lt;br /&gt;void mostrarTablaRecords(tipoRecord *tr)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;***** RECORDS ACTUALES *****\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Recorre los 10 records&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(c = 0; c &amp;lt; 10; c++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;%-20s %7d\n&quot;, tr[c].nombre, tr[c].intentos);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// pide un número por teclado mostrando antes el mensaje indicado en texto&lt;br /&gt;int pedirNum(char *texto)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int resp = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;%s&quot;, texto);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; scanf(&quot;%d&quot;, &amp;amp;resp);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return resp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int jugarPartida()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int ale = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int num = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int inten = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Nº aleatorio&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ale =&amp;nbsp; 1+(int) (100000.0*rand()/(RAND_MAX+1.0));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot; %d &quot;,ale);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Mientras aleatorio != usuario&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(ale != num) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Pedir nª al usuario&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; num = pedirNum(&quot;Introduzca un número &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // comprobar nª usuario y aleatorio&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // mayor, menor, igual, contar intentos&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; inten ++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(num &amp;gt; ale) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Te has pasado de largo\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(num &amp;lt; ale) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Te has quedado corto\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;CORRECTO\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return inten;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Comprueba si entra en la tabla de records&lt;br /&gt;void comprobarTablaRecords(int inten, tipoRecord *tr)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pos = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char nombre[20];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Buscar la posición en la que quedaría &quot;inten&quot; en la tabla de 10 records&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(tr[pos].intentos &amp;lt; inten &amp;amp;&amp;amp; pos &amp;lt; 10) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pos++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Si entra&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(pos &amp;lt; 10) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Pedir nombre&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Ha entrado en la tabla de records\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Indique su nombre: &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scanf(&quot;%s&quot;, nombre);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Mover los records 1 hacia abajo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c = 9;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while(c &amp;gt; pos) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(tr[c].nombre, tr[c - 1].nombre);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Pasa el nombre 8 a la posición 9&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tr[c].intentos = tr[c - 1].intentos;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c--;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Insertar el nuevo record&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(tr[pos].nombre, nombre);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tr[pos].intentos = inten;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/1637613036477218667/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-2-solucion-del-profe.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/1637613036477218667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/1637613036477218667'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-2-solucion-del-profe.html' title='examen 2: solución del profe'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-5693401620075762279</id><published>2012-07-12T10:42:00.003-07:00</published><updated>2012-07-12T10:42:47.599-07:00</updated><title type='text'>examen 2: solución del alumno</title><content type='html'>&lt;b&gt;Utilizando estructuras definidas por el usuario.&lt;br /&gt;&lt;br /&gt;main.h&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;typedef struct {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char nombre[15];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int intentos;&lt;br /&gt;} puntuacion;&lt;br /&gt;&lt;br /&gt;// declaracion de funciones&lt;br /&gt;void reiniciarAleatorio();&lt;br /&gt;void mostrarMenu();&lt;br /&gt;&lt;br /&gt;void limpiarpantalla();&lt;br /&gt;&lt;br /&gt;int pedirNum(char *);&lt;br /&gt;&lt;br /&gt;void mostrarTablaDeRecord(puntuacion *);&lt;br /&gt;&lt;br /&gt;void jugar(puntuacion *);&lt;br /&gt;&lt;br /&gt;#define TAMANO 11&lt;br /&gt;&lt;br /&gt;void AbrirFicheroOCrearlo(puntuacion *);&lt;br /&gt;void SalvarFicheroDatos(puntuacion *);&lt;br /&gt;&lt;br /&gt;void guardarTabla(int n,char *);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;main.c&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;limits.h&amp;gt;&lt;br /&gt;#include &amp;lt;time.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &quot;main.h&quot;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//entrada del programa&lt;br /&gt;int main(int argc, char **argv)&lt;br /&gt;{&lt;br /&gt;// definir variables&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; puntuacion TablaRecords[TAMANO]; //el la posicion t[10] se guarda el numero ultimo de intentos...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int op=0;&lt;br /&gt;&lt;br /&gt;//reiniciar el rnd&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; reiniciarAleatorio();&lt;br /&gt;&lt;br /&gt;//reinicio tabla de record o la leo de un archivo....&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (op&amp;lt;TAMANO) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TablaRecords[op].intentos=INT_MAX;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; op++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; op=1;// para el menu&lt;br /&gt;&lt;br /&gt;//leer el archivo de resultados del juego, y si no existe crearlo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AbrirFicheroOCrearlo(TablaRecords);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;***********************************************\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;******** JUEGOS DE ACEPTAR LOS NUMEROS ********\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;***********************************************\n&quot;);&lt;br /&gt;&lt;br /&gt;// mostrar menu:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (op!=3) {&lt;br /&gt;// mostrar menu:&lt;br /&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1.mostrar tabla de record&lt;br /&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 2.jugar&lt;br /&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 3.fin del programa&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mostrarMenu();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; op=pedirNum(&quot;Indique la opción deseada:&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; switch(op) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 1:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mostrarTablaDeRecord(TablaRecords);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 2:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; jugar(TablaRecords);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 3:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; default:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Opción no valida\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // guardo los datos de los record:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SalvarFicheroDatos(TablaRecords);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Fin del juego, Adios....\n&quot;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//**************jugar***********&lt;br /&gt;&lt;br /&gt;//el programa elige un numero aleatorio&lt;br /&gt;&lt;br /&gt;// mientras no acierte&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; escribe un numero el usuario&lt;br /&gt;// ver si es menor ponerle mensaje. Numero de intentos ++&lt;br /&gt;// ver si es mayor ponerle mensaje&amp;nbsp; Numero de intentos ++&lt;br /&gt;// si es igual acerto, salida del bucle y guarda en la tabla el numero de intentos..&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// guardar la tabla del numero de intentos&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Guardamos 10registros de record, + 1 PARA EL ULTIMO VALOR METIDO&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* comprobar que posicion esta (ordenar)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* si esta fuera de la tabla no se guarda, si no se introduce numero&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* y si translada la posicion de los otros numeros.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// ------------------------------------------------&lt;br /&gt;// procedimientos y funciones&lt;br /&gt;// ------------------------------------------------&lt;br /&gt;void reiniciarAleatorio()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; srand(time(NULL));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// ------------------------------------------------&lt;br /&gt;// menu&lt;br /&gt;// ------------------------------------------------&lt;br /&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1.mostrar tabla de record&lt;br /&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 2.jugar&lt;br /&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 3.fin del programa&lt;br /&gt;void&amp;nbsp;&amp;nbsp;&amp;nbsp; mostrarMenu()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; limpiarpantalla();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( &quot;*********** Menu ****************\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( &quot;&amp;nbsp; 1- Mostrar tabla de record\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( &quot;&amp;nbsp; 2- Jugar\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( &quot;&amp;nbsp; 3- Fin del programa\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( &quot;*********************************\n&quot;);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void limpiarpantalla()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (c=0; c&amp;lt;5; c++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// pedir numero para el menu..&lt;br /&gt;// Pide un número entero por teclado. Muestra el texto indicado&lt;br /&gt;int pedirNum(char *texto)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char entrada_texto[10];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char vaciabufferteclado[10];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int num = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;%s&quot;, texto);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; num=atoi(&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;gets&lt;/span&gt;&lt;/b&gt;(entrada_texto)); &lt;span style=&quot;color: #38761d;&quot;&gt;// convertimos cadena de texto en un numero int, con la funcion atoi&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp; // ver nota a pie de pagina del uso del gets.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return num;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void mostrarTablaDeRecord(puntuacion *tabla)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; limpiarpantalla();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char op2[5];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;***************** Tabla de Record ****************\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;*&amp;nbsp; Posicion&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Record&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Jugador&amp;nbsp; *\n&quot;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (c&amp;lt;(TAMANO-1)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //pongo TAMANO-1, porque solo quiero hacer que se muestren los 10 primeros.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (tabla[c].intentos!=2147483647) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;* %2dº ................. %7d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %5s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *\n&quot;,c+1,tabla[c].intentos,tabla[c].nombre);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;* %2dº ................... no record&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xxxxxx&amp;nbsp; *\n&quot;,c+1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;***************** Tabla de Record ****************\n&quot;);&lt;br /&gt;&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Pulse S para salir&amp;nbsp; &quot;);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// jugar devuelve el numero de repeticiones hechas por el jugador antes de resolver la solucion&lt;br /&gt;void jugar(puntuacion *tabla)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char cadena[20];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pos;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int op2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int indice;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int solucion;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int salir=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int repeticiones=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int numero=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char nombre[15];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *texto;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //pruebo con 10.... aunque deberia de ser 10000&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; solucion=1+(int) (10.0*rand()/(RAND_MAX+1.0));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;***********************************************\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;*************** A JUGAR ***********************\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;***********************************************\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (salir=1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; numero=pedirNum(&quot;Introduce un número:&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (numero==solucion) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break; // asi salgo del bucle...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (numero&amp;gt;solucion) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;la solucion es MENOR... intentalo de nuevo\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; repeticiones++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;la solucion es MAYOR... intentalo de nuevo\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; repeticiones++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n Lo has hecho en %d intentos...\n&quot;,repeticiones);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &amp;nbsp;&amp;nbsp;&amp;nbsp; repeticiones;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* compruebo en la tabla de record, si las repeticiones las tengo que&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* introducir , si son nuevo record (o estar en la lista de 10 mejores), o no&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* */&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // determinar la posicion en la tabla....&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pos=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ((tabla[pos].intentos&amp;lt;repeticiones) &amp;amp;&amp;amp; (pos&amp;lt;(TAMANO-1))) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pos++;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pos&amp;lt;TAMANO) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; indice=TAMANO-1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (indice&amp;gt;pos) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[indice].intentos=tabla[indice-1].intentos;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; indice--;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[pos].intentos=repeticiones;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Introduce el nombre del jugador (maximo 14 caracteres): &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; texto=gets(nombre);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(tabla[pos].nombre,texto);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //guardarTabla(pos,texto); // pos es un int, y texto es un puntero&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// ---------------------- abrir o crear archivo de datos ----------------&lt;br /&gt;&lt;br /&gt;void AbrirFicheroOCrearlo(puntuacion *tabla)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *pf;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((pf=fopen(&quot;/home/julio/records.txt&quot;,&quot;r&quot;))==NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // no puedo abrir el archivo, tengo que crearlo ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pf=fopen(&quot;/home/julio/records.txt&quot;,&quot;w&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // me da problemas el ~/, me dice fallo de segmentacion...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // tengo que poner /home/julio/records.txt&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fwrite(tabla,sizeof(puntuacion),TAMANO, pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fclose(pf);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // ya lo he creado&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // leer datos de los puntos record&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fread(tabla,sizeof(puntuacion),TAMANO,pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fclose(pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void SalvarFicheroDatos(puntuacion *tabla)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *pf;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pf=fopen(&quot;/home/julio/records.txt&quot;,&quot;w&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // me da problemas el ~/, me dice fallo de segmentacion...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // tengo que poner /home/julio/records.txt&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwrite(tabla,sizeof(puntuacion),TAMANO,pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fclose(pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ya lo he creado&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Nota al pe de pagina:&lt;br /&gt;Cuando compilamos este ejercicio, nos da un aviso:&lt;br /&gt;&lt;span style=&quot;color: black;&quot;&gt;warning: the `gets&#39; function is dangerous and should not be used.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Este
 aviso se debe a que gets, puede producir desbordamiento, ya que el 
usuario puede introducir mas caracteres que los que tengamos asignados a
 la variable de texto.&lt;br /&gt;&lt;br /&gt;Para solucionar este problema lo suyo es utilizar la funcion&lt;b style=&quot;color: black;&quot;&gt; fgets&lt;/b&gt;</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/5693401620075762279/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-2-solucion-del-alumno_12.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/5693401620075762279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/5693401620075762279'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-2-solucion-del-alumno_12.html' title='examen 2: solución del alumno'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-6166309415260073601</id><published>2012-07-12T10:42:00.001-07:00</published><updated>2012-07-12T10:42:27.531-07:00</updated><title type='text'>examen 2: solución del alumno</title><content type='html'>&lt;b&gt;Utilizando estructuras definidas por el usuario.&lt;br /&gt;&lt;br /&gt;main.h&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;typedef struct {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char nombre[15];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int intentos;&lt;br /&gt;} puntuacion;&lt;br /&gt;&lt;br /&gt;// declaracion de funciones&lt;br /&gt;void reiniciarAleatorio();&lt;br /&gt;void mostrarMenu();&lt;br /&gt;&lt;br /&gt;void limpiarpantalla();&lt;br /&gt;&lt;br /&gt;int pedirNum(char *);&lt;br /&gt;&lt;br /&gt;void mostrarTablaDeRecord(puntuacion *);&lt;br /&gt;&lt;br /&gt;void jugar(puntuacion *);&lt;br /&gt;&lt;br /&gt;#define TAMANO 11&lt;br /&gt;&lt;br /&gt;void AbrirFicheroOCrearlo(puntuacion *);&lt;br /&gt;void SalvarFicheroDatos(puntuacion *);&lt;br /&gt;&lt;br /&gt;void guardarTabla(int n,char *);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;main.c&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;limits.h&amp;gt;&lt;br /&gt;#include &amp;lt;time.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &quot;main.h&quot;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//entrada del programa&lt;br /&gt;int main(int argc, char **argv)&lt;br /&gt;{&lt;br /&gt;// definir variables&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; puntuacion TablaRecords[TAMANO]; //el la posicion t[10] se guarda el numero ultimo de intentos...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int op=0;&lt;br /&gt;&lt;br /&gt;//reiniciar el rnd&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; reiniciarAleatorio();&lt;br /&gt;&lt;br /&gt;//reinicio tabla de record o la leo de un archivo....&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (op&amp;lt;TAMANO) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TablaRecords[op].intentos=INT_MAX;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; op++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; op=1;// para el menu&lt;br /&gt;&lt;br /&gt;//leer el archivo de resultados del juego, y si no existe crearlo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AbrirFicheroOCrearlo(TablaRecords);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;***********************************************\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;******** JUEGOS DE ACEPTAR LOS NUMEROS ********\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;***********************************************\n&quot;);&lt;br /&gt;&lt;br /&gt;// mostrar menu:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (op!=3) {&lt;br /&gt;// mostrar menu:&lt;br /&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1.mostrar tabla de record&lt;br /&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 2.jugar&lt;br /&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 3.fin del programa&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mostrarMenu();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; op=pedirNum(&quot;Indique la opción deseada:&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; switch(op) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 1:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mostrarTablaDeRecord(TablaRecords);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 2:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; jugar(TablaRecords);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 3:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; default:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Opción no valida\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // guardo los datos de los record:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SalvarFicheroDatos(TablaRecords);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Fin del juego, Adios....\n&quot;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//**************jugar***********&lt;br /&gt;&lt;br /&gt;//el programa elige un numero aleatorio&lt;br /&gt;&lt;br /&gt;// mientras no acierte&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; escribe un numero el usuario&lt;br /&gt;// ver si es menor ponerle mensaje. Numero de intentos ++&lt;br /&gt;// ver si es mayor ponerle mensaje&amp;nbsp; Numero de intentos ++&lt;br /&gt;// si es igual acerto, salida del bucle y guarda en la tabla el numero de intentos..&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// guardar la tabla del numero de intentos&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Guardamos 10registros de record, + 1 PARA EL ULTIMO VALOR METIDO&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* comprobar que posicion esta (ordenar)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* si esta fuera de la tabla no se guarda, si no se introduce numero&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* y si translada la posicion de los otros numeros.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// ------------------------------------------------&lt;br /&gt;// procedimientos y funciones&lt;br /&gt;// ------------------------------------------------&lt;br /&gt;void reiniciarAleatorio()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; srand(time(NULL));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// ------------------------------------------------&lt;br /&gt;// menu&lt;br /&gt;// ------------------------------------------------&lt;br /&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1.mostrar tabla de record&lt;br /&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 2.jugar&lt;br /&gt;// &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 3.fin del programa&lt;br /&gt;void&amp;nbsp;&amp;nbsp;&amp;nbsp; mostrarMenu()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; limpiarpantalla();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( &quot;*********** Menu ****************\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( &quot;&amp;nbsp; 1- Mostrar tabla de record\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( &quot;&amp;nbsp; 2- Jugar\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( &quot;&amp;nbsp; 3- Fin del programa\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf( &quot;*********************************\n&quot;);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void limpiarpantalla()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (c=0; c&amp;lt;5; c++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// pedir numero para el menu..&lt;br /&gt;// Pide un número entero por teclado. Muestra el texto indicado&lt;br /&gt;int pedirNum(char *texto)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char entrada_texto[10];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char vaciabufferteclado[10];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int num = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;%s&quot;, texto);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; num=atoi(&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;gets&lt;/span&gt;&lt;/b&gt;(entrada_texto)); &lt;span style=&quot;color: #38761d;&quot;&gt;// convertimos cadena de texto en un numero int, con la funcion atoi&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp; // ver nota a pie de pagina del uso del gets.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return num;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void mostrarTablaDeRecord(puntuacion *tabla)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; limpiarpantalla();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char op2[5];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;***************** Tabla de Record ****************\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;*&amp;nbsp; Posicion&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Record&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Jugador&amp;nbsp; *\n&quot;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (c&amp;lt;(TAMANO-1)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //pongo TAMANO-1, porque solo quiero hacer que se muestren los 10 primeros.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (tabla[c].intentos!=2147483647) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;* %2dº ................. %7d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %5s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *\n&quot;,c+1,tabla[c].intentos,tabla[c].nombre);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;* %2dº ................... no record&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xxxxxx&amp;nbsp; *\n&quot;,c+1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;***************** Tabla de Record ****************\n&quot;);&lt;br /&gt;&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Pulse S para salir&amp;nbsp; &quot;);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// jugar devuelve el numero de repeticiones hechas por el jugador antes de resolver la solucion&lt;br /&gt;void jugar(puntuacion *tabla)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char cadena[20];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pos;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int op2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int indice;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int solucion;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int salir=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int repeticiones=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int numero=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char nombre[15];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *texto;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //pruebo con 10.... aunque deberia de ser 10000&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; solucion=1+(int) (10.0*rand()/(RAND_MAX+1.0));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;***********************************************\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;*************** A JUGAR ***********************\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;***********************************************\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (salir=1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; numero=pedirNum(&quot;Introduce un número:&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (numero==solucion) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break; // asi salgo del bucle...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (numero&amp;gt;solucion) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;la solucion es MENOR... intentalo de nuevo\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; repeticiones++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;la solucion es MAYOR... intentalo de nuevo\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; repeticiones++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n Lo has hecho en %d intentos...\n&quot;,repeticiones);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &amp;nbsp;&amp;nbsp;&amp;nbsp; repeticiones;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* compruebo en la tabla de record, si las repeticiones las tengo que&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* introducir , si son nuevo record (o estar en la lista de 10 mejores), o no&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* */&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // determinar la posicion en la tabla....&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pos=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ((tabla[pos].intentos&amp;lt;repeticiones) &amp;amp;&amp;amp; (pos&amp;lt;(TAMANO-1))) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pos++;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pos&amp;lt;TAMANO) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; indice=TAMANO-1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (indice&amp;gt;pos) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[indice].intentos=tabla[indice-1].intentos;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; indice--;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[pos].intentos=repeticiones;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Introduce el nombre del jugador (maximo 14 caracteres): &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; texto=gets(nombre);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; strcpy(tabla[pos].nombre,texto);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //guardarTabla(pos,texto); // pos es un int, y texto es un puntero&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// ---------------------- abrir o crear archivo de datos ----------------&lt;br /&gt;&lt;br /&gt;void AbrirFicheroOCrearlo(puntuacion *tabla)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *pf;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((pf=fopen(&quot;/home/julio/records.txt&quot;,&quot;r&quot;))==NULL) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // no puedo abrir el archivo, tengo que crearlo ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pf=fopen(&quot;/home/julio/records.txt&quot;,&quot;w&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // me da problemas el ~/, me dice fallo de segmentacion...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // tengo que poner /home/julio/records.txt&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fwrite(tabla,sizeof(puntuacion),TAMANO, pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fclose(pf);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // ya lo he creado&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // leer datos de los puntos record&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fread(tabla,sizeof(puntuacion),TAMANO,pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fclose(pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void SalvarFicheroDatos(puntuacion *tabla)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *pf;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pf=fopen(&quot;/home/julio/records.txt&quot;,&quot;w&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // me da problemas el ~/, me dice fallo de segmentacion...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // tengo que poner /home/julio/records.txt&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwrite(tabla,sizeof(puntuacion),TAMANO,pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fclose(pf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ya lo he creado&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Nota al pe de pagina:&lt;br /&gt;Cuando compilamos este ejercicio, nos da un aviso:&lt;br /&gt;&lt;span style=&quot;color: black;&quot;&gt;warning: the `gets&#39; function is dangerous and should not be used.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Este
 aviso se debe a que gets, puede producir desbordamiento, ya que el 
usuario puede introducir mas caracteres que los que tengamos asignados a
 la variable de texto.&lt;br /&gt;&lt;br /&gt;Para solucionar este problema lo suyo es utilizar la funcion&lt;b style=&quot;color: black;&quot;&gt; fgets&lt;/b&gt;</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/6166309415260073601/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-2-solucion-del-alumno.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/6166309415260073601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/6166309415260073601'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-2-solucion-del-alumno.html' title='examen 2: solución del alumno'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-175471006469140966</id><published>2012-07-12T10:41:00.003-07:00</published><updated>2012-07-12T10:41:41.386-07:00</updated><title type='text'>Examen 2</title><content type='html'>&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;
Realizar un programa que seleciones un
numero al azar entre 1 y 100.000, dicho numero no debe de ser
mostrado al usuario, posteriormente debe ofrecerle al usuario la
posibilidad de acertar el número y en caso de no hacerlo, debe
indicar si el número tecleado por el usuario es mayor o menor que el
numero aleatorio y volver a pedir número al usuario hasta que lo
acierte.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;
El programa debe mantener una tabla con
los records obtenidos por el usuario, (siendo el mejor record el
menor número de intentos hasta acertar el número) y almacenarla en
un fichero. Dicha tabla será  cargada desde el fichero al inicio del
programa y guardada cuando el usuario  indique que no desea jugar
otra partida.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/175471006469140966/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-2.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/175471006469140966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/175471006469140966'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen-2.html' title='Examen 2'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-3354390958219547868</id><published>2012-07-12T10:41:00.001-07:00</published><updated>2012-07-12T10:41:10.380-07:00</updated><title type='text'>Comentarios sobre la corrección del examen I</title><content type='html'>&lt;div dir=&quot;ltr&quot;&gt;

&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;
&lt;b&gt;Sobre los comentarios:&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;
Poner siempre comentarios. Incluso
antes de empezar a codificar en C, poner comentarios de lo que vamos
a hacer en cada procedimiento/funcion y programa principal main.c&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;
&lt;b&gt;Sobre nombrar variables y funciones:&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;
Las variables poner nombres claros, y para las funciones nombres descriptivos y facil de leer.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;
                  no vale:
cargatabladenadaascendente&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;
 mejor (mas claro):
cargaTablaOrdenadaAscendente&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;
No usar nombres de variable por ejemplo
“c”, para distintas cosas, no vale para contador y luego usarla
como entrada de teclado, porque al final nos equivocaremos.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/3354390958219547868/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/comentarios-sobre-la-correccion-del.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/3354390958219547868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/3354390958219547868'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/comentarios-sobre-la-correccion-del.html' title='Comentarios sobre la corrección del examen I'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-3222379735043610449</id><published>2012-07-12T10:40:00.001-07:00</published><updated>2012-07-12T10:40:39.566-07:00</updated><title type='text'>La solución del profe...</title><content type='html'>El profe, Juan Andres, nos ha pasado su solucion, la cual la vamos a estudiar ya que explica mas cosas sobre C&lt;b&gt;. &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Nuevas cosas:&amp;nbsp; Crea una nueva cabecera llamda&lt;b&gt; &quot;main.h&quot;&lt;br /&gt;&lt;br /&gt;main.h:&lt;/b&gt;// Creamos la contantante TAMANO con valor 10&lt;br /&gt;#define TAMANO 10&lt;br /&gt;&lt;br /&gt;// Declaración de funciones usadas a lo largo del programa&lt;br /&gt;void mostrarTabla(int [TAMANO]);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // equivalente a void mostrarTabla(int *);&lt;br /&gt;void mostrarMenu();&lt;br /&gt;&lt;br /&gt;void cargarTabla(int *);&lt;br /&gt;void cargarTablaOrdenada(int *);&lt;br /&gt;void rotarIzquierda(int *);&lt;br /&gt;void rotarDerecha(int *);&lt;br /&gt;void ordenarAsc(int *);&lt;br /&gt;void ordenarDesc(int *);&lt;br /&gt;int compararAsc(const void *, const void *);&lt;br /&gt;int compararDesc(const void *, const void *);&lt;br /&gt;void cargarAleatorio(int *);&lt;br /&gt;&lt;br /&gt;int pedirNum(char *);&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Y en el&amp;nbsp; main.c:&lt;/b&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;limits.h&amp;gt;&lt;br /&gt;#include &amp;lt;time.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &quot;main.h&quot;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Entrada al programa&lt;br /&gt;int main(int argc, char **argv) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int op = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int tabla[TAMANO];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Valores iniciales aleatorios&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cargarAleatorio(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 0 = Salir&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(op != 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Muestra el estado de la tabla, el menú y solicita la opción al usuario&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mostrarTabla(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mostrarMenu();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; op = pedirNum(&quot;Indique la opción deseada &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Procesa la opción seleccionada&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; switch(op) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 1:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cargarTabla(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 2:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cargarTablaOrdenada(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 3:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; rotarIzquierda(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 4:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; rotarDerecha(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 5:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ordenarDesc(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 6:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ordenarAsc(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 7:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cargarAleatorio(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 0:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // No se hace nada&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; default:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Opción no válida\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Muestra la tabla&lt;br /&gt;void mostrarTabla(int tabla[TAMANO]) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // tambien se puede poner void mostrarTabla(int *tabla)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(c = 0; c &amp;lt; TAMANO; c++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;%7d&quot;,tabla[c]);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // %7d = %d que ocupa 7 posiciones, rellena con espacios&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n&quot;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Carga la tabla desde teclado (Opción 1)&lt;br /&gt;void cargarTabla(int *tabla) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(c = 0; c &amp;lt; TAMANO; c++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[c] = pedirNum(&quot;Introduzca un número &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Carga la tabla con 10 números, insertando cada número en la posición adecuada (Opción 2)&lt;br /&gt;void cargarTablaOrdenada(int *tabla) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pos = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int num = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Pone INT_MAX en todos los elementos de la tabla para que el número introducido siempre sea menor&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(c = 0; c &amp;lt; TAMANO; c++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[c] = INT_MAX;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(c = 0; c &amp;lt; TAMANO; c++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pos = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; num = pedirNum(&quot;Introduzca un número &quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Busca la posición correcta para insertar el número en la tabla&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while(tabla[pos] &amp;lt; num &amp;amp;&amp;amp; pos &amp;lt; (TAMANO-1)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pos++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Corre posición de los elementos de la tabla si es necesario&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for(c1 = TAMANO - 1; c1 &amp;gt; pos; c1--) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[c1] = tabla[c1 - 1];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Guarda el numero en la posición correcta&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[pos] = num;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Desplaza los elementos de la tabla 1 posición a la izquierda. (Opción 3)&lt;br /&gt;void rotarIzquierda(int *tabla) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Guardamos el primer elemento en el auxiliar&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int aux = tabla[0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Movemos todos los demás&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(c = 0; c &amp;lt; TAMANO - 1; c++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[c] = tabla[c + 1];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Pasamos el auxiliar al último elemento&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[TAMANO - 1] = aux;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Desplaza los elementos de la tabla 1 posición a la derecha. (Opción 4)&lt;br /&gt;void rotarDerecha(int *tabla) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Guardamos el último elemento en el auxiliar&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int aux = tabla[TAMANO - 1];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Movemos los demás&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(c = TAMANO ; c &amp;gt; 0; c--) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[c] = tabla[c - 1];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Pasamos el auxiliar a la primera posición&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[0] = aux;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Ordena la tabla de forma descendente usando qsort (Opción 5)&lt;br /&gt;void ordenarDesc(int *tabla) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; qsort(tabla, TAMANO, sizeof(int), &amp;amp;compararDesc);&lt;br /&gt;}&lt;br /&gt;int compararDesc(const void *n1, const void *n2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (*(int *)n2 - *(int *)n1);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Ordena la tabla de forma ascendente usando qsort (Opción 6)&lt;br /&gt;void ordenarAsc(int *tabla) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; qsort(tabla, TAMANO, sizeof(int), &amp;amp;compararAsc);&lt;br /&gt;}&lt;br /&gt;int compararAsc(const void *n1, const void *n2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (*(int *)n1 - *(int *)n2);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Carga la tabla con 10 números aleatorios entre 1 y 100 (Opción 7)&lt;br /&gt;void cargarAleatorio(int *tabla) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Inicializa secuencia de numeros aleatorios&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; srand(time(NULL));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(c = 0; c &amp;lt; TAMANO; c++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[c] = 1+(int) (100.0*rand()/(RAND_MAX+1.0));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Muestra las opciones del menú&lt;br /&gt;void mostrarMenu() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;1 - Cargar la tabla con 10 números\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;2 - Cargar la tabla con 10 números ordenados de menos a mayor\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;3 - Rotar la tabla una posición a la izquierda\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;4 - Rotar la tabla una posición a la derecha\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;5 - Ordenar la tabla descendente\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;6 - Ordenar la tabla ascendente\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;7 - Rellenar la tabla con números aleatorios\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;0 - Salir\n&quot;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Pide un número entero por teclado. Muestra el texto indicado&lt;br /&gt;int pedirNum(char *texto) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int num = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;%s&quot;, texto);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; scanf(&quot;%d&quot;, &amp;amp;num);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return num;&lt;br /&gt;}</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/3222379735043610449/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/la-solucion-del-profe.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/3222379735043610449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/3222379735043610449'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/la-solucion-del-profe.html' title='La solución del profe...'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8850682569020595270.post-6956136115875908426</id><published>2012-07-12T10:39:00.003-07:00</published><updated>2012-07-12T10:39:55.949-07:00</updated><title type='text'>examen1 solucion en c</title><content type='html'>#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;time.h&amp;gt; // para el time() // esto es para el tema del numero aleatorio&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt; // para el srand()&amp;nbsp; // esto es para el tema del numero aleatorio&lt;br /&gt;#include &amp;lt;limits.h&amp;gt; // esto es para usar INT_MAX&lt;br /&gt;&lt;br /&gt;int pedirnumero(char *,int); // declarar la funcion de pedir numero con el texto que queramos&lt;br /&gt;&lt;br /&gt;void escribe_menu(int *);&lt;br /&gt;int leeropcionmenu();&lt;br /&gt;void cargatabla10elementos(int *);&lt;br /&gt;void cargartabla10elementosordenadosmenoramayor(int *);&lt;br /&gt;void rotarlatablaunaposicionizquierda(int *);&lt;br /&gt;void rotarlatablaunaposicionderecha(int *);&lt;br /&gt;void ordenarlatabladescendentemente(int *);&lt;br /&gt;void ordenarlatablaascendente(int *);&lt;br /&gt;void rellenarlatablaconnumerosaleatorios(int *);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main(int argc, char **argv)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int opcion=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int tabla[10];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int contador=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; srand(time(NULL));&amp;nbsp; // reiniciar rand con la variable tiempo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Pongo todos los numeros de la tabla a cero&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (contador&amp;lt;10) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[contador]=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contador++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; escribe_menu(tabla);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (opcion!=0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //presentacion del menu&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; opcion=leeropcionmenu();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; switch(opcion) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 1:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cargatabla10elementos(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; escribe_menu(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 2:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cargartabla10elementosordenadosmenoramayor(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; escribe_menu(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 3:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; rotarlatablaunaposicionizquierda(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; escribe_menu(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 4:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; rotarlatablaunaposicionderecha(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; escribe_menu(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 5:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ordenarlatabladescendentemente(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; escribe_menu(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 6:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ordenarlatablaascendente(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; escribe_menu(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 7:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; rellenarlatablaconnumerosaleatorios(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; escribe_menu(tabla);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case 0:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; opcion=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //escribetabla(tabla);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Fin del programa&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//-------------------------------------&lt;br /&gt;// Definicion de funciones&lt;br /&gt;//-------------------------------------&lt;br /&gt;&lt;br /&gt;int pedirnumero(char *texto,int contador)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int resul=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;%s (%dº):&quot;,texto,contador+1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; scanf(&quot;%d&quot;,&amp;amp;resul);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return resul;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//-----------------escribir menu ---------------&lt;br /&gt;&lt;br /&gt;void escribe_menu(int *tabla)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (c&amp;lt;30) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;*****************************************************************\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;* Menu:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;* 1-Cargar la tabla con 10 numeros&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;* 2-Cargar la tabla con 10 numeros ordenados de menor a mayor&amp;nbsp;&amp;nbsp; *\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;* 3-Rotar la tabla una posicion a la izquierda&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;* 4-Rotar la tabla un posición a la derecha&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;* 5-Ordenar la tabla descendientemente&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;* 6-Ordenar la tabla ascendentemente&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;* 7-Rellenar la tabla con numeros aleatorios&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;* 0-Salir&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;* Tabla actual&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (c&amp;lt;10) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;%d&amp;nbsp; ,&quot;,tabla[c]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;*****************************************************************\n&quot;);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//----------------------------------------------&lt;br /&gt;&lt;br /&gt;int leeropcionmenu()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int salir=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int valor;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; valor=-1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (salir==0) {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Escribe la opción:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; \r&quot;); // borra los numeros si ha introducido algo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Escribe la opción:&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scanf(&quot;%d&quot;,&amp;amp;valor);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if ((valor&amp;gt;-1) &amp;amp;&amp;amp; (valor&amp;lt;8)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; salir=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return valor;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//-------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;void cargatabla10elementos(int *tabla)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int elementos=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (elementos&amp;lt;10) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[elementos]=pedirnumero(&quot;Escribe el numero&quot;,elementos);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; elementos++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//------------------------------------------------------&lt;br /&gt;void cargartabla10elementosordenadosmenoramayor(int *tabla)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int elementos=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int valor=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pos=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int indice=0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // tengo que poner cada valor de la&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //tabla al maximo, para que lo ordene correctamente&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (elementos&amp;lt;10) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[elementos]=INT_MAX;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; elementos++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; elementos=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (elementos&amp;lt;10) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // obtener el numero&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&quot;Escribe el elmento %dº:&quot;,elementos+1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scanf(&quot;%d&quot;,&amp;amp;valor);&lt;br /&gt;&lt;br /&gt;//determino la posicion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pos=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while ((tabla[pos]&amp;lt;valor) &amp;amp;&amp;amp; (pos&amp;lt;9)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pos++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;// insertar el numero en la posicion obtenida&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; indice=9;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (indice&amp;gt;pos) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[indice]=tabla[indice-1];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; indice--;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[pos]=valor;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; elementos++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//-------------------------------rotar la tabla una posicion izquierda&lt;br /&gt;void rotarlatablaunaposicionizquierda(int *tabla)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pos=9;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int valor=tabla[9];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (pos&amp;gt;0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[pos]=tabla[pos-1];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pos--;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[0]=valor;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//-------------------------------rotar la tabla una posicion derecha&lt;br /&gt;void rotarlatablaunaposicionderecha(int *tabla)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int pos=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int valor=tabla[0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (pos&amp;lt;9) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[pos]=tabla[pos+1];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pos++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[9]=valor;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//---------------------------------ordenarlatabladescendentemente(tabla&lt;br /&gt;void ordenarlatabladescendentemente(int *tabla)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int num=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int aux=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (num&amp;lt;10) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c=num+1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (c&amp;lt;10) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (tabla[num]&amp;gt;tabla[c]) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; aux=tabla[c];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[c]=tabla[num];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[num]=aux;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; num++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//-------------------------------------------------------------&lt;br /&gt;void ordenarlatablaascendente(int *tabla)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int num=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int aux=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (num&amp;lt;10) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c=num+1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while (c&amp;lt;10) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (tabla[num]&amp;lt;tabla[c]) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; aux=tabla[c];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[c]=tabla[num];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[num]=aux;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; num++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//---------------------------------------------------------&lt;br /&gt;void rellenarlatablaconnumerosaleatorios(int *tabla)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (c&amp;lt;10) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tabla[c]=1+(int) ((100.0)*rand()/(RAND_MAX+1.0));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}</content><link rel='replies' type='application/atom+xml' href='http://fpoprogramador.blogspot.com/feeds/6956136115875908426/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen1-solucion-en-c.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/6956136115875908426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8850682569020595270/posts/default/6956136115875908426'/><link rel='alternate' type='text/html' href='http://fpoprogramador.blogspot.com/2012/07/examen1-solucion-en-c.html' title='examen1 solucion en c'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/09967465878863429766</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>