A maior rede de estudos do Brasil

Grátis
59 pág.
livro Programacao C - Respostas+dos+exercícios+propostos+C

Pré-visualização | Página 6 de 8

*s)
{
int i, n;
char *Aux;
i = 0;
while (s[i] != ' ')
i = i + 1;
Aux = Copia(s, i, 0);
return (Aux);
}
main()
{
char Nome[40], Identificacao[40];
int i;
printf("Digite o nome: ");
gets(Nome);
strcpy(Identificacao, UltimoSobrenome(Nome));
strcat(Identificacao, "/");
strcat(Identificacao, PrimeiroNome(Nome));
printf("Identificacao: %s \n", Identificacao);
}
8. /*Programa que converte um nome dado para o formato de referência bibliográfica*/
#include <stdio.h>
#include <string.h>
char *Copia(char *s, int n, int p)
{
char *Aux;
int Comp;
Comp = strlen(s);
if (p < Comp)
{
Aux = &s[p];
if (p + n < Comp)
Aux[n] = '\0';
else
Aux[strlen(Aux)] = '\0';
return(Aux);
}
else
return (NULL);
}
/*Funcao que retorna o ultimo sobrenome de um nome de uma pessoa*/
char *UltimoSobrenome(char *s)
{
int i, n, Comp;
char *Aux;
Comp = strlen(s);
i = Comp ­ 1;
n = 0;
while (s[i] != ' ')
{
i = i ­ 1;
n = n + 1;
}
Aux = Copia(s, n, i + 1);
return (Aux);
}
/*Funcao que retorna as iniciiais dos nomes e dos sobrenomens, exceto do último 
sobrenome*/
char *Iniciais(char *s)
{
int i, k, Comp;
char Aux[40];
Aux[0] = s[0];
Aux[1] = '.';
Aux[2] = ' ';
Comp = strlen(s);
k = 3;
for (i = 1; i < Comp ­ 1; i++)
if ((s[i] == ' ') && (s[i+1] != ' '))
{
Aux[k] = s[i+1];
Aux[k+1] = '.';
Aux[k+2] = ' ';
k = k + 3;
}
Aux[k ­ 3] = '\0';
return (Aux);
}
void DeletaCaracteres(char *s, int n, int p)
{
int i,  Comp;
char *Aux;
Comp = strlen(s);
if (p + n <= Comp)
{
i = p;
while (i <= Comp ­ n)
{
s[i] = s[i + n];
i = i + 1;
}
}
else
s[p + 1] = '\0';
}
/*Funcao para verificar se uma string esta contida numa outra string*/
int Pos(char *s1, char *s2)
{
char *Aux;
Aux = strstr(s1, s2);
if (Aux != NULL)
 return(Aux ­ s1);
else
return (­1);
}
/*Funcao para deletar as particulas de, do, dos, da, das, e*/
void DeletaParticulas(char *s, char *Part)
{
int Comp, p;
p = Pos(s, Part);
Comp = strlen(Part);
if ((p != ­1) && (s[p­1] == ' ') && (s[p + Comp] == ' '))
DeletaCaracteres(s, Comp, p);
}
main()
{
char Nome[40], Aux[40], Autor[40];
printf("Digite o nome: ");
gets(Nome);
strcpy(Aux, Nome);
DeletaParticulas(Aux, "de");
DeletaParticulas(Aux, "da");
DeletaParticulas(Aux, "das");
DeletaParticulas(Aux, "do");
DeletaParticulas(Aux, "dos");
DeletaParticulas(Aux, "e");
strcpy(Autor, UltimoSobrenome(Aux));
strcat(Autor, ", ");
strcat(Autor, Iniciais(Aux));
printf("Referencia bibliografica: %s \n", Autor);
}
9. /*Função que retorna uma palavra no formato P A L A V R A*/ 
#include <string.h>
#include <ctype.h>
char *Aviso(char *s)
{
int c, i;
c = strlen(s);
for (i = c; i >= 0; i­­)
{
s[2*i] = toupper(s[i]);
s[2*i ­ 1] = ' ';
}
s[2*i + 1] = '\0';
return s;
}
Capítulo 9
2. /*Funcao que reune dois arquivos de mesma estrutura (definida em struct TRegistro)*/
void ReuneArquivos(char s[12], char s1[12], char s2[12])
{
FILE *p, *p1, *p2;
struct TRegistro r;
int Tam;
Tam = sizeof(r);
p1 = fopen(s1, "rb");
p2 = fopen(s2, "rb");
p = fopen(s, "wb");
fread(&r, Tam, 1, p1);
while (!feof(p1))
{
fwrite(&r, Tam, 1, p);
fread(&r, Tam, 1, p1);
}
fread(&r, Tam, 1, p2);
while (!feof(p2))
{
if (ConsultaRegistro(r.Mat, s1) == ­1)
fwrite(&r, Tam, 1, p);
fread(&r, Tam, 1, p2);
}
fclose(p);
fclose(p1);
fclose(p2);
}
3. /*Programa que gera, a partir de um arquivo contendo nomes e salarios, um arquivo com 
os salarios maiores que 5.000,00*/
#include <stdio.h>
#include <string.h>
struct TRegistro
{
char Nome[40];
float SalBruto;
};
void GeraArquivoAltosSalarios(char *s, char *s1)
{
FILE *p, *t;
struct TRegistro r;
t = fopen(s, "rb");
if (t == NULL)
printf("Arquivo %s nao existe", s);
else
{
p = fopen(s1, "rb");
if (p != NULL)
printf("Arquivo ja existe");
else
{
p = fopen(s1, "wb");
fread(&r, sizeof(r), 1, t);
while (!feof(t))
{
if (r.SalBruto > 5000)
fwrite(&r, sizeof(r), 1, p);
fread(&r, sizeof(r), 1, t);
}
}
}
fclose(p);
fclose(t);
}
main()
{
char NomeArq[12];
printf("Digite o nome do arquivo\n");
scanf("%s", NomeArq);
GeraArquivoAltosSalarios(NomeArq, "AltoSal.arq");
}
4. /*Função que inclui um registro num arquivo ordenado de modo que ele se mantém 
ordenado*/
/*Função que copia o último registro no final do arquivo*/
void CopiaUltimoRegistro(char s[12])
{
struct TRegistro r;
FILE *p;
long Byte, Tam;
p = fopen(s, "rb");
Tam = sizeof(r);
fseek(p, ­Tam, SEEK_END);
fgetpos(p, &Byte);
fsetpos(p, &Byte);
fread(&r, Tam, 1, p);
fclose(p);
p = fopen(s, "ab");
fwrite(&r, Tam, 1, p);
fclose(p);
}
/*Função que determina a posição de inclusão do novo arquivo*/
long PosicaoDeInclusao(struct TRegistro Reg, char s[12])
{
struct TRegistro r;
long Tam, Byte, Pos;
FILE *p;
p = fopen(s, "rb");
Byte = 0;
Tam = sizeof(r);
fread(&r, Tam, 1, p);
while ((!feof(p)) && (strcmp(Reg.Mat, r.Mat) > 0))
{
Byte = Byte + Tam;
fread(&r, Tam, 1, p);
}
fclose(p);
return (Byte);
}
void IncluiRegistroOrdenado(struct TRegistro Reg, char s[12])
{
struct TRegistro r;
long Tam, Byte, Pos;
FILE *p;
Tam = sizeof(r);
Byte = PosicaoDeInclusao(Reg, s);
CopiaUltimoRegistro(s);
p = fopen(s, "rb+");
fseek(p, ­3*Tam, SEEK_END);
fgetpos(p, &Pos);
while (Pos >= Byte)
{
fsetpos(p, &Pos);
fread(&r, Tam, 1, p);
fgetpos(p, &Pos);
fsetpos(p, &Pos);
fwrite(&r, Tam, 1, p);
fgetpos(p, &Pos);
Pos = Pos ­ 3*Tam;
}
fsetpos(p, &Byte);
fwrite(&Reg, Tam, 1, p);
fclose(p);
}
5.  /*Programa   para   reunir   dois   arquivos   ordenados   num   terceiro   arquivo   também 
ordenado*/
#include <stdio.h>
#include <string.h>
struct TRegistro
{
char Mat[4];
char Nome[40];
};
/*Funcao que verifica se um registro com matricula dada pertence ao arquivo*/
int ConsultaRegistro(char s[12], char s1[12])
{
FILE *p;
int Achou = 0;
struct TRegistro r;
fpos_t Byte;
p = fopen(s1, "rb");
fgetpos(p, &Byte);
fread(&r, sizeof(r), 1, p);
while (!feof(p) && !Achou)
      if (strcmp(s, r.Mat) == 0)
Achou = 1;
else
{
fgetpos(p, &Byte);
fread(&r, sizeof(r), 1, p);
}
if (Achou == 0)
return (­1);
else
return(Byte);
}
/*Funcao que copia o ultimo registro no final do arquivo*/
void CopiaUltimoRegistro(char s[12])
{
struct TRegistro r;
FILE *p;
long Byte, Tam;
p = fopen(s, "rb");
Tam = sizeof(r);
fseek(p, ­Tam, SEEK_END);
fgetpos(p, &Byte);
fsetpos(p, &Byte);
fread(&r, Tam, 1, p);
fclose(p);
p = fopen(s, "ab");
fwrite(&r, Tam, 1, p);
fclose(p);
}
/*Funcao que determina a posicao de inclusao de um novo registro*/
long PosicaoDeInclusao(struct TRegistro Reg, char s[12])
{
struct TRegistro r;
long Tam, Byte, Pos;
FILE *p;
p = fopen(s, "rb");
Byte = 0;
Tam = sizeof(r);
fread(&r, Tam, 1, p);
while ((!feof(p)) && (strcmp(Reg.Mat, r.Mat) > 0))
{
Byte = Byte + Tam;
fread(&r, Tam, 1, p);
}
fclose(p);
return (Byte);
}
/*Funcao que inclui um registro num arquivo ordenado de modo que ele se mantenha 
ordenado*/
void IncluiRegistroOrdenado(struct TRegistro Reg, char s[12])
{
struct TRegistro r;
long Tam, Byte, Pos;
FILE *p;
Tam = sizeof(r);
Byte = PosicaoDeInclusao(Reg, s);
CopiaUltimoRegistro(s);
p = fopen(s, "rb+");
fseek(p, ­3*Tam, SEEK_END);
fgetpos(p, &Pos);
while (Pos >= Byte)
{
fsetpos(p, &Pos);
fread(&r, Tam, 1, p);
fgetpos(p, &Pos);
fsetpos(p, &Pos);
fwrite(&r, Tam, 1, p);
fgetpos(p, &Pos);
Pos = Pos ­ 3*Tam;
}
fsetpos(p, &Byte);
fwrite(&Reg, Tam, 1, p);
fclose(p);
}
void GeraArquivoOrdenado(char s1[12], char s2[12], char s[12])
{
int Tam;
FILE *p1, *p2, *p;
struct TRegistro r;
Tam = sizeof(r);
p1 = fopen(s1, "rb");
p = fopen(s, "wb");
fread(&r, Tam, 1, p1);
while (!feof(p1))
{
fwrite(&r, Tam, 1, p);
fread(&r, Tam, 1, p1);
}
fclose(p);
p2 = fopen(s2, "rb");
while (!feof(p2))
{
fread(&r, Tam, 1, p2);
if (ConsultaRegistro(r.Mat, s) == ­1)
IncluiRegistroOrdenado(r, s);
}
fclose(p1);
fclose(p2);
fclose(p);
}
main()
{
struct TRegistro NovoRegistro;
char NomeArq1[12], NomeArq2[12], NomeArq[12];
printf("Digite os nomes dos arquivos a serem reunidos\n");
scanf("%s", NomeArq1);
scanf("%s", NomeArq2);
printf("Digite o nome do novo arquivo");
scanf("%s", NomeArq);
GeraArquivoOrdenado(NomeArq1, NomeArq2, NomeArq);
}
6. /*Programa que gera um arquivo contendo os registros comuns a dois arquivos de