Você está na página 1de 7

V - Lista de Exerccios de SO e Lab.

Assunto: Ponteiros e Arquivos CTIG


Prof. Ricardo W . Saad

1-) Escreva um programa em C para criar um arquivo texto, com informaes fornecidas pelo usurio
no formatadas.

2-) Escreva um programa em C para ler um arquivo texto j criado.

3-) Digite o programa abaixo, o programa que grava uma, mas somente uma string ou caracter
por vez em um arquivo de dados. solicitada ao usurio a entrada do nome do arquivo a ser
criado, em seguida pede ao usurio que entre com um caracter ou uma string e tecle return. A
funo que realiza a escrita no arquivo putc(); Melhore esse programa para que se possa dar
entrada em vrios dados, que sero gravados sob a forma de string e no formatados, como nos
arquivos anteriores.

#include "stdio.h"
#include "conio.h"

void main(void)
{
FILE *meu_arquivo;
char *nome_do_arquivo, letras;
nome_do_arquivo = '\0';
printf("Entre com o nome do arquivo, o ponto e a extenso: ");
scanf("%c",nome_do_arquivo);
meu_arquivo=fopen(nome_do_arquivo, "w");
printf("Digite um caracter ou uma string: ");
while((letras=getche()) != '\r')
putc(letras,meu_arquivo);
fclose(meu_arquivo);
}

4) \* Programa que l um arquivo no formatado que foi gravado segundo as idias do exemplo
anterior. Estude as aplicaes possveis para os diversos tipos de criao e leitura de
arquivos. A funo para leitura getc().

#include "stdio.h"
#include "conio.h"

void main(void)
{
FILE *meu_arquivo;
char *nome_do_arquivo, letra;

nome_do_arquivo= '\0';
printf("Entre com o nome do arquivo, o ponto e a extenso : ");
scanf("%c",nome_do_arquivo);

meu_arquivo=fopen(nome_do_arquivo, "r");
while((letra=getc(meu_arquivo)) != EOF)
printf("%c",letra);
fclose(meu_arquivo);
getch();
}

5-) /* Este programa cria um arquivo que l linhas contendo strings com comprimento de at
80 caracteres. A funo para escrita no arquivo : fputs(). Note que o salto de linha deve ser
mandado tambm para o arquivo usando-se o comando fputs("\n",nomearqv), onde nomearqv
o nome do arquivo visvel no programa, criado por um comando de atribuio da funo
fopen().

#include "stdio.h"
#include "string.h"
void main(void)
{
FILE *arqv;
char *nome_arqv, frase[81];
nome_arqv= '\0';
printf("Entre com o nome do arquivo, o ponto e a extenso: ");
scanf("%c",nome_arqv);
arqv=fopen(nome_arqv,"w");
printf("Digite uma linha [max. 80 caracteres] e tecle return: \n\n");
getchar(); /* para esvaziar o buffer */
while(strlen(gets(frase)) > 1)
{
fputs(frase,arqv);
fputs("\n",arqv);
}
fclose(arqv);
}

6-) \* Programa que l um arquivo e imprime na tela linha por linha */

#include "stdio.h"
#include "string.h"
#include "conio.h"

void main(void)
{
FILE *arqv;
char *nome_arqv, frase[81];
nome_arqv ='\0';
printf("Entre com o nome do arquivo, o pontio e a extenso: ");
scanf("%c",nome_arqv);
arqv=fopen(nome_arqv,"r");
printf("saida de arquivo texto linha por linha: \n\n");
while(fgets(frase,80,arqv) != NULL)
{
printf("%s",frase);
}
fclose(arqv);
getch();
}

7-) Escreva o programa de Criptografia Cifra de Cesar ,utilizando os conceitos de arquivos
de forma a substituir a gerao dos criptogramas em vetor por arquivos.

8-) Faa o mesmo do exerccio 7 para os algoritmos de Criptografia, Substituio Simples e
Polialfabetica.

9-) Escreva um programa para Criptografar qualquer arquivo que o usurio desejar, usando o
algoritmos da Cifra de Cesar.

10-) Digite o programa abaixo e verifique o que ele realiza.
Programa: crip_arq.c

ALFABETO b A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
SUBSTI// 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Algoritmo: C = (M + T) / 27 (mod)
Onde: C = CIFRA
M = MENSAGEM
T = CHAVE - chave = 15
Mod 27 = Rsto da divisao por 27
Na cifragem os valores menores que 27 sao considerados o proprio resto.
Para Decodificacao:
M = C - T
Proposto:
1-) Para executar quantas vezes o usuario desejar
2-) Para aceitar letras minusculas.
3-) Para caracteres nao previstos.
4-) Acrescentar condio de abertura para todos arquivos , idem lerarq() e criaarq()*/

#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "ctype.h"
#include "string.h"
#define PATHE "c:\\tc\\c\\" /* Define uma macro como caminho para o diretrio */
char alfa[26]; /* Vetor para o alfabeto */
int n,verdade;
char *nome_arq;
char *nome_arq1; /* Ponteiros para os nomes dos arquivos */
char *nome_arq2;
char nome[12];
char nome1[12]; /* String para os nomes dos arquivos */
char nome2[12];
char desti[20];
char desti1[20]; /*String para o PATH + nome */
char desti2[20];

void main()
{
FILE *fptr1;
FILE *fptrnew; /* Ponteiros para os arquivos */
char ch;
char op,cd,ok;
int i,j,t,chavet,resto,conta;
void inici(void);
void criaarq(void); /* Prototipo das funes */
void lerarq(void);
nome_arq='\0';
nome_arq1='\0'; /* Inicializao dos ponteiros */
nome_arq2='\0';
i=1;
verdade=1;
chavet=15;
clrscr();
inici(); /* Chamada a funo inici() */
printf("\n\tDeseja criar arquivo S/N ?");
scanf("%c",&ok);
ok=toupper(ok);
if(ok=='S')
{
printf("\n\tDigite o nome do arquivo, o ponto e a extenso:\n");
printf("%s",PATHE);
scanf("%s",&nome); /* Nome do arquivo a ser gerado */

strcat(desti,PATHE);
strcat(desti,nome);/* Retorna a concatenao entre PATHE e nome */
nome_arq=desti;

printf("\n\tDigite os caracteres do arquivo !\n\n ");
criaarq();
if(verdade==0)
return; /* Chamada a funo que cria um arquivo */
printf("\n\n\tArquivo Criado\n\n");
lerarq();
if(verdade==0)
return; /* Chamada a funo que l e imprime um arquivo */
}
t=1;
printf("\n\nDeseja criptografar ou descriptografar ? C/D ");
while(t)
{
scanf("%c",&cd);
cd=toupper(cd);
if((cd=='C') || (cd=='D'))
t=0;
}

conta=0;
resto=0;
if(cd=='C')
{
printf("\n\tNome do arquivo que ira conter o Criptograma e sua extenso:\n");
printf("%s",PATHE);
scanf("%s",&nome1); /* Nome do arquivo Criptograma */
strcat(desti1,PATHE);
strcat(desti1,nome1);/* Retorna a concatenao entre PATHE e nome1 */
nome_arq1=desti1;
printf("\n");
printf("\n\tArquivo Criptografado\n\n");
fptr1=fopen(nome_arq,"r"); /* Ponteiro para o arquivo a ser Criptografado (modo r) */
fptrnew=fopen(nome_arq1,"w"); /* Ponteiro para o arquivo que ira conter o Criptograma
(modo w)*/
while((ch=getc(fptr1)) != EOF)
{
for(i=0;i<=26;i++)
{
if(ch==alfa[i])
{
conta=(i+chavet);
if(conta<27)
{
i=conta;
ch=alfa[i];
i=28;
}
else
{
resto=(conta-27);
i=resto;
ch=alfa[i];
i=28;
}
}
}
putc(ch,fptrnew);
if(ch == 13) /* Testa se e ENTER*/
{
printf("\n");
fprintf(fptrnew,"\n"); /* Grava o fim de linha no arquivo */
}
printf("%c",ch);
}
fclose(fptr1);
fclose(fptrnew); /* Fecha os arquivos */
}
else
{
printf("\n\tDigite o nome do arquivo Criptografado e a extenso:\n");
printf("%s",PATHE);
scanf("%s",&nome1);
printf("\n\tDigite o nome do arquivo, que contera o Descriptograma:\n");
printf("%s",PATHE);
scanf("%s",&nome2);

strcat(desti1,PATHE);
strcat(desti1,nome1);/* Retorna a concatenao entre PATHE e nome1 */
nome_arq1=desti1;
strcat(desti2,PATHE);
strcat(desti2,nome2);/* Retorna a concatenao entre PATHE e nome1 */
nome_arq2=desti2;
fptr1=fopen(nome_arq1,"r");
fptrnew=fopen(nome_arq2,"w");
printf("\n\tArquivo Descriptografada\n\n");
while((ch=getc(fptr1)) != EOF)
{
for(i=0;i<=26;i++)
{
if(ch==alfa[i])
{
if(i>15)
{
conta=abs(i-chavet);
i=conta;
ch=alfa[i];
i=28;
}
else
{
resto=(i+27);
i=(resto-chavet);
ch=alfa[i];
i=28;
}
}
}
putc(ch,fptrnew);
if(ch == 13)
{
printf("\n");
fprintf(fptrnew,"\n");
}
printf("%c",ch);
}
fclose(fptrnew);
fclose(fptr1);
}
i=getche();
}

void inici(void)
{
int i,j;
for(i=0;i<=26;i++)
alfa[i]=' ';
j=1;
for(i=65;i<=95;i++)
{
alfa[j]=i;
j++;
}
alfa[0]='b';
}

void criaarq()
{
FILE *fptr;
char ch;
if((fptr=fopen(nome_arq,"w"))==NULL) /* Testa se o arquivo pode ser aberto */
{
printf("\n****************************************");
printf("\n**** O Arquivo no pode ser aberto ****");
printf("\n********** Fim do Programa ************");
printf("\n****************************************");
getch();
verdade=0;
}
else
{
while((ch=getche()) != 27)
{
ch=toupper(ch);
putc(ch,fptr);
if(ch == 13)
{
printf("\n");
fprintf(fptr,"\n");
}
}
fclose(fptr);
}
}

void lerarq()
{
FILE *fptr2;
char ch;
int x;
if((fptr2=fopen(nome_arq,"r"))==NULL)
{
printf("\n****************************************");
printf("\n**** O Arquivo no pode ser aberto ****");
printf("\n********** Fim do Programa ************");
printf("\n****************************************");
getch();
verdade=0;
}
else
{
while((ch=getc(fptr2)) != EOF)
{
x=ch;
if(x==13)
printf("\n");
printf("%c",ch);
}
fclose(fptr2);
}
}