
25. Teoria
- Integrações Clipper e Btrieve
26. Montagem
de Cadastro
27. Integrações
APÊNDICE
I - BIBLIOGRAFIA E PROGRAMA DO CURSO
APÊNDICE
II - Lista de Exercícios Bimestrais
APÊNDICE
III - Respostas de Alguns Exercícios Propostos
| Montagem de Cadastro |
Sugestões:
Lembramos que o Turbo C possui mais recursos que o Classic C, porém erros neste compilador são potencialmente muito mais complicados de serem encontrados e corrigidos do que falhas similares no Classic C.Todas as diretivas para o processador devem ser iniciadas com o sinal #, que deverá estar no início da linha.
#define <identificador> <definição>Exemplo:
#define PI 3.14159 #define quadrado(a) (a)*(a)Assim se no programa existir:
y = quadrado(x-2);a expressão será interpretada como y = (x-2) * (x-2);
#include <arquivo>Exemplo:
#include "stdio.h"Devemos observar que existem poucos comandos na linguagem C, e que a maioria das funções deve ser escrita em C. Isto realmente ocorre, porém os produtores dos compiladores C fornecem todas estar funções previamente escritas para seus
compiladores, necessitando apenas serem "incluídas" nos programas pelo programador conforme for necessário.
Nada impede que desenvolvamos novas bibliotecas específicas a nossas necessidades que poderão facilmente ser transportadas entre ambientes (D.O.S. e Unix por exemplo).
#undef <identificador>Faz com que o #define atribuído a algum identificador seja cancelado.
Exemplo:
#define teste 100 #if teste > 50 #else #endif
Se existir é retornado Verdadeiro.
ifndef <identificador> permite verificar se certo identificador foi definido.
Se não existir é retornado Verdadeiro.
#define pi 3.14159
main()
#ifndef eu
printf("'eu' não foi definido.\n");
#endif
#ifndef pi
printf("Nunca será executado, pois pi existe!\n");
#endif
Exemplo:
main()
{
union data
{
int dia;
int mes;
int ano;
};
union data d;
d.dia = 30;
printf("%d\n",d.dia);
d.mes = 3;
printf("%d\n",d.mes);
printf("%d\n",sizeof(d));
}
| Teoria/Laboratório - Integrações |
Programa em Clipper
TelaLs = 04 TelaCe = 14 TelaLi = 23 TelaCd = 67 Tela = SaveScreen(TelaLs,TelaCe,TelaLi,TelaCd) Atributo = "RB/N" C_CHCOLOR(@Tela,Atributo) Return
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <bios.h>
#include <mem.h>
#include <string.h>
#include <nandef.h>
#include <extend.h>
/* SO ACEITA LETRAS MAIUSCULA */
#define B 0x01
#define G 0x02
#define R 0x04
#define W 0x07
#define BB 0x10
#define BG 0x20
#define BR 0x40
#define BW 0x70
#define I 0x08
#define BLI 0x80
#define MAXATRIB 20
#define VIDEO 0xB800
CLIPPER c_chcolor()
{
register int i,j;
unsigned int len_tel;
char *tela,atr ;
if ( PCOUNT != 2 || !ISCHAR(1) || !ISCHAR(2) ) {
printf( "parametro incorreto em c_chcolor \n" ) ;
exit( 2 ) ;
}
tela = _parc( 1 );
len_tel = _parcsiz( 1 );
atr = _atr_color( _parc(2) , _parclen(2) );
for ( i=1 ; i<len_tel ; i=i+2 )
tela[ i ] = atr ;
retni(0) ;
return ;
}
/* str_atr - 'WNBGR*+/WNBGR*+' retorna o caracter atributo da cor */
int _atr_color( char *str_atr , int len_atr )
{
register int i ;
char atr=0x00 ;
int charpos ;
if (( charpos = _charpos( str_atr, '/' , len_atr )) != 0 ) {
for ( i=1+charpos ; i < len_atr && str_atr[ i ] != ',' ; i++ ) {
switch(str_atr[i]) {
case 'B' : atr = atr|BB ; break ;
case 'G' : atr = atr|BG ; break ;
case 'R' : atr = atr|BR ; break ;
case 'W' : atr = atr|BW ; break ;
case '*' : atr = atr|BLI ; break ;
case '+' : atr = atr|I ;
}
}
}
for (i = 0;i < len_atr && str_atr[i] != '/' && str_atr[i] != ',';i++){
switch(str_atr[i]) {
case 'B' : atr = atr|B ; break ;
case 'G' : atr = atr|G ; break ;
case 'R' : atr = atr|R ; break ;
case 'W' : atr = atr|W ; break ;
case '*' : atr = atr|BLI ; break ;
case '+' : atr = atr|I ;
}
}
return( atr );
}
/* retorna a posicao do caracter na string */
int _charpos( char *string , char charac , int len_str )
{
register int charpos ;
for( charpos = 0 ; charpos < len_str ; charpos++ )
if( string[charpos] == charac )
return( charpos ) ;
return( 0 ) ;
}
Exemplo: Busca de uma Chave (Função 9 do Btrieve)
strcpy(chave,"AMARELO"); /* string */
funcao = 9; /* inteiro */
buffer = 128; /* inteiro */
canal = fp; /* ponteiro de arquivo */
/* retorno é uma variável previamente criada para acomodar o tamanho de
um registro */
status = 0; /* inteiro */
call btrv(funcao,canal,buffer,chave,retorno,status);
Status deverá assumir valor 4 se a chave não existir, 0 se existir e um número qualquer entre 1 e 99 indicando que tipo de erro ocorreu.
De fato o Btrieve, por ser o mais utilizado e também por pertencer a uma empresa bastante poderosa (Novell, que adquiriu a SoftCraft produtora original deste programa), foi o único gerenciador que "sobreviveu" a era xBase. Com o retorno das linguagens acima citadas e com o desinteresse da Novell em adequar o Btrieve aos novos dialetos surgidos das linguagens de 3ª geração, criou-se um mercado promissor que Borland (DBE) e Microsoft (ODBC) estão agora disputando. Em favor da Microsoft temos o fato de seu pacote interagir muito bem com o Visual BASIC e o Visual C, pacotes de grande utilização no mercado americano (principalmente o primeiro). Os pontos positivos da Borland residem no suporte de seu gerenciador ao acesso por registro, além do acesso via SQL (Structed Query Language), que é a linguagem padrão (sic) de acesso aos Bancos de Dados mais utilizados (Oracle, SyBase, Informix e Ingres), além da perfeita interação de seu programa com o Borland C++, a versão de linguagem C mais utilizada para desenvolvimento nos Estados Unidos.
| APÊNDICE I - BIBLIOGRAFIA E PROGRAMA DO CURSO |
a saber:
| Apêndice II - Lista de Exercícios Bimestrais |
declare i,j,k leia k se k > 100 para i de 1 até 4 faça leia j se j > 7 imprima j senão leia j se j = 10 imprima k senão imprima j
declare i,j,k,r leia j,k para i de j até k faça r = resto(i/2) if r = 0 então imprima i
main()
{
int i,j,l;
printf("Entre com 2 números: ");
scanf("%d%,&i); scanf("%d",&j);
if (i > j)
l = i + j;
else
l = i;
printf("%d",l);
}
O que faz este programa
Simule para i = 2, j = 3 e para j = 5 e i = 2
Caso trocássemos "scanf("%d",&i)" por "scanf(i)", o que aconteceria.
Leia a, b, c Se a < b então d <-- a Se a < c então d <-- a Se b < c então d <-- b imprima d
i < 20 --> 3 i = 20 --> 4 5 6 i > 20 e i < 50 --> 5 6 i = 50 --> 6 i > 50 e i < 75 --> 7 8 i >= 75 --> 9 i = 90 --> 8
main()
{
int x,y;
for (x = 1, y = 2; x + y < 20; x = y++ + x + 1)
printf("%d",x+y);
}
for (x = 1, y = 2; x + y < 20; x = ++y + x + 1)
printf("%d",x+y);
y = 2;
principal declarar i=0,j=1,m,k como inteiras imprima i,j para k de 1 até 20 faça m = i + j imprima m i = j j = m7- Dado o Programa a seguir:
main()
{
int y,a;
printf("Digite um valor: ");
scanf("%d",&a);
for(y=a;y<=100;y++);
printf("%d",y);
for(y=100;y>0;y--) {
printf("%d\n",y);
a=y+5;
}
printf("%d",a);
}
Simule, o que será
impresso?
O programador cometeu um erro lógico. Identifique-o, corrigindo o programa.
Rescreva o programa, sem usar o comando "for".
principal declarar i,j,k,t como inteiras a como matriz de inteiros com 11 elementos leia i,j para k de i até j faça imprima linha em branco para t de 0 até 10 faça a[t] = k * t imprima k,t,a[t]
Programa X i,n,j <-- Inteiro A <-- Matriz de Inteiros Limpar a Tela Leia n (Limite da Série) j <-- 1 Para i que varia de 1 até n faça Se resto (i/4) = 0 então A[j] <-- i j <-- j + 1 Para i que varia de 1 até j faça Imprima A[j]
Elabore Algoritmos, Programas em C e Simulações.
main()
char c,*pc,d;
{
c = 'A';
*pc = c;
d = &pc;
printf("%c",d);
}
O programador deseja
transferir o valor da variável "c" para "d" usando ponteiros.
O que ocorre quando executado o programa acima, simule.
Programa correto, se necessário.
Comente a utilização do ponteiro neste programa, na versão acima.
main()
{
char a = '1', b = '9';
Troca(&a,&b);
printf("%c e %c",a,b);
}
main()
int i,k,*pi,*pk;
{
i = 2; k = 0;
puts("Qual será o valor de k? ");
*pk = i;
pk = &k;
printf("%d",k);
}
Simule a execução deste programa
Qual é o valor de k após a execução. Justifique.
Se trocarmos "*pk = i" por "pk = &i" o que ocorreria.
Caso seja necessário, corrija este programa para que no seu final "k" ter o valor de "i".
Elabore Algoritmos, Programas em C e Simulações.| Apêndice III - Respostas de Alguns Exercícios Propostos |
main()
{
printf("Hello, world!\n");
}
main()
{
char ac[80];
int format, n;
char *acpoint;
for(n = 1; n < 8; n++){
format = n;
dostime(ac, format);
printf("Acessando a funcao 'dostime' no formato,;
%d que representa: ",format);
puts(ac);
}
}
main()
{
char c;
printf("Digite 1, 2 ou 3 ou outro caracter:");
c = getch();
switch © {
case '1':
puts("\nVoce Escolheu 1");
case '2':
puts("\nVoce Escolheu 2");
break;
case '3':
puts("\nVoce Escolheu 3");
break;
default:
puts("\nVoce Escolheu algo diferente de 1,2 ou 3");
}
puts("Fim!");
}
main()
{
char ac[80];
int j,i,ini,fim,n,nao;
double r;
cls();
printf("Digite extremo inferior: "); scanf("%d",&ini);
printf("\nDigite extremo superior: ");scanf("%d",&fim);
dostime(ac, 2);
puts(ac);
for(i=ini;i<=fim;i++) {
nao = 1;
if (i % 2 == 0)
nao = 0;
else {
j = 3;
r = i;
r = sqrt( r );
while (j<=r) {
if (i % j == 0) {
nao = 0;
break;
}
j =j + 2;
}
}
if (nao || i == 2)
printf("%d ",i);
}
printf("\n");
dostime(ac, 2);
puts(ac);
}
struct date {
int day;
int month;
char mon_name[12];
};
main()
{
static struct date months[3] = { {5,1,"JANEIRO"}, {4,2,"FEVEREIRO"},
{10,3,"MARCO"} };
int a;
struct date *p_months;
p_months=&months[1]; /* observe que o 1o. esta' armazenado */
/* na posicao 0 */
/* da matriz, sempre usada em C. */
Portanto Fevereiro sera' o 2o. mes */
printf("Nome do Mes No. %d e': %s.",;
p_months->month, p_months->mon_name);
}
main()
{
FILE *fo;
char c, dest[25];
int i;
char *cp;
double d;
printf("Arquivo a ser Criado: ");
gets(dest);
if((fo = fopen(dest,"w")) == NULL) {
printf("Nao posso criar %s\n",dest);
exit();
}
c = 'A';
i = 999;
cp = "String criada para exemplo.";
d = 123.456;
fprintf(fo,"%c %d %s %lf\n", c, i, cp, d);
fclose(fo);
puts("Resposta Correta (no arquivo):A 999 String criada ;
para exemplo. 123.456000");
}
main()
{
FILE *ler;
int i;
char x;
char name[50];
double d;
if((ler = fopen("TESTE.TST","r")) == NULL) {
puts("Nao Posso Abrir TESTE.TST");
exit();
}
fscanf(ler,"%c %d %s %lf", &x, &i, name, &d);
printf("%c %d %s %lf", x, i, name, d);
}
main()
{
int ret;
FILE *fi, *fo;
char c, source[50], dest[50];
printf("Nome do Arquivo: ");
gets(source);
fi = fopen(source, "w+");
ret = fputs("abcdefghijklmnopqrstuvwxyz", fi);
fclose(fi);
puts("Feito");
}
/* programa leitor de arquivo, semelhante ao type do DOS */
#define MAXLEN 80
main()
{
FILE *fi;
char source[25], line[MAXLEN], *p;
printf("Nome do Arquivo: ");
gets(source);
if((fi = fopen(source, "r")) == NULL) {
printf("\tNao posso abrir %s\n",source);
exit();
}
p = line;
while(p != NULL) {
p = fgets(line,MAXLEN,fi);
printf(line);
}
fclose(fi);
puts("\n{FEITO}");
}
main()
{
int n,i,j,l,p;
printf("Digite um numero: ");
scanf("%d",&n);
i=0;
j=1;
printf("%d %d ",i,j);
for(l=1;l<=n-2;l++) {
p=i+j;
printf("%d ",p);
i=j;
j=p;
}
}
main()
{
int x;
soma(&x)
printf("\nO valor digitado foi %d\n",x);
}
soma(z)
int *z;
{
int y;
printf("Digite um Valor: ");
scanf("%d",&y);
*z=y;
}