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

Slides:



Advertisements
Apresentações semelhantes
TRATAMENTO DE ARQUIVOS EM C
Advertisements

Um programa em C Bibliotecas Variáveis globais
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
Listas encadeadas Prof. Rosana Palazon.
Programação II Estruturas de Dados
Alocação Dinâmida de Memória
Alocação Dinâmica de Memória
Introdução à Linguagem C
LPG - I: Alocação Dinâmica de Memória - Ponteiros
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Linguagem C Strings.
Vetores, Matrizes e Funções
Vetores, Matrizes e Funções
Ponteiros em Linguagem C
Slides: Prof. João Fabro UTFPR - Curitiba
Armazenamento de Dados em Arquivos
Estruturas de Dados Homogêneas Multidimensionais – Matrizes
Matrizes e Funções - Continuação
Slides: Prof. SIMÃO Revisão: Prof. João Fabro
Slides: Prof. João Fabro UTFPR - Curitiba
Fundamentos de Programação 1
Escola Secundária c/ 3º CEB da Batalha
Revisão da Linguagem C.
Vetor de Ponteiros Exemplo de Alocação. Escrever Vetor de Vetores de floats int main() { int i, k, n; float **vetor; // vetor de vetores int *tamanho;
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Alocação Dinâmica de Memória Professor Mário Dantas
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
PROGRAMAÇÃO ESTRUTURADA II
CADEIA DE CARACTERES (Strings)
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Alocação Dinâmica de Memória
Programação II Estruturas de Dados Aula 02 - continuação
Prof. Ricardo Santos PONTEIROS
Computação Eletrônica
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Algoritmos e Estruturas de Dados
Estruturas de Dados Aula 6: Cadeias de Caracteres
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Prof. Alessandro Gonçalves
Programação de Computadores I – Arquivos
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
INE - UFSC - Disciplina Estruturas de Dados - Prof. Dr. Aldo von Wangenheim Página 1 Estruturas de Dados - T.332 Capítulo 3 Parte 2: Alocação Dinâmica.
Programação de Computadores I – Ponteiros Profa. Mercedes Gonzales Márquez.
Ponteiros em C Prof. Kariston Pereira
Estruturas Homogêneas – Vetores e Matrizes
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Linguagem de Programação
Fundamentos de Programação 1 Slides 18 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Arquivos Seqüências ou de Texto ”.
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C”
Fundamentos de Programação 1 Slides 19 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Arquivos Binários”.
Fundamentos de Programação 1 Aula N. 02 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Laços de Repetição em C”
Fundamentos de Programação 1
Fundamentos de Programação 1 Slides C – Número 4 Prof. SIMÃO Jean Marcelo SIMÃO Estrutura de Dados Homogêneas “vetores de números e de caracteres”
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Fundamentos de Programação 1 Slides 21 Prof.ª Fabiany e Prof. SIMÃO Linguagem C “Lista Encadeada”.
Fundamentos de Programação 1 Slides 22 Prof.ª Fabiany e Prof. SIMÃO Linguagem C “Lista Duplamente Encadeada - Projeto com vários Arquivos”.
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C” 1.
Fundamentos de Programação 1 Slides 18 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Arquivos Seqüências ou de Texto ”. 1.
Fundamentos de Programação 1
Fundamentos de Programação 1
Fundamentos de Programação 1
Fundamentos de Programação 1
Transcrição da apresentação:

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

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

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

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 );

// 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;

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

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

// 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;

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 ); }

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

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

// 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;

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 ); }

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

#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; }

Tipo Definido typedef

#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;