Librerias – indica que se tengan en cuenta las funciones y tipos definidos en la librería que se escoja, por ejemplo tenemos:
#include < nombre de fichero.h >
podemos ver donde dice: ” nombre de fichero ” va como su nombre lo indica un “fichero cabecera” por lo general en c++ usamos iostream que son las siglas iniciales de: [ input output stream ].
Cada fichero cabecera sirve para indicarle al programa “que funciones podemos usar”, es decir que al colocarle el iostream, tendremos funciones que se nos permitirá usar c0mo el system(“pause”) para dar una pausa al programa que hemos hecho y observar bien los resultados, entre otras; tambien podemos usar recursos como es el cin ( para que el usuario/a ingrese datos ) y el cout ( para mostrarle datos al usuario/a ).
Entonces quedamos con una cabecera asi:
#include <iostream.h>
Debajo de la cabecera principal del programa, se coloca la “cabecera de funcion”, ésta funcion es obligatoria en cada programa porque indica el comienzo del programa:
main ( )
Y se requiere de los parentesis despues de la palabra restringida “main“
Despues de colocar main ( ) es decir nuestro indicador que comienza el programa, ya podemos comenzar con la programacion, ya que la programacion va en el cuerpo del programa, se debe indicar cual es el cuerpo, osea los limites. En un programa los limites son marcados por el simbolo “ las llaves “, es decir { }
{
. . . .
. . . . . . .
}
Por ultimo tenemos las sentencias, es decir nuestra programacion, lo que vayamos realizando en el cuerpo del programa, lo que va a hacer el programa al compilarlo y ejecutarlo. Todo eso va a ir en el cuerpo es decir DENTRO de los limites que establecimos ( las llaves principales del programa )
Al final tenemos que, la estructura de un programa en c++ es así:
#include <iostream.h>
main ( )
{
. . . .
. . . . . . .
}
http://eperdomo89.wordpress.com/2009/09/10/dev-c-clase1-ejercicio/
Programación y tutoriales TIC
CURS de C PNTIC
Tutorial de C (IES 7 colinas)
Problemas de bachillerato
http://phylevn.mexrom.net/index.php/blog/show/CC_y_algunos_problemas_de_bachillerato.html
Funcions més usades en ANSI C.
Llibre de referència: Aprenda C com si estuviera en Primero.
El lenguaje de programación C
Program samples in C (Brian W. Kernighan and Dennis M. Ritchie)
Compilador en línia
Compilador GNU C / C++
IDE (Entorns Integrats de Desenvolupament) per GNU-Linux
Entorn de programació en C / C++ per a Android
Més programes en C per estudiar i provar.
Llibre sobre C (Kernighan, i Ritchie)
Aquí tens una sèrie de programes codificats en C per implementar al compilador. Les tasques a fer per a cadascun són:
Estudia el seu codi i obtén el diagrama de flux.
Compila-los i corregir els errors que hi trobis, si n'hi han.
Enllaça-los, per obtenir un fitxer executable.
Una vegada obtingut l'arxiu, executa'l i explica què fa.
Feis els diagrames de flux amb el programari Dia o l'Open Office Draw.
Prepara un document amb el LlibreOffice Writer i lliura'l a la meua adreça de correu-E: sarqtecno@gmail.com.
He trobat un entorn de programació més lleuger que Eclipse i que és ràpid d'instal·lar a Ubuntu. S'anomena Geany i és més que recomanable per a les nostres pràctiques de programació.
Per instal·lar-lo basta posar al terminal:
sudo apt-get install geany
També heu d'instal·lar el metapaquet build-essential ja que ho requereix per compilar.
sudo apt-get install build-essential
#include <stdio.h>
#include <conio.h>
main()
{
printf("Hola mundo\n");
getch(); // Per a que la finestra romangui oberta en acabar l'execució
}
// Comprova si un número és parell o senar
#include
int num;
int main() {
printf("Dis-me un número: ");
scanf("%d",&num);
if(num%2==0)
printf("Parell");
else
printf("Senar");
return 0;
}
Calcula la mitjana de dos nombres introduïts pel teclat
#include <stdio.h>
int a,b,c;
main() {
printf("1r n§: ");
scanf("%d", &a);
printf("2n n§: ");
scanf("%d", &b);
c=(a+b)/2;
printf("la mitjana ‚s: %d",c);
getchar();getchar()
}
Fer una calculadora que mitjançant funcions faci les operacions bàsiques: suma, resta, multiplicació i divisió
1) Crea el flujograma.
2) Dissenya el codi font del programari principal.
3) Programa primer una funció: suma.
4) Demana els nombres a sumar i la operació a fer.
5) Incorpora una a una les funcions.
6) Anima't a fer la funció potència amb un bucle for.
7) Inclou la funció arrel quadrada usant la llibreria <math>
// programa nombres primers entre 2 i 1000
#include<stdio.h>
int i;
int primer(int num);
void main() {
for(i=2;i<=1000;i++)
if(primer(i)) printf("%d, ",i);
getchar();
}
int primer(int num)
{
int i=2;
int prim=1;
while((i<num)&&(prim))
{
prim=(num%i!=0);
i++;
}
return prim;
}
#include
char c;
int main()
{
do
{
printf("Hola classe\n");
do
{
printf("Vols repetir? s/n: ");
scanf("%s",&c);
} while((c!='s')&&(c!='n'));
} while(c=='s');
return 0;
}
#include
void hanoi(int n,int com, int aux, int fin);
int main(){
char com='A';
char aux='B';
char fi='C';
int n;
printf("\NOMBRE DE DISCOS: ");
scanf("%d",&n);
fflush(stdin);
printf("\n\nELS MOVIMENTS A REALITZAR SÓN: \n");
hanoi(n,com,aux,fi);
return 0;
}
void hanoi(int n,int com, int aux, int fi){
if(n==1){
printf("%c->%c",com,fi);
}
else {
hanoi(n-1,com,fi,aux);
printf("\n%c->%c\n",com,fi);
hanoi(n-1,aux,com,fi);
}
}
Exercicis senzills amb explicacions
Per estudiar un mateix algoritme en C, C++ i Java
Ejercicios de C. Nivel Universitario
Fòrum de suport al programari Dec-C++
http://foro.elhacker.net/programacion_cc/como_hacer_un_ping_en_c-t263095.0.html
/*
Antonio Sánchez Camacho
Práctica Septiembre Redes, Scaner TCP.
*/
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <fcntl.h>
#include <ip_icmp.h>
#include <string.h>
#define DEFAULT_INIT_PORT 1 /* puerto inicial del escaneo por defecto */
#define DEFAULT_END_PORT 1024 /* puerto final del escaneo por defecto */
#define DEFAULT_ICMP_PORT 8765 /* puerto por defecto para mandar los paquetes ICMP */
int main(int argc, char *argv[])
{
int sockfd,numbytes,flags,listen; //descriptor del socket, número de bytes enviados, flags y resultado del connect()
int init_port, end_port; //variables de inicio y fin del escaneo
int result,fromlen; //resultado del select, y tamaño del ICMP de respuesta
struct hostent *he; //variable de tipo hostent donde se guardará información del Host a escanear
struct sockaddr_in their_addr; // almacenarán la direccion IP del Host objetivo, y sus datos
static u_char paquete_salida[64]; //paquete de salida ICMP
register struct icmp *cabecera_icmp = (struct icmp *) paquete_salida; //formato de paquete ICMP
fd_set fd_leer,fd_escribir; //descriptores a controlar por select
struct timeval tv; //temporizador para el uso de select
char recv_ICMP[512],shost[100];
struct servent *bar; //guardará el nombre del servicio que corre en cada puerto
int i,val,len=sizeof(val); //contador, resultado getsockopt
/* Chequeo de la correcta llamada al programa y de sus argumentos*/
switch (argc)
{
case 2: init_port= DEFAULT_INIT_PORT;
end_port= DEFAULT_END_PORT;
break;
case 3: init_port= atoi(argv[2]);
end_port= DEFAULT_END_PORT;
break;
case 4: if (atoi(argv[3])>atoi(argv[2]))
{
init_port= atoi(argv[2]);
end_port= atoi(argv[3]);
}
else
{
fprintf(stderr,"\n\nEl puerto final debe ser MAYOR que el inicial\n\n");
exit(1);
}
break;
default: fprintf(stderr,"\n\nuso: scaner_tcp host [puerto_inicial puerto_final]\n\n");
exit(1);
}
/* convertimos el hostname a su direccion IP */
if ((he= (void *) gethostbyname(argv[1])) == NULL)
{
error("gethostbyname");
exit(1);
}
/* Creamos el socket */
if ((sockfd = socket(AF_INET, SOCK_RAW,1)) == -1)
{
perror("socket");
exit(1);
}
/* configuramos la dirección a donde conectarnos */
their_addr.sin_family = AF_INET; // host byte order
their_addr.sin_port = htons(DEFAULT_ICMP_PORT); /* network byte order */
their_addr.sin_addr = *((struct in_addr *)he->h_addr); // dirección IP
bzero(&(their_addr.sin_zero), 8);
sprintf(shost,"%d.%d.%d.%d",(unsigned char)he->h_addr_list[0][0],(unsigned char)he->h_addr_list[0][1],(unsigned char)he->h_addr_list[0][2],\
(unsigned char)he->h_addr_list[0][3]);
/* configuración cabecera mensaje ICMP */
cabecera_icmp->icmp_type = ICMP_ECHO; // Tipo de mensajes ICMP
cabecera_icmp->icmp_code = 0; // Código de mensaje ICMP
cabecera_icmp->icmp_cksum = 0; // Checksum del paquete ICMP
cabecera_icmp->icmp_seq =1; // Numero de secuencia
cabecera_icmp->icmp_id = 0x1111; // ID de paquete
/* Transmitimos el paquete ICMP */
if ((numbytes=sendto(sockfd, &paquete_salida, 64, 0, (struct sockaddr *)&their_addr, sizeof(struct sockaddr))) == -1)
{
perror("sendto");
exit(1);
}
else printf("\nPaquete ICMP enviado, número de bytes= %i\n\n",numbytes);
do {
FD_ZERO(&fd_leer); // pone a 0 todos los bits de fd_var.
FD_SET(sockfd, &fd_leer); //activa en fd_leer el bit correspondiente al descriptor sockfd
tv.tv_sec=2; // 2 segundos de tiempo de espera para recibir la respuesta al ICMP
tv.tv_usec=0;
result = select(sockfd +1, &fd_leer, NULL, NULL, &tv);
} while (result == -1 && errno == EINTR);
if (result > 0) {
if (FD_ISSET(sockfd, &fd_leer)) {
/* El socket tiene datos para leer */
result = recvfrom(sockfd, recv_ICMP, sizeof recv_ICMP, 0, NULL, &fromlen);
if (result == 0) {
/* Conexión cerrada por el host */
printf("\nEl host ha cerrado la conexión.\n\n");
close(sockfd);
}
else {
/* Se leyeron los datos de respuesta ICMP */
printf("\nEl host está activo,procederemos a chequear los servicios...\n");
close(sockfd);
printf("Escaneando %s - TCP ports %i al %i\n\n", shost, init_port, end_port);
for (i=init_port;i<=end_port;i++)
{
/*
Comprobamos puerto a puerto si tienen servicios corriendo o no, lo hacemos con la función connect(),
pero antes hacemos que el socket no sea bloqueante mediante la función fcntl().
Cuando se configura un socket como no bloqueante, y la conexión no se ha completado
inmediatamente, la función connect () devuelve como código de retorno -1 y como código
de error en al variable de sistema errno EINPROGRESS, indicando que la conexión todavía
no se ha completado, pero se sigue intentando.
Para detectar cuando se completa la conexión, se utiliza la función select ()
*/
sockfd = socket (AF_INET, SOCK_STREAM, 0);
flags = fcntl (sockfd, F_GETFL, 0);
fcntl (sockfd, F_SETFL, O_NONBLOCK | flags);
their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(i);
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(their_addr.sin_zero), 8);
listen= connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr));
if (listen<0)
{
/*Si el connect no se conecta inmediatamente, controlamos con el SELECT()*/
do {
FD_ZERO(&fd_escribir);
FD_SET(sockfd, &fd_escribir);
result = select(sockfd +1, NULL, &fd_escribir, NULL, NULL);
} while (result == -1 && errno == EINTR);
if (result > 0)
{
if (FD_ISSET(sockfd, &fd_escribir)){
/*Si se puede escribir en el descriptor comprobamos la salida de getsockopt()*/
getsockopt(sockfd, SOL_SOCKET, SO_ERROR,&val, &len);
if (val==0){
/*EISCONN*/
bar = getservbyport(htons(i),"tcp");
printf("%d (%s) está corriendo.\n",i,( !bar ) ? "Desconocido" : bar->s_name);
}
/*ELSE ECONNREFUSED*/
}
}
}
else
{
/*El connect se conectó inmediatamente*/
bar = getservbyport(htons(i),"tcp");
printf("%d (%s) está corriendo.\n",i,( !bar ) ? "Desconocido" : bar->s_name);
}
close(sockfd);
}
}
}
else {
/* Expiró el temporizador */
printf("\nEl host no parece estar activo.\n\n");
close(sockfd);
exit(1);
}
printf("\nFin de escaneo.\n\n");
exit(1);
}//FIN_MAIN
}
Llegir caràcters no numèrics des de teclat.
Entrada i sortida de caràcters
Quines són les diferències entre: getch(), getche() i getchar()?
Estudia aquest codi per implementar a la teua calculadora.
char opcion;
int terminar = 0; do {
scanf("%c%*c",&opcion); //Perquè feim això? opcion = toupper(opcion); // Què fa aquesta sentència? switch (opcion) { // Per a què podria servir-te aquesta instrucció?
case '1': printf("\nOpció 1\n"); suma (a, b); break;
case 'Q': printf("\nTerminación del programa\n"); terminar = 1; break; default: break; } //Final switch() } while (!terminar);