Programação Orientada à Procedimentos II Programação Orientada à Procedimentos I Processamento Paralelo Lógica de Programação Introdução à Computação Informática Básica

 

 

Informática Básica
Introdução à Computação
Lógica de Programação
Programação Orientada à Procedimentos I
Programação Orientada à Procedimentos II

Processamento Paralelo


Uma Possível Solução ...




2- Solicitar ao usuário seu nome e endereço. Gravar estas informações num arquivo de texto. Crie um vetor com 10 elementos do tipo inteiro e preencha-o com valores aleatório de 0 à 50. Armazene todo vetor no arquivo de texto. Armazene somente os 5 primeiros números num arquivo binário. Os arquivos, de texto e binário, deverão ser definido pelo usuário, o qual deverá informar o diretório e o nome do arquivo. Caso o diretório informado não exista, o programa deverá criá-lo. Verificar possíveis erros e imprimir elegantemente o conteúdo do arquivos.

// Elaborado por : Tiago Alexandre Pereira 
// 1o. Eng da Computação A

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

#define tam_nom 50
#define tam_end 200
#define tam_vet 10
#define tam_vet2 20

void main()
{
	/****Declaracao das variaveis utilizadas****/
	char wnom[tam_nom],wend[tam_end],wnomaux[tam_nom]
	char wendaux[tam_end];
	char drive[MAXDRIVE],dir[MAXDIR],file[MAXFILE]
	char ext[MAXEXT],path[MAXPATH];
	char dir2[MAXDIR],arquivo[MAXFILE + MAXDIR],erro,c,*vchar;
	char vchar2[tam_vet2],aux[2];
	int flag,i,vet[tam_vet],vet2[tam_vet],vet3[tam_vet],drvdef;

	//Ponteiro arquivo
	FILE *arq;

	//Valor default do drive
	drvdef = getdisk();

	randomize();
	//Solicitar entrada destino do arquivo a ser gravado
	do
	{
		erro='N';
		clrscr();
		printf("Diretorio destino:\n");
		gets(path);

		//flag=binario(drive|diretorio|arq.|extensao|curingas)
		flag = fnsplit(path,drive,dir,file,ext);

		//Tabela valores flag
		//_______________________________________________
		//|Drive|Diret.|Arq.|Ext.|Curingas| Flag  | Resp.|
		//|  0  |   0  | 0  | 0  |   X    |  0,1  | ERRO |
		//|  0  |   0  | 0  | 1  |   X    |  2,3  | ERRO |
		//|  0  |   0  | 1  | 0  |   X    |  4,5  | ERRO |
		//|  0  |   0  | 1  | 1  |   X    |  6,7  | ERRO |
		//|  0  |   1  | 0  | 0  |   X    |  8,9  | ERRO |
		//|  0  |   1  | 0  | 1  |   X    | 10,11 | ERRO |
		//|  0  |   1  | 1  | 0  |   X    | 12,13 | ERRO |
		//|  0  |   1  | 1  | 1  |   X    | 14,15 | ERRO |
		//|  1  |   0  | 0  | 0  |   X    | 16,17 |  OK* |
		//|  1  |   0  | 0  | 1  |   X    | 18,19 | ERRO |
		//|  1  |   0  | 1  | 0  |   X    | 20,21 |  OK  |
		//|  1  |   0  | 1  | 1  |   X    | 22,23 |  OK  |
		//|  1  |   1  | 0  | 0  |   X    | 24,25 |  OK* |
		//|  1  |   1  | 0  | 1  |   X    | 26,27 | ERRO |
		//|  1  |   1  | 1  | 0  |   X    | 28,29 |  OK  |
		//|  1  |   1  | 1  | 1  |   X    | 30,31 |  OK  |
		//-----------------------------------------------
		// * - Solicitar digitacao do arquivo.

		/***Setar drive para gravacao dos arquivos***/
		if(strcmp(drive,"A:")== 0||strcmp(drive,"a:")==0)
			setdisk(0);
		else
			if(strcmp(drive,"C:")==0||strcmp(drive,"c:")== 0)
				setdisk(2);
			else
				if(strcmp(drive,"D:")==0||strcmp(drive,"d:")==0)
					setdisk(3);
				else
				{
					printf("Drive selecionado invalido. 
					        Validos: A,C,D");
					erro = 'S';
				}

		if(erro=='N')
		{
			erro = 'S';
			//Solicitar digitacao do arquivo
			if (flag ==16||flag == 17||flag == 24||flag == 25)
			{
				do{
					printf("Arquivo:\n");
					gets(arquivo);
					strcpy(file,arquivo);
				}while(arquivo[0]==NULL);
				erro = 'N';
			}
			else
				if((flag>=20&&flag<=23)||flag>=28)
				{
					strcpy(arquivo,file);
					strcat(arquivo,ext);
					erro='N';
				}

			if(erro != 'N')
			{
				printf("Destino invalido.\nPressione qualquer 
				        tecla para continuar...");
				getch();
			}
		}
	}while(erro != 'N');

	/***Setar diretorio para gravacao do arquivo***/
	chdir("\\");  //Setar diretorio a partir da raiz
	int j=0;
	for(i=0;i<=strlen(dir);i++)
	{
		if(dir[i] != '\\')
		{
			dir2[j] = dir[i];
			j++;
		}
		else
			if(i!=0)
			{
				dir2[j]=NULL;
				mkdir(dir2);	//criar diretorio
				chdir(dir2); //apontar path diretorio criado
				j=0;
				dir2[0] = NULL;
			}
	}

	//Criar arquivo texto
	if ((arq = fopen(arquivo,"w")) == NULL)
	{
		printf("Erro na criacao do arquivo.\n");
		erro = 'S';
	}
	else
	{
		//Entradas usuario
		clrscr();
		printf("Nome: ");
		gets(wnom);

		printf("Endereco: ");
		gets(wend);

		//Gravar arquivo
		fputs(wnom,arq);
		fputs("\n",arq);
		fputs(wend,arq);
		fputs("\n",arq);

		//Criar vetor com valores aleatorios e converter em char
		j=0;
		for(i=0;i<10;i++)
		{
			vet[i] = rand()%51;
			itoa(vet[i],vchar,10);

			if(vet[i]<10)
			{
				vchar--;
				*vchar='0';
			}

			fwrite(vchar,sizeof(vchar[i]+1),1,arq);
		}
		fclose(arq);

		if ((arq = fopen(arquivo, "r")) == NULL)
		{
			printf("Erro ao tentar abrir o arquivo.\n");
			erro = 'S';
		}
		else
		{
		  //Leitura do arquivo texto
		  clrscr();
		  printf("Impressao:\n");
		  fgets(wnomaux,sizeof(wnomaux),arq);
		  printf("Nome: %s",wnomaux);
		  fgets(wendaux,sizeof(wendaux),arq);
		  printf("Endereco: %s",wendaux);

		  //Leitura dos valores do vetor no arquivo texto
		  //para gravacao do arquivo binario
		  fgets(vchar2,sizeof(vchar2)+1,arq);
		}
	}
	fclose(arq);

	if (erro=='N')
	{
		//Criar arquivo binario
		strcat(file,".bin");
		if ((arq = fopen(file,"wb")) == NULL)
		{
			printf("Erro na criacao do arquivo.\n");
			erro='S';
		}
		else
		{
			for(i=0;i<10;i++)
			{
				strncpy(aux,vchar2+(i*2),2);
				vet2[i]=atoi(aux);
			}
			fwrite(vet2,sizeof(vet2),1,arq);
		}
		fclose(arq);

		if (erro=='N')
		{
			//Imprimir vetor lido a partir do arquivo binario
			if ((arq = fopen(file,"rb")) == NULL)
				printf("Erro na criacao do arquivo.\n");
			else
			{
				fread(vet3,sizeof(vet3),1,arq);
				printf("Vetor:");
				for(i=0;i<10;i++)
					printf("%d ",vet3[i]);
			}
		}
	}
	//Setar drive defult
	setdisk(drvdef);

	//Aguardar comando para sair do programa
	getch();
}