A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Slides Prof. Jean SIMÃO Revisão: Prof. João FABRO

Apresentações semelhantes


Apresentação em tema: "Slides Prof. Jean SIMÃO Revisão: Prof. João FABRO"— Transcrição da apresentação:

1 Slides Prof. Jean SIMÃO Revisão: Prof. João FABRO
Linguagem C “Alocação de Memória”. Slides Prof. Jean SIMÃO Revisão: Prof. João FABRO Jean Marcelo SIMÃO

2 Memória Pilha Heap Memória Volátil de acesso aleatório (RAM)
Variáveis Globais “Código do Programa” Memória Volátil de acesso aleatório (RAM) Um mapa conceitual da memória de um programa em C. Memória Permanente

3 Alocação para Caracteres
Primeiro Exemplo Alocação para Caracteres

4 Alocação de Memória #include <stdlib.h> #include <stdio.h>
#include <string.h> int main() { // Definição de um ponteiro para a caracter char *s; // Variável inteira int t; // Alocação de memória na Heap para comportar 80 bytes (i.e. 80 caracteres) s = malloc ( 80 * sizeof ( char ) ); if ( s ) printf ( "Ok Memoria alocada \n" ); } // Se a memória não foi alocada if ( !s ) // Mensagem de falha printf ( "Falha na solicitação de memória. \n" ); // Sair do programa exit( 1 );

5 // Mensagem e leitura de string!!!
printf ( "Digite uma frase: \n" ); // Se lê o ponteiro de caracteres tal qual se lê um vetor de caracteres // mesmo porque ponteiros para vetores de caracteres podem ser vistos como tal gets ( s ); // Repetir do último elemento do "vetor" até o primeiro elemento. // Obs: strlen fornece o tamanho de "vetores“ for ( t = strlen (s) -1; t >= 0; t-- ) { // Imprime um caracter na tela. putchar ( s [ t ] ); } // Pula linha printf ( " \n " ); // Libera a memória alocada para s. free ( s ); system ("Pause"); return 0;

6 Alocação de Matrizes de Inteiros
Segundo Exemplo Alocação de Matrizes de Inteiros

7 Alocação de Matrizes de Inteiros
Suponha que você deseje calcular as primeiras 4 potências dos primeiros 5 números inteiros: Numero (N) N ^ 1 N ^ 2 N ^ 3 N ^ 4 1 2 4 8 16 3 9 27 81 64 256 5 25 125 625

8 // Programa que imprime as potencias de 1 a 4 dos números de 1 a 5.
#include <stdio.h> #include <stdlib.h> // Cabeçalho de funções int pwr ( int a, int b ); // função para o cálculo de potências void table (int p[4][5); // função para o armazenamento das potências em um tabela void show (int p[4][5]); // função para mostrar o coteúdo da tabela. int main() { int *p = NULL; // Ponteiro para inteiro // Alocação de memória equivalente ao espaço de 40 inteiros. // Sizeof(int) fornece o tamanho de um inteiro (normalmente dois bytes). p = malloc ( 4 * 5 * sizeof ( int ) ); if ( !p ) // Se a memória não foi alocada... printf ( "Falha na solicitação de memória. \n" ); system ( "Pause" ); exit ( 1 ); } // Note que para ambas as funções abaixo se passa um 'vetor por parâmetro. // Na verdade é um ponteiro de inteiro que aponta para (o início de) um // conjunto de elementos que se comporta como um vetor... // Entretanto, as funções estão preparadas para receber matrizes 4x 5... // mas o C consegue 'transformar' o ponteiro numa matriz... table ( p ); // Cria a tabela de potências... show ( p ); // Mostra a tabela de potências... free ( p ); return 0;

9 void show ( int p[4][5] ) { register int i, j; printf ( "%10s %10s %10s %10s \n", " N ", " N^2 ", " N^3 ", " N^4 " ); for ( j = 1; j <= 10; j++ ) for ( i = 1; i <= 4; i++ ) printf ( " %10d ", p[i-1][j-1] ); } printf ( " \n " ); int pwr ( int a, int b ) { register int t = 1; for (; b; b--) t = t * a; } return t; void table ( int p [4][5] ) { register int i, j; for ( j = 1; j <= 5; j++ ) for ( i = 1; i <= 4; i++ ) p [i-1] [j-1] = pwr ( j , i ); }

10 Alocação de Inteiros – Matrizes de tamanho definido pelo usuário
Terceiro Exemplo Alocação de Inteiros – Matrizes de tamanho definido pelo usuário

11 Alocação de Matrizes de Inteiros
Suponha agora que você deseje calcular as primeiras X potências dos primeiros N números inteiros: (Ex: N=5, X=3) Numero (N) N ^ 1 N ^ 2 N ^ 3 N ^ 4 1 2 4 8 16 3 9 27 81 64 256 5 25 125 625

12 // Programa que imprime as potencias de 1 a x dos números de 1 a n.
#include <stdio.h> #include <stdlib.h> // Cabeçalho de funções int pwr ( int a, int b ); // função para o cálculo de potências void table (int *p, int n, int x); // função para o armazenamento das potências em um tabela de tamanho N por X void show (int *p, int n, int x); // função para mostrar o coteúdo da tabela. int main() { int *p = NULL; // Ponteiro para inteiro int x; // quantas potencias deseja calcular int n; // para quantos numeros deseja calcular a potencia printf(“Digite a quantidade de numeros que deseja tabular:”); scanf(“%d”, &n); printf(“Digite a quantidade de potencias que deseja tabular:”); scanf(“%d”, &x); // Alocação de memória equivalente ao espaço de N * X inteiros. // sizeof(int) fornece o tamanho de um inteiro . p = malloc ( n*x* sizeof ( int ) ); if ( !p ) // Se a memória não foi alocada... printf ( "Falha na alocacao de memoria. \n" ); system ( "Pause" ); exit ( 1 ); } // Note que para ambas as funções abaixo se passa um ponteiro para area alocada table ( p, n, x ); // Cria a tabela de potências... show ( p , n, x); // Mostra a tabela de potências... free ( p ); return 0;

13 void show ( int *p, int MaiorNumero, int MaiorPotencia)
{ int i, j; for ( i = 1; i <= MaiorPotencia; i++ ) printf ( " N ^ %d ", i ); } printf ( " \n " ); for ( i = 1; i <=MaiorNumero; i++ ) printf(“for ( j = 1; j < MaiorPotencia; j++ ) printf ( " %10d ", *(p+(i-1)*MaiorPotencia+(j-1) ) ); int pwr ( int a, int b ) { int t = 1; int i; for (i=1;i < b; i++) t = t * a; } return t; void table ( int *p, int MaiorNumero, int MaiorPotencia) { int i, j; for ( i = 1; i <= MaiorNumero; i++ ) for ( j = 1; j < MaiorPotencia; j++ ) *(p + (i-1)*MaiorPotencia + (j-1) ) = pwr ( i , j ); }

14 Alocação de Estruturas
Quarto Exemplo Alocação de Estruturas

15 #include <stdio.h>
#include <stdlib.h> struct Pessoa { int Idade; char Nome [100]; }; int main () struct Pessoa *ListaP; ListaP = NULL; int quantidade = 0; int conta = 0; float media = 0; int i = 0; printf ( "Quantas pessoas você irá cadastrar? \n" ); scanf ( "%d", &quantidade ); ListaP = malloc ( quantidade * sizeof ( struct Pessoa ) ); printf ( " \n " ); for ( i = 0; i < quantidade; i++ ) printf ( " Digite o nome da %d a. pessoa: \n ", i+1 ); scanf ( "%s", ListaP[i].Nome ); // gets ... printf ( "Digite a idade da %d a. pessoa: \n", i+1 ); scanf ( "%d", &ListaP[i].Idade ); conta = conta + ListaP[i].Idade; printf("\n"); } media = (float)(conta / quantidade); printf ( " A média de idade é: %.2f anos. \n", media ); printf ( "\n" ); free ( ListaP ); system ( "Pause" ); return 0; }

16 Tipo Definido typedef

17 #include <stdio.h>
#include <stdlib.h> struct Pessoa { int Idade; char Nome [100]; }; int main() typedef int INTEIRO; typedef float REAL; typedef struct Pessoa CIDADAO; CIDADAO *ListaC = NULL; INTEIRO quantidade = 0; INTEIRO conta = 0; REAL media = 0; INTEIRO i = 0; printf ( "Quantos cidadãos vc irá cadastrar? \n" ); scanf ( "%d", &quantidade ); ListaC = malloc ( quantidade * sizeof ( CIDADAO ) ); printf ( "\n" ); for ( i = 0; i < quantidade; i = i + 1 ) { printf ( " Digite o nome do %d o. cidadão: \n ", i+1 ); scanf ( "%s", ListaC[i].Nome ); printf ( " Digite a idade do %d o. cidadão: \n ", i+1 ); scanf ( "%d", &ListaC[i].Idade ); conta = conta + ListaC[i].Idade; } media = (REAL)(conta / quantidade); printf ( "A média de idade é: %f anos. \n", media ); free ( ListaC ); system ( "Pause" ); return 0;


Carregar ppt "Slides Prof. Jean SIMÃO Revisão: Prof. João FABRO"

Apresentações semelhantes


Anúncios Google