C++

Informática. Llenguatges de programació # Lenguajes de programación. Comandes. Tipus de dades. Operacions. Llibreries de funcions. Punters

  • Enviado por: Adrià Vergés Dalit
  • Idioma: catalán
  • País: España España
  • 9 páginas
publicidad
publicidad

LLENGUATGE DE PROGRAMACIÓ EN C++

1. Utilització de comandes del compilador.

- Utilitzem el compilador Borland C (BC3.1++) en versió MS-DOS.

- Algunes de les opcions que ens dóna el programa són les següents:

CTRL+F1 Pantalla d'ajuda referent a cada instrucció o comanda, on també apareixen cadascuna de les llibreries assignades pel programa. Per veure-la clicar prèviament sobre cada instrucció.

ALT+F5 Per visualitzar els resultats per pantalla un cop compilat i executat el programa.

F8 Execució línia a línia del programa principal.

F7 Execució línia a línia de cadascuna de les funcions a les que cridem.

CTRL+F7 Visualització del contingut de cada variable.

CTRL+F8 Breakpoint = = punt de ruptura. Punts on el programa peta.

CTRL+F2 Sortir de l'opció (*)Debug.

(*) Debug = = “ treure el bitxo “ = = veure els errors del programa.

2. Tipus de dades en C.

INT Nombre enter (16 bits) 216 valors representats [ -32K , 32K ].

UNSIGNED INT Nombre natural o enter sense signe (16 bits) [ 0 , 64K ].

LONG Nombre enter llarg (32 bits) 232 valors representats [ -2G , 2G ].

UNSIGNED LONG Nombre enter llarg (32 bits) sense signe [ 0 , 4G ].

FLOAT Nombre real de 32 bits. [ -" , +" ].

CHAR Caràcter (8 bits) 28 = 256 caràcters diferents segons el codi ASCII.

UNSIGNED CHAR Tipus de dades idèntic a char.

3. Operacions a realitzar en C.

OPERACIONS ARITMÈTIQUES.

a = a + 3 SUMA a = b % 3 RESTE DE LA DIVISIÓ DE b / 3

b = b - 1 RESTA a = b ASIGNACIÓ DE VALORS

a = a * 3 PRODUCTE a + + INCREMENT EN UNA UNITAT

a = a / 5 DIVISIÓ a - - DECREMENT EN UNA UNITAT

if ( a = = 3 ) COMPARA UNA IGUALTAT.

if ( a ! = 3 ) COMPARA SI ÉS DIFERENT DE 3.

if ( a < 3 ) COMPARA SI ÉS MENOR QUE 3.

if ( a > 3 ) COMPARA SI ÉS MAJOR QUE 3.

if ( a < = 3 ) COMPARA SI ÉS MENOR O IGUAL QUE 3.

if ( a > = 3 ) COMPARA SI ÉS MAJOR O IGUAL QUE 3.

Existeix també la possibilitat de realitzar altres funcions matemàtiques com per exemple les trigonomètriques. Per això s'hauran de crear les llibreries corresponents.

OPERACIONS LÒGIQUES.

A && B AND A & B AND BIT A BIT

A || B OR A | B OR BIT A BIT

A ^ B XOR

! A NOT

B = A << 2 DESPLAÇAMENT DE 2 POSICIONS CAP A L'ESQUERRA.

Exemple: A = 0 0 0 0 0 1 1 1

B = 0 0 0 1 1 1 0 0

B = A >> 2 DESPLAÇAMENT DE 2 POSICIONS CAP A LA DRETA.

Exemple: A = 0 1 1 1 0 0 0 0

B = 0 0 0 1 1 1 0 0

4. Exemples d'instruccions en C.

Ex1: Pintar un text per pantalla.

# include “stdio.h” Llibreria associada a cada instrucció

void main ( ) Programa principal que no retorna cap valor de sortida

{

printf ( “Hola” );

}

Ex2: Pintar un text per pantalla i esperar a la pulsació d'una tecla.

#include “stdio.h”

#include “conio.h”

void main ( ) Programa principal que no retorna cap valor de sortida

{

clrscr( );

printf ( “Hola” );

getch ( );

}

Ex3: Comparació d'un caràcter.

#include “stdio.h“

#include “conio.h“

void main ( )

{

char c; Declaració d'una variable de tipus caràcter.

c=getch( );

if ( c = = `f ` )

{

printf ( “Hola”); Pinta per pantalla el text “Hola”.

}

else

{

printf ( “ NO F ”); Pinta per pantalla el text “NO F”.

}

}

Ex4: Exemple d'esquema de cerca.

#include “stdio.h”

#include “conio.h”

void main ( )

{

char c; Declaració d'una variable de tipus caràcter.

c = `a'; Asignació del caràcter `a' com a valor de la variable c.

while ( c != `f `)

{

printf ( “No acabo”); Pinta per pantalla el text “No acabo”

c= getch ( ); Espera la pulsació d'un caràcter.

}

printf ( “Acabo”); Pinta per pantalla el text “Acabo”.

}

Aquest programa mostra per pantalla el missatge NO ACABO i demana la pulsació d'una tecla per sortir mentre el valor del caràcter c sigui diferent de `f `.

Ex5: Exemple d'esquema de recorregut.

#include “stdio.h”

void main ( )

{

int a; Declaració d'una variable entera.

for ( a = 0; a < 7; a++ )

{

printf( “Hola”); Si printf ( “ Hola \n”); llavors salt de línia després del text.

printf( “Numero : %d \ n “,a);

}

}

Programa que mostra 7 vegades el missatge “Hola “ per pantalla i els valors que va prenent la variable a des de 0 fins a 6.

5. Altres exemples d'instruccions en C.

FUNCIÓ SCANF.

scanf ( “ % d”,a); DEMANA EL VALOR DE LA VARIABLE a .

scanf ( “ % d”,& a); DEMANA EL VALOR DE L'ADREÇA DE MEMÒRIA DE a.

En general, la funció SCANF s'utilitza per demanar a l'usuari que introdueixi un valor des de fora. També es pot utilitzar per introduir cadenes de caràcters.

UTILITZACIÓ DE FITXERS EN C.

f =fopen ( “nomfitxer.dat”,”wb”); OBRE UN FITXER PER ESCRIURE DADES.

fwrite ( a, 1, 1, f ); ESCRIU SOBRE EL FITXER EL VALOR DE LA VARIABLE a.

fprintf ( f, “El número es: %d”, a ); EFECTUA UN printf SOBRE EL FITXER f.

fclose ( f ); TANCA EL FITXER ASSIGNAT A f.

Aquestes 4 funcions són alguns dels exemples que trobem sobre utilització de fitxers.

Quan en un fprintf volem indicar salts de línia, haurem d'utilitzar la instrucció \r\n

6. Crida a funcions en C.

ESTRUCTURA GENERAL D'UNA FUNCIÓ.

Tipus de var que retorna Nom funció (Tipus de var entrada nom var entrada)

Exemple: Crearem una funció que sumarà 2 nombres enters.

#include “stdio.h”

int suma ( int a, int b ) Donades les variables d'entrada a i b, definim la funció suma.

{

int c; Declaració d'una variable entera que serà el resultat retornat per la funció.

c= a+b;

return ( c );

}

void main ( ) Començament del programa principal.

{

int x, y, z;

x = 3;

y = 5;

z = suma ( x, y ); Crida de la funció suma definida anteriorment.

printf ( “result : %d “, z );

}

7. Tipus derivats en C.

DECLARACIÓ DE TAULES I/O CADENES DE CARÀCTERS.

int Tau [8]; DECLARACIÓ D'UNA TAULA QUE CONTÉ 8 NOMBRES ENTERS.

char Tauc [16]; DECLARACIÓ D'UNA TAULA QUE CONTÉ 16 CARÀCTERS.

Tau [3] = 25; ASSIGNEM EL VALOR 25 AL TERCER ELEMENT DE LA TAULA.

Tauc [3] = `a'; ASSIGNEM EL CARÀCTER `a' AL TERCER ELEMENT TAULA.

TREBALLAR AMB PUNTERS A MEMÒRIA.

Un punter és una variable, la qual emmagatzema un valor d'una adreça de memòria.

Un punter, que de fet no deixa de ser un registre, té associats bàsicament 3 valors:

  • L'adreça on és troba el punter dins la memòria.

  • L'adreça que emmagatzema el punter.

  • El valor que es troba contingut dins l'adreça de memòria que emmagatzema el punter.

  • L'adreça a la qual es fa referència en a) es tracta d'una adreça fixa, mentre que l'adreça a la qual es fa referència en b) és una adreça variable.

    Exemple : Programa tutorial sobre punters.

    1 # include “ stdio.h “

    2 void main ( )

    3 {

    4 char c;

    • printf (“El punter de c es : % p\n”, & c);

    • char *p;

    • printf (“L'adreça de memòria on es troba emmagatzemat p és : % p\n”, & p);

    • p = & c;

    • c = `x';

    • printf (“El valor assignat a p és : % p\n”, p);

    • printf (“ L'adreça de memòria on es troba emmagatzemat p és : % p\n”, & p);

    • printf (“ El valor emmagatzemat dins la posició a on apunta el punter és : % c\n”, *p);

    • printf (“ El valor de c és : % c\n”, c);

    • --------------------------------------------------------------------------------------------------------

    • char a;

    • printf (“El punter de a és : % p\n”, & a);

    • p = & a;

    • a = `z';

    • printf (“El valor assignat a p és : % p\n”, p);

    • printf (“L'adreça de memòria on es troba emmagatzemat p és : % p\n”, & p);

    • printf (“El valor emmagatzemat dins la posició a on apunta el punter és : % c\n”, *p);

    • printf (“El valor de a és : % c\n”, a);

    • }

    COMENTARIS SOBRE L'EXEMPLE..

    4. / * Declaració d'una variable c de tipus caràcter. * /

    5. / * Mostrem per pantalla el valor de l'adreça on es troba la variable c. * /

    6. / * Declarem una variable de tipus punter que emmagatzemarà un caràcter. * /

    7. / * Mostrem per pantalla el valor de l'adreça de memòria on es troba emmagatzemat el punter. * /

    8. / * Assignem al punter el valor de l'adreça de la variable c. * /

    9. / * Assignem a la variable c el valor del caràcter `x'. * /

    10. / * Mostrem per pantalla el valor del punter p, es a dir, l'adreça de c.* /

    11. / * Mostrem per pantalla el valor de l'adreça de memòria on es troba emmagatzemat el punter, és a dir, el mateix que hem fet a 7. * /

    12. / * Mostrem per pantalla el valor contingut dins la posició a on apunta el punter. * /

    13. / * Mostrem per pantalla el valor de la variable c. * /

    15. / * Ara declarem un altra variable, també de tipus caràcter, que serà a. * /

    16. / * Mostrem per pantalla l'adreça de a. * /

    17. / * Ara al punter li assignem l'adreça de a. * /

    18. / * Al valor a li assignem el caràcter `z'. * /

    19. / * Mostrem per pantalla el valor de p, que serà ara l'adreça de a. * /

    20. / * Mostrem per pantalla el valor de l'adreça on es troba guardat el punter, que sempre serà el mateix. * /

    21. / * Mostrem per pantalla el valor que es troba dins la posició on apunta p, es a dir, en aquest cas, el valor és a. * /

    22. / * Mostrem per pantalla el valor de la variable a, que en aquest cas es tracta del caràcter `z'. * /

    8. Estructures bàsiques de memòria.

    PILA = Estructura de tipus LIFO. L'últim element que entra a la PILA és el primer en sortir.

    CUA = Estructura de tipus FIFO. El primer element q entra a la CUA és el primer també en sortir.

    9. Enllaç d'una llibreria amb codi de funcions i programa principal (prova).

    En aquest apartat s'expliquen conceptes relacionats amb la interacció, per part del compilador Borland C (BC3.1++), de tres elements utilitzats a l'hora de crear llibreries de funcions.

    Aquests tres elements a descriure són :

  • Descripció de les llibreries creades i les seves corresponents funcions.

  • Fitxer descriptiu del codi corresponent a cadascuna d'aquestes funcions.

  • Programa principal de prova a on es realitza la crida de dites funcions.

  • Sobre aquests elements, especificar que el primer de tots ells es tracta d'un fitxer de capçalera (*.H), mentre que els altres dos restants, es tracten de dos fitxers de codi (*.C).

    MODIFICACIÓ DEL DIRECTORI ARREL DE TREBALL.

    Per tal de compatibilitzar els tres tipus de fitxers creats, de manera que al compilador li sigui possible reconeixer tant les funcions definides com les llibreries o tipus de dades creades, és necessari que tots tres fitxers s'executin dins del mateix directori o unitat de disc. En cas contrari apareixerien errors en el procés de linkat (compilació del projecte sencer).

    Per realitzar aquest pas, seleccionar les següents opcions de la barra de menú superior.

    OPTIONS DIRECTORIES INCLUDE

    Un cop seleccionades les opcions, apareixerà una petita finestra de diàleg a on s'especifica en primer lloc la ruta d'accés al directori de treball creat per defecte, i en segón lloc utilitzant una separació amb punt i coma es definirà el directori arrel de treball modificat a utilitzar a l'hora d'executar el projecte.

    Nota:El directori modificat només s'especificarà en cas de realitzar dita modificació. No serà necessari indicar-lo en cas contrari.

    C :\ BORLANDC \ INCLUDE ; X :\ on X és el nom del directori (C, A, F...)

    Ruta directori de treball per Directori modificat (si s'escau)

    defecte

    CREACIÓ D'UN PROJECTE D'ENLLAÇ.

    Un cop definit el directori de treball en el projecte, el següent pas consistirà en indicar quins fitxers en total formaran part del mateix. Això és el que es coneix com a creació de projecte d'enllaç, donat que no es fa altra cosa que enllaçar el fitxer de programa principal amb el fitxer de codi a on es troben les funcions implementades i el fitxer de capçalera a on s'han definit els tipus de dades i llibreries.

    El procediment a seguir per a la creació del projecte és el següent:

  • PROJECT OPEN PROJECT. Carregar el fitxer (*.PRJ) corresponent al projecte. Apareix una finestra a la part inferior de la pantalla.

  • PROJECT ADD ITEM. Definició del llistat de fitxers que engloben el projecte (Només fitxers *.C).

  • LINKAT DEL PROJECTE D'ENLLAÇ.

    Quan tenim un projecte creat (fitxer *.PRJ), aleshores com a últim pas previ a la seva execució, realitzarem el procés de linkat d'aquest fitxer. Per això seleccionarem en el menú horitzontal superior l'opció :

    COMPILE BUILD ALL (En el cas de linkar el fitxer *.PRJ).

    LINK (En el cas de linkar un sol fitxer de codi *.C).

    10. Accés a camps creats dins d'un tipus de variable.

    En el llenguatge C++, existeix la possibilitat de crear un tipus de variable, la qual estigui composta per altres variables alhora. A cadascuna d'aquestes variables s'anomenen camps d'una variable, que en aquest cas seran camps associats a la variable principal creada.

    Per accedir a un camp qualsevol d'una variable, s'especificaran el nom de la variable i el seu respectiu camp d'accés separat per un punt.

    Nom variable . camp 1 . camp 2 . ..... . camp n

    Exemple :

  • Suposem una variable creada d'un tipus qualsevol, que pot ser creat també per l'usuari o no. Aquesta variable rebrà el nom de AGENDA i es tractarà d'una variable de tipus també anomenat AGENDA, que alhora serà creat per l'usuari donat que aquest tipus inicialment no es troba identificat.

  • Dins de la variable AGENDA es poden definir una sèrie de variables o camps que poden formar part d'ella, com ara per exemple poden ser el camps nom, cognoms, edat, adreça, telèfon, etc....

    Inicialment dins del fitxer de capçalera i prèviament a la descripció de les llibreries, s'hauria de definir l'estructura d'aquest tipus de variable “compost”. El codi en C++ que defineix una estructura d'aquest tipus és el següent.

    typedef struct AGENDA Tipus de variable.

    {

    char Nom [10];

    char Cognoms [20];

    unsigned int Edat; Definició camps variable.

    char Adreça [25];

    char Telefon [9];

    }

    AGENDA Nom variable

  • Ara com que ja tenim definida l'estructura corresponent a aquest tipus de variable, podrem direccionar qualsevol dels valors que aquesta contingui, mitjançant una instrucció en un punt qualsevol del nostre programa principal.

  • Tal i com s'ha dit abans la manera d'accedir a la informació d'un camp qualsevol dins la variable AGENDA és la segúent:

    AGENDA . Edat = 20; / * Assignació del valor 20 al camp Edat * /

    AGENDA . Nom = `Adria'; / * Assignació del string `Adria' al camp Nom * /

    AGENDA . Cognoms = `Verges Dalit'; / * Assignació del string corresponent * /

    11. Càsting aplicat a un tipus de paràmetres.

    Hi ha vegades en que, en llenguatge C++, ens interessa que un tipus de variable actuï “disfressada” d'un altre tipus.

    Exemple :

    Tenim la declaració d'un punter a char que es troba apuntant a una posició de memòria a on es troba una variable de tipus float, que en aquest cas es tracta del direccionament Missatge . Info . Dada. Per tant, en aquest cas, aquesta assignació, d'entrada no seria vàlida, donat que no podem assignar el valor d'un float a un char.

    char * pnt;

    pnt = & (Missatge.Info.Dada) ;

    Solució :

    Fem que el valor del camp o direccionament al qual volem accedir actui com un char, i d'aquesta manera, l'assignació ja és compatible.

    pnt = (char * ) & (Missatge.Info.Dada) ;

    12. Treballar amb comunicació sèrie RS-232-C.

    Aquest és el procés a seguir en quan a configuració del sistema operatiu en el cas de treballar amb aplicacions basades en la comunicació sèrie RS-232-C amb el compilador Borland C (BC3.1++) en versió MS-DOS. (S.O. utilitzat Win 98).

    PANELL CONTROL SISTEMA PUERTOS COM

    CONFIGURACIÓN COM1 / 2

    AVANZADA

    NO UTILIZAR ARRANCAR SISTEMA

    BUFFERS FIFO EN MODE MS - DOS