domingo, 14 de junho de 2020

Vectores e Matrizes - C++


                Vectores, Matrizes    


                   Vectores  

Um vector é uma colecção de variáveis de um mesmo tipo, que compartilham o mesmo nome e que ocupam posições consecutivas de memória. Cada uma dessas variáveis denomina-se elemento e é identificada por um índice. Se é um vector com posições, seus elementos são v[0], v[1], v[2], ..., v[n-1].
Um vetor para armazenar 5 números inteiros pode ser criado da seguinte maneira:

                sintaxe: 

                        vector <type> variable (elements)

                                 int v[5];

                    Inicialização de vectores   
Em C++, vetores globais e estáticos são automaticamente zerados pelo compilador.
Mas, se for desejado, podemos inicializá-los explicitamente no momento em os declaramos. Nesse caso, os valores iniciais devem ser fornecidos entre chavetas e separados por vírgulas.

Exemplo: Inicialização de vector estático:

#include <stdio.h>
void main(void) {
static float moeda[5] = {1.00, 0.50, 0.25, 0.10, 0.05};
...
}

Os valores são armazenados, a partir da posição 0 do vector, na ordem em que são fornecidos; por exemplo, o valor 0.25 é armazenado em moeda[2].
Note que apenas expressões e valores constantes são permitidas numa lista de valores iniciais. O uso de variáveis causa erro de compilação.
Se a lista de valores iniciais tem mais elementos que a capacidade do vector, ocorre um erro de compilação. Entretanto, se tem menos que o necessário, as posições excedentes do vector permanecem zeradas.

Exemplo:
O exemplo a seguir permite inserir os valores do vector via teclado:
#include <iostream>
using namespace std; 
int main () {
int i, num[7];
for (i=0;i<=6;i++){
  cout << "Digite o numero: ";
  cin >> num[i];
 }
cout << num[0] << endl;
cout << num[1] << endl;
cout << num[2] << endl;
cout << num[3] << endl;
cout << num[4] << endl;
cout << num[5] << endl;
cout << num[6] << endl;
return 0;
}


                 Matrizes  

Uma matriz é uma colecção homogénea bidimensional, cujos elementos são distribuídos em linhas e colunas. Se é uma matriz mxn, então suas linhas são indexadas de 0 a m-1 e suas colunas de 0 a n-1. Para acessar um particular elemento de A, escrevemos A[i][j], sendo o número da linha e número da coluna que o elemento ocupa.

ExemploUma matriz 3×4 de números inteiros.
                      int A[3][4];

Essa declaração cria uma matriz cujos elementos ocupam as seguintes posições:
  1. A[0][0], A[0][1], A[0][2], A[0]A[3], A[0][4].
  2. A[1][0], A[1][1], A[1][2], A[1]A[3], A[1][4].
  3. A[2][0], A[2][1], A[2][2], A[2]A[3], A[2][4].
  4. A[3][0], A[3][1], A[3][2], A[3]A[3], A[3][4].

                 Inicialização de Matrizes  
Se lembrarmos que uma matriz nada mais é que um vector cujos elementos são vectores, a sintaxe para a sua inicialização não tem grandes novidades.
#include <iostream>
using namespace std; 
int main () {
int i,t,num[4][4];
for (i=0;i<4;i++){
for(t=0;t<4;t++){
cout << "Digite o numero: ";
cin >> num[i][t];
}
}
for (i=0;i<4;i++){
cout << endl;
for(t=0;t<4;t++){
cout << num[i][t] << " ";
}
}
   return 0;
}


              Exercícios  
1.  Crie tipos de vectores para armazenar:
             a. as letras vogais do alfabeto.
             b. as temperaturas diárias de uma semana.
             c. o número de dias em cada um dos meses do ano.

2. Crie um programa que efectue a leitura de duas strings. Se elas forem iguais exibe a mensagem  “strings iguais” e caso contrário, concatene as duas strings e imprima a string resultante.

3. Crie um programa que efectue a declaração de duas strings com capacidade para 30 caracteres. Leia pela entrada padrão a primeira string. Em seguida, copie o texto da primeira string para a segunda. Mostre no final o conteúdo das duas strings

4. Leia um texto pela entrada padrão com no máximo 99 caracteres. Em seguida imprima o número de caracteres digitados. 

5. Crie um programa que efectua a soma de todos valores de um array unidimensional de qualquer tamanho e mostrar a média.

6. Ordene de forma crescente os seguintes elementos do array (1,8,3,5,7,6,4).

7. Crie um array para exibir o seguinte output:
     08  09  10  11
     12  13  14  15
8. Crie um programa que recebe um valor do tipo inteiro e faça uma busca em um array de 10 elementos. No final devera informar quantos valores foram encontrados ou informar nenhum valor foi encontrado.
Share:

Linguagem C - Tratamento de erros


Tratamento de erros

C - Tratamento de erros

A linguagem C não fornece suporte direto para o tratamento de erros, mas fornece acesso em nível inferior na forma de valores de retorno. A maioria das chamadas de função C ou mesmo Unix retornam -1 ou NULL em caso de erro e configuram um código de erro errno. É definido como uma variável global e indica que ocorreu um erro durante qualquer chamada de função.

Portanto, um programador C pode verificar os valores retornados e executar as ações apropriadas, dependendo do valor  de retorno. É uma boa prática, definir errno como 0 no momento da inicialização de um programa. Um valor 0 indica que não há erro no programa.

 

Funções

A linguagem de programação C fornece funções perror () e strerror () que podem ser usadas para exibir a mensagem de texto associada ao erro.

·         perror () -  exibe a string que recebe como parametro, seguida por dois pontos, um espaço e, em seguida, a representação textual do valor atual do erro.

·         strerror () - retorna um ponteiro para a representação textual do valor atual do erro.

 

Vamos tentar simular uma condição de erro e tentar abrir um arquivo que não existe. Aqui, estou usando as duas funções para mostrar o uso, mas você pode usar uma ou mais maneiras de imprimir seus erros. O segundo ponto importante a ser observado é que você deve usar o fluxo de arquivos stderr  para gerar todos os erros.

#include <stdio.h>
#include <errno.h>
 
extern int errno ;
 
int main () {
 
   FILE * pf;
   int errnum;
   pf = fopen ("ola.txt", "rb");
    
   if (pf == NULL) {
  
      errnum = errno;
      fprintf(stderr, "Valor do erro: %d\n", errno);
      perror("Erro exibido pela função perror");
      fprintf(stderr, "Erro ao tentar abrir o ficheiro: %s\n", strerror( errnum ));
   } else {
  
      fclose (pf);
   }
  
   return 0;
}


Share:

quinta-feira, 4 de junho de 2020

Ficheiros - Linguagem C


          Ficheiros           

Este tópico descreve como os programadores C podem criar, abrir, fechar arquivos de texto ou binários para o armazenamento de dados.

Um arquivo representa uma sequência de bytes, independentemente de ser um arquivo de texto ou binário. A linguagem de programação C fornece acesso a funções de alto nível, bem como chamadas de baixo nível (nível do SO) para manipular arquivos em seus dispositivos de armazenamento.

A biblioteca principal stdio C contém um grande número de rotinas para manipulação de ficheiros/arquivos , antes de realizar qualquer operação é necessário incluir a biblioteca;

    #include <stdio.h>

A declaração da variável de ficheiro é feita através do comando FILE:

    FILE *variavelFile;

Em seguida pode usar a função fopen () para criar um novo arquivo ou abrir um arquivo existente.  Essa chamada inicializará um objeto do tipo FILE, que contém todas as informações necessárias para controlar o fluxo, que é descrita da seguinte forma: 

    variavelFile = fopen (nome,modo);

Onde:

  • variavelFile – é a variável do ficheiro;
  • nome – o nome do ficheiro;
  • modo – indica a acção a ser realizada, r é para leitura, r para escrita, etc;

Veja a seguir algumas opções possíveis e o seu significado:

Modo

Descrição

r

Abre um determinado ficheiro apenas para leitura

w

Abre um determinado ficheiro para escrita e caso não exista cria um novo.

a

Abre um determinado ficheiro para escrita no modo appending  acrescentando a informação ao conteúdo existindo e caso não exista cria um novo é criado.

r++

Abre um arquivo de texto para leitura e gravação

a+

Abre um arquivo de texto para leitura e gravação. Ele cria o arquivo se  não existir. A leitura começará do início, mas a escrita só pode ser anexada.

 

        Funções       

A linguagem C possui várias funções para a manipulação de arquivos:

Função

Descrição

fopen

para criar um novo arquivo ou abrir um  existente

fclose

Fecha um ficheiro aberto

fputc

Grava apenas um caracteres

fprintf

Converte os dados de binário para caracteres e grava no ficheiro

fgetc

Lê apenas um caracteres

fscanf

 Similar ao scanf

EOF

End of file. Fim do ficheiro

 

 

Leitura de ficheiros
As operações de leitura de ficheiros podem ser executadas usando as funções fscanf ou fgets. Ambas as funções executaram as mesmas operações que o scanf e obtém, mas com um parâmetro adicional, o ponteiro do arquivo.

O trecho de código para ler um arquivo é o seguinte:

FILE *ponteiroFicheiro;
ponteiroFicheiro = fopen ("nomedoFicheiro", "r");
fscanf (ponteiroFicheiro, "%s %s %s %d", str1, str2, str3,&ano);



Gravando no ficheiro

As operações de gravação de arquivo podem ser realizadas pelas funções fprintf e fputs com semelhanças com as operações de leitura. 

O trecho de código para gravar no ficheiro é o seguinte:

FILE * ponteiroFicheiro;
ponteiroFicheiro = fopen ("nomedoficheiro.txt", "w");
fprintf (ponteiroFicheiro,"%s% s% s% d", "Nós", "estamos", "em", 2012);



Fechando o ficheiro 

Após todas as operações bem-sucedidas, é necessário fechar o ficheiro. Para fechar um arquivo, recorre-se a função fclose.

O trecho de código para fechar um arquivo é o seguinte:

FILE * ponteiroFicheiro;
ponteiroFicheiro = fopen ("nomedoficheiro.txt", "w");
fclose (ponteiroFicheiro)


Exemplo 

Crie um programa que exibe conteúdo de um ficheiro.

#include <stdio.h>

int main(){

     FILE *fp1;

     char c;

     fp1= fopen ("ola.txt", "r");

     while(1){

        c = fgetc(fp1);

        if(c==EOF)

            break;

        else

            printf("%c", c);

     }

     fclose(fp1);

     return 0;

}


Video aula - Gravando os dados no ficheiro

        Referencias        

1.       https://www.tutorialspoint.com/cprogramming/c_file_io.htm

1.       https://www.geeksforgeeks.org/basics-file-handling-c/


Share:

Seguidores

Visitantes do blog

Pesquisar neste blogue

posts recentes

Traduzir