Tag: Learn C

Guião laboratorial n.º 3 – exercício 6

“O ficheiro “totoloto.txt” contém todas as combinações que saíram desde que o jogo do totoloto começou. Desenvolva um programa que leia do teclado a chave em que um jogador apostou e a compare com cada uma das chaves armazenadas no ficheiro, escrevendo quantos números comuns existem para cada chave.”

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TAM 6

void totoloto(){
FILE *f1;
int ch,i=0, k=0, aux=1;
int tnum=0,contalinhas=0;
int chave[TAM], chavebd[TAM];

f1=fopen("totoloto.txt", "r");

if(f1==NULL){
  printf("\nerro ao abrir o ficheiro");
  return;
}

//pedir numeros ao utilizador
while(tnum<TAM){
  printf("Qual o %d numero?", tnum+1);
  scanf(" %d", &chave[tnum]);
  tnum++;
}
//
printf("\na sua chave:\n");
tnum=0;
while(tnum<6){
  printf("%d\t", chave[tnum]);
  tnum++;
}

printf("\nesta e a chave guardada no ficheiro:\n");
while((ch=fgetc(f1))!=EOF){
printf("%c", ch);
if(ch=='\n'){
  contalinhas++;
}
}
printf("\ntotal de linhas no ficheiro: %d", contalinhas);
fclose(f1);
tnum=0;
//-----------------------
f1=fopen("totoloto.txt", "r");
while(contalinhas>0){
  fscanf(f1,"%d %d %d %d %d %d",&chavebd[0], &chavebd[1], &chavebd[2], &chavebd[3], &chavebd[4], &chavebd[5]);
  for(i=0; i < TAM; i++){
    for(k=0; k < TAM; k++){
        if(chave[i]==chavebd[k]){
          tnum++;
        }
    }
  }
  printf("\nna %d chave total de iguais: %d", aux, tnum);
  aux++;
  tnum=0;
  contalinhas--;
}


fclose(f1);
}


int main()
{
    totoloto();
    return 0;
}


ficheiro TXT usado:
1 2 3 45 44 5
22 2 3 45 44 5
27 2 3 45 44 24
1 2 3 45 44 13
33 2 3 34 44 11

Tags : , ,

Guião laboratorial n.º 3 – exercício 5

Desenvolva uma função que troque o conteúdo de dois ficheiros. Os nomes dos ficheiros são passados como argumentos da função.

#include <stdio.h>
#include <stdlib.h>

void trocaC(char *t1, char *t2){
FILE *f1;
FILE *f2;
FILE *temp1, * temp2;
char chO1,chO2;

f1=fopen(t1, "r");
f2=fopen(t2, "r");
temp1=fopen("temp1.txt", "w");
temp2=fopen("temp2.txt", "w");

if(f1==NULL){
 printf("\nerro ao abrir o ficheiro %c", *t1);
 return;
}
if(f2==NULL){
 printf("\nerro ao abrir o ficheiro %c", *t2);
 return;
}
if(temp1==NULL || temp2==NULL){
 printf("\nerro ao abrir o ficheiro temp");
 return;
}

//-----------------------copiar dos originais para o temporario
while((chO1=fgetc(f1))!=EOF){
fputc(chO1, temp1);
}
while((chO2=fgetc(f2))!=EOF){
fputc(chO2, temp2);
}
printf("\ncopia do ficheiro %c::%c para o temp com sucesso", *t1, *t2);
fclose(temp1);
fclose(temp2);
fclose(f1);
fclose(f2);

//-----------------------copiar do temporario para os originais
temp1=fopen("temp1.txt", "r");
temp2=fopen("temp2.txt", "r");
f1=fopen(t1, "w");
f2=fopen(t2, "w");


while((chO1=fgetc(temp1))!=EOF){
fputc(chO1, f2);
}
while((chO2=fgetc(temp2))!=EOF){
fputc(chO2, f1);
}
fclose(temp1);
fclose(temp2);
fclose(f1);
fclose(f2);

remove("temp1.txt");
remove("temp2.txt");
}


int main()
{
 char s1[20], s2[20];

 printf("Qual o nome do 1 ficheiro?");
 gets(s1);
 printf("Qual o nome do 2 ficheiro?");
 gets(s2);
 trocaC(s1, s2);

 return 0;
}

Tags : , ,

Guião laboratorial n.º 3 – exercício 4

Desenvolva uma função que escreva no monitor uma determinada linha de um ficheiro de texto. O nome do ficheiro e o número da linha são passados como argumentos da função.

#include <stdio.h>
#include <stdlib.h>

void mostraC(char *t1, int linha){
FILE *f1;
char ch;
int i=1;

f1=fopen(t1, "r");

if(f1==NULL){
  printf("\nerro ao abrir o ficheiro %s", t1);
  return;
}

while((ch=fgetc(f1))!=EOF){
  if(i==linha)
  {
    printf("%c", ch);
  }
  if(ch=='\n'){
    i++;
  }
}

printf("\n ..lido tudo com sucesso");

fclose(f1);
}


int main()
{
    char s1[20];
    int l;

    printf("Qual o nome do 1 ficheiro?");
    gets(s1);
    printf("Qual o nome da linha a ler?");
    scanf("%d", &l);
    mostraC(s1, l);

    return 0;
}


Tags : ,

Guião laboratorial n.º 3 – exercício 3

altere a função da questão anterior de modo a garantir que as linhas do texto mostradas na consola surjam numeradas.

#include <stdio.h>
#include <stdlib.h>

void mostraC(char *t1){
FILE *f1;
char ch;
int i=1;

f1=fopen(t1, "r");

if(f1==NULL){
  printf("\nerro ao abrir o ficheiro %s", t1);
  return;
}

printf("\n%d. ",i);
while((ch=fgetc(f1))!=EOF){
printf("%c", ch);
  if(ch=='\n'){
    printf("%d. ",i+1);
    i++;
  }
  }

printf("\n ..lido tudo com sucesso");

fclose(f1);
}


int main()
{
    char s1[20];

    printf("Qual o nome do 1 ficheiro?");
    gets(s1);
    mostraC(s1);

    return 0;
}


Tags : ,

Guião laboratorial n.º 3 – exercício 2

Desenvolva uma função que mostre o conteúdo de um ficheiro de texto na consola. O nome do ficheiro é passado como argumento.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

void mostraC(char *t1){
FILE *f1;
char ch;

f1=fopen(t1, "r");

if(f1==NULL){
  printf("\nerro ao abrir o ficheiro %s", t1);
  return;
}

while((ch=fgetc(f1))!=EOF)
  printf("%c", ch);

printf("\n ..lido tudo com sucesso");

fclose(f1);
}


int main()
{
    char s1[20];

    printf("Qual o nome do 1 ficheiro?");
    gets(s1);
    mostraC(s1);

    return 0;
}


Tags : ,

Guião laboratorial n.º 3 – exercício 1

1. Desenvolva um programa que duplique um ficheiro de texto. A informação de qual o nome do ficheiro original e do nome do novo ficheiro (cópia do original) deve ser feita através da linha de comando.
Exemplo (assumir que o programa se chama copia): ao ser chamado o programa copia com a linha de comando seguinte:
c: \> copia codigo.c novo.txt
é criado um novo ficheiro, novo.txt, que é uma réplica do ficheiro codigo.txt.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

void copia(char *t1, char *t2){


FILE *f1, *f2;
char ch;

f1=fopen(t1, "r");
f2=fopen(t2, "w");
if(f1==NULL){
 printf("\nerro ao abrir o ficheiro %s", t2);
 return;
}
if(f2==NULL){
 printf("\nerro ao abrir o ficheiro %s", t2);
 return;
}

while((ch=fgetc(f1))!=EOF)
 fputc(ch, f2);

printf("\n copia com sucesso");

fclose(f1);
fclose(f2);
}


int main()
{
 char s1[20], s2[20];

 printf("Qual o nome do 1 ficheiro?");
 gets(s1);
 printf("Qual o nome do 2 ficheiro?");
 gets(s2);
 copia(s1, s2);

 return 0;
}


Tags : ,

Guião laboratorial n.º 2 – exercício 4

O aeroporto de Coimbra pretende um programa para gerir a informação relativa às partidas de voos. Cada voo é identificado por: número do voo, nome da companhia, cidade destino e hora de partida (horas e minutos).
a) Crie um tipo estruturado chamado struct tempo que permita armazenar as componentes de uma determinada hora de um dia (horas e minutos).
b) Crie um tipo estruturado chamado struct voo que permita armazenar a informação relativa a um voo. O campo que armazena a hora de partida deve ser do tipo struct tempo.
c) Desenvolva uma função que escreva o conteúdo dos campos de uma variável estruturada do tipo struct voo. A função recebe como argumento a variável já preenchida.
d) Desenvolva uma função que permita introduzir informação relativa a um novo voo. É passado como argumento um ponteiro para a estrutura a inicializar.
e) Desenvolva uma função que altere a hora de partida de um voo. Recebe como argumento um ponteiro para uma estrutura já preenchida e solicita ao utilizador as novas componentes da hora para efetuar a alteração.
f) Desenvolva uma função que verifique se um determinado voo já partiu. Recebe como argumentos uma estrutura do tipo struct voo onde está armazenada a informação do voo e uma estrutura do tipo struct tempo onde está armazenada a hora atual. Devolve 1 se o voo já tiver partido, ou 0, se isso ainda não tiver acontecido.
g) Declare uma tabela que lhe permita armazenar informação relativa a 300 voos. A tabela deve ser uma variável local da função main().
h) Desenvolva uma função que permita adicionar novos voos à tabela. A função recebe como argumentos um ponteiro para o início da tabela e um ponteiro para o inteiro que indica quantos voos existem. É o utilizador que indica quantas novas entradas quer inserir e que especifica a informação relativa a cada um dos novos voos. A função deve atualizar a tabela e o inteiro referenciado pelo segundo argumento, indicando quantos voos passam a existir.
i) Desenvolva uma função que liste a informação completa de todos os voos armazenados na tabela. A função recebe como argumentos um ponteiro para o início da tabela e o número de voos que esta contém.
j) Desenvolva uma função que verifique quais os voos que partem nos próximos 30 minutos. Deve ser escrito o número, o destino e o tempo que falta para a partida de cada um desses voos. Um ponteiro para o início da tabela de voos, o número de elementos que esta contém e a hora atual são passados como argumentos.
k) Desenvolva uma função que retire da tabela todos os voos que já partiram. São passados como argumentos um ponteiro para o início da tabela, um ponteiro para um inteiro que indica quantos voos esta contém e a hora atual. A função deve atualizar a tabela e o contador de voos.
l) Crie um programa que construa um menu com o seguinte formato:
1. Introduzir novos voos
2. Listar todos os voos
3. Listar proximos voos
4. Atualizar tabela de voos
5. Terminar

O programa deve fazer a gestão das seleções que o utilizador for efetuando. Termina a execução quando for selecionada a opção 5.

Sugestão: Utilize a seguinte função para obter a hora atual do sistema. O resultado é devolvido numa estrutura do tipo struct tempo.

#include <stdio.h>
#include <time.h>

/* Estrutura auxiliar para guardar as componentes da hora */
struct tempo{
    int h, m;
};

struct tempo hora_atual()
{
 time_t a;
 struct tm* b;
 struct tempo atual;

 time(&a);
 b = localtime(&a);
 atual.h = b->tm_hour;
 atual.m = b->tm_min;
return atual;
}

 

/* Exemplo de utilização da função hora_atual() */
int main()
{
 struct tempo t = hora_atual();

 printf(" São %2.2d:%2.2d\n", t.h, t.m);
 return 0;
}

Proposta de trabalho: Altere o programa de gestão do aeroporto de modo a que os voos fiquem ordenados na tabela por hora de partida. Efetue as alterações necessárias nas funções que implementou.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define ST_TAM 50
#define MAX 300


// Estrutura auxiliar para armazenar as componentes de uma hora: horas + minutos (alinea a))

struct tempo{
 int h, m;
};

// Estrutura para armazenar informacao sobre um voo (alinea b))

struct voo{
 int num; // Numero do voo
 char companhia[ST_TAM]; // Companhia
 char destino[ST_TAM]; // cidade de destino
 struct tempo hora_p; // Hora de partida
};


// Funcao que obtem a hora do sistema e a devolve numa estrutura do tipo struct tempo
struct tempo hora_atual()
{
 time_t a;
 struct tm* b;
 struct tempo atual;

 time(&a);
 b = localtime(&a);
 atual.h = b->tm_hour;
 atual.m = b->tm_min;
 return atual;
};


// Funcao auxiliar para mostrar o menu e obter a opcao desejada pelo utilizador
// Devolve a opcao selecionada como resultado
int menu()
{
 int op;
 struct tempo t = hora_atual();

 printf("\n%2.2d:%2.2d\n", t.h, t.m);

 printf("\n1 - Introduzir novos voos");
 printf("\n2 - Listar todos os voos");
 printf("\n3 - Listar proximos voos");
 printf("\n4 - Actualizar tabela de voos");
 printf("\n5 - Veriricar se um voo ja partiu");
 printf("\n6 - Terminar");
 do{
 printf("\nOpcao: ");
 scanf("%d", &op);
 }while(op<1 || op>6);
 return op;
}

//------------------- funcoes a implementar

void alineac(struct voo *p, int t){
int i;
printf("\nTotal de registos: %d", t);
for(i=0; i<t;i++, p++){
 //printf("\nvoo: %d\tcompanhia: %s\tindo para: %s\thorario: %d:%d", p->, p[i].companhia, p[i].destino, p[i].hora_p.h, p[i].hora_p.m);
 printf("\nvoo: %d\tcompanhia: %s\tindo para: %s\thorario: %d:%d", p->num, p->companhia, p->destino, p->hora_p.h, p->hora_p.m);
 // printf("\nvoo: %d", p->num);
}

}

void alinead(struct voo *p, int *t, int m){
 char r;
 do{
 printf("\nQuer inserir?");
 scanf(" %c", &r);
 if(r=='s'){
 printf("\n---------------------------");
 printf("\nQual o numero do voo?");
 scanf(" %d", &(p->num));
 printf("Qual o nome da companhia?");
 scanf(" %[^\n]", &(p->companhia));
 printf("Qual o nome do destino?");
 scanf(" %[^\n]", &(p->destino));
 printf("Qual a hora e minutos de partida?");
 scanf("%d %d", &(p->hora_p.h), &(p->hora_p.m));
 (*t)++;
 p=p+(*t);
 }
 }while(r=='s' && *t < m);


}

void alineae(struct voo *p, int t){
 int r, i;

 printf("\nQual o voo que quer alterar? 0 se nenhum");
 scanf(" %d", &r);
 for(i=0; i< t; i++, p++){
 if(r==p->num){
 printf("\n o horario atual e: %d:%d", p->hora_p.h, p->hora_p.m);
 printf("Qual a NOVA hora e minutos de partida?");
 scanf("%d %d", &(p->hora_p.h), &(p->hora_p.m));
 }
 }
}


void alienaf(struct voo *p, int t){
 //nao vai devolver, escreve no final o valor 1 ou 0 dependendo
 int i, sita;
 struct tempo usa = hora_atual();
 for(i=0; i<t;i++, p++){
 if(p->hora_p.h < usa.h && p->hora_p.m < usa.m){
 sita=1;
 }else{
 sita=0;
 }
 printf("\nsituacao: %d\tvoo: %d\tcompanhia: %s\tindo para: %s\thorario: %d:%d", sita, p->num, p->companhia, p->destino, p->hora_p.h, p->hora_p.m);
 }


}

void alienaj(struct voo *p, int t){
 struct tempo usa = hora_atual();
 int i, auxHaM=0, auxHrM=0,y;
 auxHaM=(usa.h*60)+usa.m;
 for(i=0; i<t;i++, p++){
 printf("\n%d:%d-%d:%d", usa.h, usa.m, p->hora_p.h, p->hora_p.m);
 auxHrM=(p->hora_p.h*60)+p->hora_p.m;
 // y= atoi(auxHrM);
 if(auxHrM < auxHaM){
 printf("\n%d\tcompanhia: %s\tindo para: %s\thorario: %d:%d", p->num, p->companhia, p->destino, p->hora_p.h, p->hora_p.m);
 }else{
 printf("\nno can do");
 }
 printf("\n%d-%d", auxHaM, auxHrM);

 }
}


int main(int argc, char *argv[])
{
 int i;

 // Declaracao das variaveis locais: (alinea g)
 struct voo aero[MAX];
 int total=0;

 //alinea c
 struct voo testec ={11,"TAP", "London", {12,30}}, tested;

 /*
 struct voo testec ={
 {11,"TAP", "London", {12, 00}},
 {22,"RYN", "Faro", {13, 30}};
 {33,"TAP", "Paris", {18, 00}};
 {44,"RYN", "NY",{22, 30}}
 };
*/
 // Ciclo principal do programa
 do{
 i=menu();
 switch(i){
 case 1:
 //aliena d
 alinead(&aero, &total, MAX);
 break;
 case 2:
 //aliena c
 alineac(aero, total);

 break;
 case 3:
 //alinea j)
 alienaj(aero, total);
 break;
 case 4:
 //alterar a hora do voo alinea e)
 alineac(aero, total); //listar primeiro
 alineae(&aero, total);

 break;
 case 5:
 //verificar se um voo ja partiu f)
 alienaf(aero, total);
 break;
 }
 }while(i!=6);

 return 0;
}

falta verificar as horas e a ultima aliena… :P

ajuda(atoi): LINK

ajuda(estruturas e arrays): LINK

Tags :

Guião laboratorial n.º 2 – exercício 3

Pretende-se criar uma agenda para armazenar números de telefone (nome, rede e número).
a) Crie um tipo estruturado que lhe permita armazenar essa informação.
b) Declare uma tabela que lhe permita armazenar 100 números de telefones. A tabela deve ser uma variável local da função main().
c) Desenvolva uma função que inicialize uma estrutura do tipo telefone. É passado como argumento um ponteiro para a estrutura a inicializar. Os dados são fornecidos pelo utilizador.
d) Desenvolva uma função que liste todas as pessoas cujo telefone pertença a uma determinada rede. A função recebe como argumentos um ponteiro para o início da tabela, o número de elementos que esta contém e a indicação de qual a rede em causa.
e) Desenvolva uma função que descubra todas as pessoas que vivem na mesma casa. Considere que duas pessoas vivem na mesma casa se tiverem o mesmo número de telefone;
f) Desenvolva uma função para retirar da tabela a informação relativa a uma pessoa cujo nome é passado como parâmetro. Pode assumir que os nomes são únicos.
g) Criar um programa que inicialize tabela com informação sobre determinado número de pessoas (o número de pessoas é introduzido através da linha de comando). A seguir deve listar todas as pessoas que pertencem a uma determinada rede (cuja identificação também é passado como argumento da linha de comando). Finalmente, o programa deve pedir ao utilizador que introduza o nome de uma pessoa para ser retirada da tabela.

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TAM 100

struct agenda{
char nome[20];
char rede[20];
int numero;
};

void preenhcer(struct agenda *a, int *t, int tam){
  char r;
  do{
  printf("\nQuer inserir?");
  scanf(" %c", &r);
    if(r=='s'){
      printf("\n---------------------------");
      printf("\nQual o nome?");
      scanf(" %[^\n]", &(a->nome));
      printf("\nQual a rede?");
      scanf(" %[^\n]", &(a->rede));
      printf("\nQual o numer?");
      scanf(" %d", &(a->numero));
      (*t)++;
      a=a+(*t);
    }
  }while(r=='s' && *t < tam);
}

void listar(struct agenda *l, int *t){
int i, a = *t;

for(i=0;i<a;i++, l++){
  printf("\n%s", l->nome);
  printf("\n%s", l->rede);
  printf("\n%d", l->numero);

}

}

void listar_filtro(struct agenda *l, int t, char *f){
struct agenda *k;
int i;
     printf("\n--------------------------- listar com filtro1 %s", f);

      for(i=0, k=l; i<t; i++, k++){

          if(strcmp(f, k->rede)==0){
            printf("\n%s", k->nome);
            printf("\n%s", k->rede);
            printf("\n%d", k->numero);
          }
      }
}


void listar_filtro2(struct agenda *r, int t, int f){
int i;
 printf("\n--------------------------- listar com filtro2 %d", f);
for(i=0;i<t; i++, r++){
    if(r->numero == f){
      printf("\n %d: %s", i, r->nome);
    }
}
r=0;
}

int retirar(struct agenda *l, int t, char *f){
struct agenda *k;
int i;
     printf("\n--------------------------- retriar da lista: %s", f);

      for(i=0, k=l; i<t; i++, k++, l++){

          if(strcmp(f, k->nome)==0){
            k[i]=k[i+1];
            t=t-1;
          }
      }

return t;
}

void listaR(struct agenda *l, int t){
int i;

for(i=0;i<t;i++, l++){
  printf("\n%s", l->nome);
  printf("\n%s", l->rede);
  printf("\n%d", l->numero);

}

}

int main()
{
  //alinea a
  struct agenda guarda[TAM];
  int t=0;
  preenhcer(guarda, &t, TAM);
  //listar(guarda, t);
  //alinea d - listar filtro
  char filtro[20]="meo";

  printf("total: %d", t);
  //listar_filtro(guarda, t, filtro);
  //alinea e - listar filtro mesma casa
  int filtro2=91;
  //listar_filtro2(guarda, t, filtro2);
  //alinea f
  char nome_retirar[20]="Pedro";
  int auxR;
  auxR=retirar(guarda, t, nome_retirar);
  t=auxR;
  listaR(guarda, t);


  return 0;
}


entendo que a alinea g) é igual a todas as outras por isso não a fiz!

Tags :

Guião laboratorial n.º 2 – exercício 2

polícia pretende armazenar informação sobre um conjunto de criminosos. Para cada um dos criminosos, a informação a armazenar é a seguinte: nome, altura (em cm) e peso (em Kg).
a) Crie um tipo estruturado que permita guardar a informação relativa a um criminoso;
b) Declare uma tabela que permita armazenar um máximo de 100 criminosos. A tabela deve ser uma variável local da função main().
Após ter declarado a tabela, inicialize-a com os criminosos: {“Joao Ratao”, 175 cm, 120 Kg};
{“Gato das Botas”, 199 cm, 67 Kg}; {“Mancha Negra”, 150 cm, 80 Kg}; {“Etelvina Seabra”,
156 cm, 45 Kg}.
c) Desenvolva uma função que escreva no monitor a informação relativa a um criminoso. A função recebe, como argumentos, um ponteiro para o início da tabela, o número de elementos que esta contém e a posição em que se encontra a estrutura relativa ao criminoso pretendido;
d) Desenvolva uma função que procure suspeitos de um determinado crime. A função recebe,como argumentos, um ponteiro para o início da tabela, o número de elementos que esta contém, o peso aproximado e a altura aproximada do suspeito. Deve percorrer a tabela e escrever no monitor a informação relativa a criminosos cuja diferença de peso e de altura não seja superior a 10% dos valores indicados como argumento.
e) Desenvolva uma função que permita retirar da tabela a informação relativa a uma pessoa. A função recebe, como argumentos, um ponteiro para o início da tabela, o número de elementos que esta contém e o nome da pessoa a retirar. Se existir alguém com esse nome na tabela a sua estrutura deve ser eliminada. Devolve como resultado o número de elementos que ficaram na tabela após a eliminação.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//alinea b
#define TAM 100

//alinea a
struct criminoso {
char nome[20];
int alturaCM;
int pesoKg;
};

void mostra_criminoso(struct criminoso *c,int t, int v){
int i;
for(i=0; i< t; i++, c++){
  if(i==v){
  printf("nome: %s", c->nome);
  printf("\naltura: %dcm",c->alturaCM);
  printf("\npeso: %dkg",c->pesoKg);
  }
}

}
//d
void procura_criminoso(struct criminoso *p, int t, int a_procura, int p_procura){
int i;
float cimaK, baixoK, cimaA, baixoA;

  baixoK=p_procura/1.1;
  cimaK=p_procura*1.1;
  baixoA=a_procura/1.1;
  cimaA=a_procura*1.1;
  printf("\nreferencias: %.2f--%.2f kg %.2f--%.2f cms", cimaK, baixoK, cimaA, baixoA);

for(i=0; i< t; i++, p++){
  if(p->pesoKg >= baixoK && p->pesoKg <= cimaK && p->alturaCM >= baixoA && p->alturaCM <= cimaA){
  printf("\nnome: %s", p->nome);
  printf("\naltura: %dcm",p->alturaCM);
  printf("\npeso: %dkg",p->pesoKg);
  }
}
}

//alinea e

//notworking
int elemina_criminoso(struct criminoso *e, int t, char *nome){
struct criminoso *f;
int novot, i;
char aux[20];

for(i=0, f=e; i<t; i++, e++,f++){
  if(strcmp(nome, e->nome)==0){
    printf("\nexiste");
    e[i]=e[i+1];
    t=t-1;
  }
}

novot= t;
return novot;
}


void mostra_T(struct criminoso *c,int t){
int i;
printf("\n---------------------------------------------");
for(i=0; i< t; i++, c++){
  printf("\nnome: %s", c->nome);
  printf("\naltura: %dcm",c->alturaCM);
  printf("\npeso: %dkg",c->pesoKg);

}

}

int main()
{
//alinea b


struct criminoso tabela_crime[TAM] = {
                      {"Joao Ratao",      175,  120},
                      {"Gato das Botas",  199,  67},
                      {"Mancha Negra",    150,  80},
                      {"Etelvina Seabra", 156,  45}
                      };

  int t=4;
  int ver_criminoso=2;
  //mostra_criminoso(tabela_crime, t, ver_criminoso);

//alinea d

  int altura_procurar=160;
  int peso_procurar=45;
  //procura_criminoso(tabela_crime, t, altura_procurar, peso_procurar);

//aliena e
  char nome_procurar[20]="Joao Ratao";
  printf("\ntotal de elementos iniciais: %d", t);
    mostra_T(tabela_crime, t);
  t=elemina_criminoso(tabela_crime, t, nome_procurar);
  printf("\ntotal de elementos atuais: %d", t);
  mostra_T(tabela_crime, t);

  return 0;
}

esta incompleto o eliminar não percebi a atualização!!!

+ajudas: LINK

+ajudas: LINK

+ajudas: LINK

Tags :

Guião laboratorial n.º 2 – exercício 1

1. Considere que necessita de armazenar informação sobre figuras geométricas num espaço com duas dimensões.
a) Crie tipos estruturados que lhe permitam representar um ponto e um retângulo.
b) Desenvolva uma função que inicialize uma estrutura do tipo retângulo. Toda a informação necessária deve ser fornecida pelo utilizador. A função devolve a estrutura inicializada.
c) Desenvolva uma função que devolva a área de uma estrutura do tipo retângulo passada como  argumento;
d) Desenvolva uma função que verifique se uma estrutura do tipo retângulo passada como
argumento é um quadrado. Se for, a função deve devolver 1. Caso contrário, devolve 0.
e) Desenvolva uma função que receba, como argumentos, uma estrutura do tipo retângulo e um ponto e devolva 1 se o ponto estiver dentro do retângulo.
f) Desenvolva uma função que desloque um retângulo no plano. A função recebe três argumentos: um ponteiro para o retângulo o deslocar, o deslocamento ao longo do eixo xx e o deslocamento ao longo do eixo yy.
g) Declare uma tabela que permita armazenar 4 retângulos. A tabela deve ser uma variável local da função main(). Utilize a função desenvolvida na alínea b) para preencher todos os elementos da tabela.
h) Desenvolva uma função que verifique se numa tabela onde estejam armazenados vários retângulos existem dois que tenham a mesma área. A função recebe como argumentos o endereço do primeiro elemento da tabela e o número de elementos que esta contém. Como resultado, deve devolver o valor 1 se existirem dois retângulos com a mesma área (devolve 0 se todos os retângulos tiverem áreas diferentes).

 

#include <stdio.h>
#include <stdlib.h>

#define TAM 4


struct ponto{
  int oX;
  int oY;
};

typedef struct retangulo{
  struct ponto n;
  int largura;
  int altura;
} r1;

struct retangulo r;
struct ponto p;

void iniciaR(){
scanf(" %d", &r.n.oX);
scanf(" %d", &r.n.oY);
scanf(" %d", &r.largura);
scanf(" %d", &r.altura);

};

void iniciaP(){
scanf(" %d", &p.oX);
scanf(" %d", &p.oY);

};

void verdados(){
printf("\nOrigemX: %d, OrigemY: %d, Largura: %d, Altura: %d\n", r.n.oX, r.n.oY, r.largura, r.altura);
}
void verdados2(){
printf("\nPonto OrigemX: %d, Ponto OrigemY: %d\n", p.oX, p.oY);
}


int verarea(struct retangulo k){
int area;
area=k.altura*k.largura;

return area;
}
int verificaQ(struct retangulo k){

if(k.altura==k.largura){
    return 1;
}
else{
    return 0;
}

}

int verificaDentro(struct retangulo k, struct ponto pn){
if(pn.oX<(k.n.oX+k.largura) && pn.oY<(k.n.oY+k.altura) && pn.oX>=k.n.oX && pn.oY>=k.n.oY){
  return 1;
}else{
  return 0;
}
}

void deslocar(r1 *p, int ax, int ay){

  printf("\no quadrado esta na origem em %d %d", p->n.oX, p->n.oY);
  p->n.oX = p->n.oX+ax;
  p->n.oY = p->n.oY+ay;
  printf("\no quadrado foi deslocado para %d %d", p->n.oX, p->n.oY);

}
//g
void iniciaR2(struct rg *p, int d){
int i;
for(i=0;i<d;i++){
  scanf(" %d", &r.n.oX);
  scanf(" %d", &r.n.oY);
  scanf(" %d", &r.largura);
  scanf(" %d", &r.altura);
}
};

void verdados3(){
printf("\nOrigemX: %d, OrigemY: %d, Largura: %d, Altura: %d\n", r.n.oX, r.n.oY, r.largura, r.altura);
}



int main()
{
  iniciaR();
  verdados();
  printf("A area tem o valor de: %d", verarea(r));
  if(verificaQ(r)==1){
    printf("\ne quadrado\n");
  }else{
    printf("\nnao e quadrado\n");
  }
  iniciaP();
  if(verificaDentro(r, p)==1){
    printf("\nesta dentro\n");
  }else{
    printf("\nnao esta dentro\n");
  }
  //f)
  int deslocaX=2;
  int deslocaY=2;
  deslocar(&r, deslocaX, deslocaY);
  //g)
  struct retangulo rG[TAM];

  iniciaR2(rG, TAM);
  //verdados3(r1 tabela, TAM);


  return 0;
}

//incompleto

Tags : ,

Guião laboratorial n.º 1 – exercício 21

“Considere que pretende resolver um quebra-cabeças que surgiu no seu jornal. Existe um retângulo, com um determinado número de linhas e um determinado número de colunas, preenchido com caracteres alfabéticos em cada uma das suas posições. Na figura pode ver um exemplo para um quebra cabeças com 5 linhas e 6 colunas.
21
Desenvolva uma função que procure todas as ocorrências de uma determinada palavra no quebra cabeças. A palavra pode ocorrer numa linha ou numa coluna. De cada vez que a função encontrar uma ocorrência da palavra deve escrever no monitor o número da linha e da coluna em que a palavra tem início. Considerando o exemplo da figura, se a palavra a pesquisar for lua a função deveria escrever:
A palavra lua surge:
– Ao longo da coluna 0 com início na linha 1
– Ao longo da linha 3 com início na coluna 3
A função recebe como argumentos o endereço inicial da matriz de caracteres, as suas dimensões (n.º de linhas e de colunas) e um ponteiro para a palavra a pesquisar.”



Tags :

Guião laboratorial n.º 1 – exercício 20

“Escreva um programa que para um dado mês à escolha do utilizador, indique o seu correspondente em Língua Inglesa.”

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TAM 12

void indica_mes(int t, char *m)
{
  int *p, mes=1, i=0;
  p=m;

  printf("Qual o mes que deseja ver traduzido (1-12)?\n");
  scanf("%d", &mes);

  for(i=0; i<t+1; i++, p++){
    if(mes==i){
     puts(*(p-1));
    }
  }
}

int main()
{
 char *mesesP[]={"January",
                   "February",
                   "March",
                   "April",
                   "May",
                   "June",
                   "July",
                   "August",
                   "September",
                   "October",
                   "November",
                   "December"};
 indica_mes(TAM, mesesP);

 return 0;
}



ajuda: LINK

Tags :

Guião laboratorial n.º 1 – exercício 19

“Pretende-se reduzir uma imagem a metade do seu tamanho original. A imagem inicial consiste num tabela bidimensional com M×M valores inteiros onde cada pixel (ponto na imagem) pode tomar um valor inteiro entre 0 e 9 (tonalidades de cinza). A imagem reduzida é armazenada num tabela bidimensional com M/2×M/2 valores reais onde cada elemento (pixel) corresponde á média dos 4 elementos que substitui. Para melhor compreensão do enunciado veja o exemplo apresentado de seguida (neste caso, para M=8):

exercicio19

Escreva uma função em C que efetue esta operação. A função recebe 3 argumentos: endereço inicial da matriz original, endereço inicial da matriz reduzida e o valor M.”

#include <stdio.h>
#define TAM 8

void reduzir_i(float *o, float *r, int d)
{
  int i,j, k,aux;
  float *p, *s, *q, soma=0, media=0;
  p=o;
  q=r;
  //imprimir a matriz original
  printf("matriz original: \n");
  for(i=0; i<d; i++){
    for(j=0; j<d; j++, p++){
      printf("%.f ", *p);
    }
    printf("\n");
  }
p=o;
s=o+d;
printf("\n");
  for(i=0; i<d; i=i+2, p=p+d, s=s+d){
    for(j=0; j<d; j++, p++, s++){
      for(k=0 ; k<j+1; k=k+d){
        //printf("%.f-%.f ", *p,*s);
        soma=soma+*p+*s;
      }

      if(aux<1){
      aux++;
      }else{
      media=soma/4;
      *q=media;
      //printf("%2.f \n", *q);
      aux=0;
      soma=0;
      media=0;
      q++;
      }
    }
  }
   //imprimir a matriz reduzida
   printf("\n");
  q=r;
  printf("matriz reduzida: \n");
  for(i=0; i<d/2; i++){
    for(j=0; j<d/2; j++, q++){
      printf("%.1f ", *q);
    }
    printf("\n");
  }


}

int main()
{
 float matO[TAM][TAM]={{0,4,9,3,6,7,2,9},
                       {9,4,7,8,3,4,7,2},
                       {5,1,2,6,3,8,6,2},
                       {7,1,4,8,7,2,0,7},
                       {4,9,3,5,2,1,5,7},
                       {5,3,4,7,8,9,1,0},
                       {2,3,5,6,7,9,2,4},
                       {2,3,4,5,6,7,8,9}};

float matR[TAM/2][TAM/2]={{0,0,0,0},
                          {0,0,0,0},
                          {0,0,0,0},
                          {0,0,0,0}};
reduzir_i(matO, matR, TAM);
 return 0;
}
Tags :

Guião laboratorial n.º 1 – exercício 18

“Desenvolva uma função que calcule a média dos valores armazenados em cada uma das colunas de uma matriz de números reais (float). A função recebe como argumentos o endereço inicial da matriz e as suas dimensões. Os valores calculados devem ser escritos na consola.”

#include <stdio.h>
#define L1 3
#define C1 3

void media_r(int l, int c, float *m1)
{
  int i,j;
  float *p, valor=0, soma=0, media;
  p=m1;

  for(i=0; i<l; i++, p++){
      for(j=0; j<c*l; j=j+c){
         soma=soma+(*p+j);
      }
  media=soma/j;
  printf("coluna %d\tsoma: %.2f\tmedia %.2f", i, soma , media);
  printf("\n");
  soma=0;
  }

}

int main()
{
 float matA[L1][C1]={{1,2,3},{4,5,6},{7,8,9}};

 printf("\nMedia das colunas:\n");
 media_r(L1, C1, matA);
 return 0;
}



Tags :

Guião laboratorial n.º 1 – exercício 17

“Desenvolva uma função que efetue a transposição numa matriz N*N de inteiros. A transposição consiste em trocar as linhas pelas colunas. A função recebe como argumentos o endereço inicial da matriz e o valor N (pode assumir que a matriz é quadrada).”

#include <stdio.h>
#define L1 3
#define C1 3

void transpor_q(int l, int c, int *m1)
{
  int *p, *q, aux[l],aux2[l],i,j;
  p=m1;
  q=m1;

  for(i=0; i<l; i++){
      for(j=0; j<c; j++, p++){
          aux[j][i]=*p;
          printf("%d\t", aux[j][i]);
          q=p;
      }
  printf("\n");
  }

  for(i=0; i<l; i++){
      for(j=0; j<c; j++){
          *p=aux[i][j];
          printf("%d\t", *p);
      }
  printf("\n");
  }
}

int main()
{
 int matA[L1][C1]={{1,2,3},{4,5,6},{7,8,9}};

 printf("\nMatriz da soma:\n");
 transpor_q(L1, C1, matA);
 return 0;
}



Tags :

Guião laboratorial n.º 1 – exercício 16

“Desenvolva uma função que some duas matrizes de inteiros, A e B. A função deve receber a informação necessária para efetuar a soma. O resultado da soma deve ficar armazenado na matriz A.”

#include <stdio.h>
#define L1 3
#define C1 2

void adicao(int l, int c, int *m1, int *m2)
{
  int *p, *q, i=0, j=0, aux[l];
  p=m1;
  q=m2;
  for(i=0; i<l; i++){
      for(j=0; j<c; j++, p++, q++){
           aux[i][j]=*p+*q;
           //printf("%d\t", aux[i][j]);
           *p=aux[i][j];
           printf("%d\t", *p);
      }
  printf("\n");
  }
}

int main()
{
 int matA[L1][C1]={{1,3},{1,0},{1,2}};
 int matB[L1][C1]={{0,0},{7,5},{2,1}};

 printf("\nMatriz da soma:\n");
 adicao(L1, C1, matA, matB);
 return 0;
}

+ajudas: LINK

Tags :

Guião laboratorial n.º 1 – exercício 15

“Complete o seguinte programa:
(…)
A função escreve() deve mostrar o conteúdo de uma matriz de inteiros na consola. A função recebe como argumentos o número de linhas, o número de colunas e o endereço inicial da matriz. Neste exemplo, o resultado será o seguinte:

#include <stdio.h>
#define L1 3
#define C1 2
#define L2 4
#define C2 3

void escreve(int n_lin, int n_col, int *m)
{
  int *p, i=0, j=0;
  p=m;
  for(i=0; i<n_lin; i++){
      for(j=0; j<n_col; j++, p++){
          printf("%d\t", *p);
  }
  printf("\n");
}
}

int main()
{
 int mat1[L1][C1]={{1,2},{3,4},{5,6}};
 int mat2[L2][C2]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};

 printf("\nMatriz mat1:\n");
 escreve(L1, C1, mat1);
 printf("\nMatriz mat2:\n");
 escreve(L2, C2, mat2);
 return 0;
}


Tags :

Guião laboratorial n.º 1 – exercício 14

“Desenvolva uma função que receba o endereço inicial e as dimensões (i.e., nº de linhas e nº de colunas) de uma matriz de números inteiros e a preencha com valores aleatórios entre 1 e 100.”


#include <stdio.h>
#include <stdlib.h>

#define linhas 10
#define colunas 10

void aleatorio(int l, int c,int *a){
int *p, i=0,j=0;
p=a;
//random
time_t t;
srand((unsigned) time(&t));

for(i=0; i<l ; i++){
    for(j=0; j<c ; j++,p++){
     *p=rand() % 100;
    }
}
p=a;
for(i=0 ; i<l ; i++){
    for(j=0; j<c ; j++, p++){
      printf("%d\t", *p);
    }
  printf("\n");
}
}
int main()
{
int vector[linhas][colunas]={};
aleatorio(linhas, colunas, vector);



return 0;
}

ajuda(random): link

Tags :

Guião laboratorial n.º 1 – exercício 13.1

“Escreva um programa para verificar se dois vetores, introduzidos pelo utilizador, são perpendiculares. Considere a dimensão máxima dos vetores igual a 25.
Nota: Dois vetores são perpendiculares se o seu produto escalar for zero.”

não me apeteceuuuu

Tags :

Guião laboratorial n.º 1 – exercício 13

“Desenvolva uma função que calcule o produto escalar de dois vetores de números reais a, b, com dimensão n, sabendo que:

A declaração da função poderá ter o seguinte formato:
double produto_escalar (double *a, double *b, int n)

#include <stdio.h>
#include <stdlib.h>

#define tam1 10
#define tam2 10

// nao usei o double porque nao percebi o printf..
int produto_escalar(int *a, int *b, int n){
int *p,*q;
int soma=0;
for(p=a, q=b; p<a+n && q<b+n; p++, q++){
    soma=soma+*p+*q;
    printf("\n%d\t%d\t%d", *p, *q, soma);
}
return soma;
}

int main()
{
int vector1[]={0,1,2,3,4,5,6,7,8,9};
int vector2[]={0,1,2,3,4,5,6,7,8,9};
int valor;
valor=produto_escalar(vector1, vector2, tam1);
printf("\nO produto escalar vem: %d", valor);


return 0;
}


Tags :

Guião laboratorial n.º 1 – exercício 12

“Modifique a função do exercício anterior de modo a permitir comparar matrizes de inteiros (i.e., tabelas com duas dimensões).”


#include <stdio.h>
#include <stdlib.h>

#define linha1 2
#define linha2 2

#define coluna1 2
#define coluna2 2

int vector_igual(int l1, int c1, int v1[l1][c1], int l2, int c2, int v2[l2][c2]){
int *p, *q, verifica=0;
p=v1[0];
q=v2[0];

if(l1==l2 && c1==c2){
  for(p=v1[0], q=v2[0]; p<v1[0]+l1*c1, q<v2[0]+l2*c2; p++,  q++){
      if(*p!=*q){
        verifica++;
      }
      printf("\n%d %d", *p, *q);
    }
}

if(verifica==0){
  verifica=1;
}else{
  verifica=0;
}
return verifica;
}
int main()
{
int vector1[linha1][coluna1]={{0,1},{2,3}};
int vector2[linha2][coluna2]={{0,1},{2,4}};
int valor;
valor=vector_igual(linha1, coluna1, vector1, linha2, coluna2, vector2);
printf("\n1 se os vetores forem iguais, e 0 no caso contrario: %d", valor);


return 0;
}

Tags :

Guião laboratorial n.º 1 – exercício 11

“Desenvolva uma função que receba, como argumentos, os nomes e as dimensões de dois vetores de inteiros e verifique se estes são iguais. Considere que dois vetores de inteiros são iguais se tiverem o mesmo número de elementos e se, em posições equivalentes, tiverem elementos com o mesmo valor. A função devolve 1 se os vetores forem iguais, e 0 no caso contrário. ”

#include <stdio.h>
#include <stdlib.h>

#define TAM1 10
#define TAM2 10

int vector_igual(int *v1, int t1, int *v2, int t2){
int *p, *q, verifica=0;
p=v1;
q=v2;

if(t1==t2){
  for(p=v1, q=v2; p<v1+t1, q<v2+t2; p++,  q++){
      if(*p!=*q){
        verifica++;
      }
      printf("\n%d %d", *p, *q);
    }
}

if(verifica==0){
  verifica=1;
}else{
  verifica=0;
}
return verifica;
}
int main()
{
int vector1[]={0,1,2,3,4,5,6,7,8,9};
int vector2[]={0,1,2,3,4,5,6,7,8,8};
int valor;
valor=vector_igual(vector1, TAM1, vector2, TAM2);
printf("\n1 se os vetores forem iguais, e 0 no caso contrario: %d", valor);


return 0;
}


Tags :

Guião laboratorial n.º 1 – exercício 10

“Desenvolva uma função que receba, como argumentos, o nome e a dimensão de um vetor de números reais e devolva um ponteiro para o elemento que mais se aproxima da média de todos os elementos do vetor.”

#include <stdio.h>
#include <stdlib.h>

#define TAM 10

int mais_proximo(int *v, int t){
int *p, media=0, soma=0, posi=0, dif=0, guarda[t], i, dif2=0;
p=v;

for(p=v;p<v+t;p++){
  soma=soma+*p;
}
media=soma/t;


for(p=v, i=0; p<v+t ; p++, i++){
  dif=media-*p;
  if(dif<0){
    dif=-dif;
  }
  guarda[i]=dif;
  printf("\n%d\t %d\t %d", i, guarda[i], media);
}
for(i=0, dif2=guarda[i]; i<t ; i++){
  if(dif2>guarda[i]){
    posi=i;
    dif2=guarda[i];
    }
}

return posi;
}
int main()
{
int vector[]={11,2,63,4,55,6,106,8,99,1000};
int valor=0;
valor=mais_proximo(vector, TAM);
printf("\nEsta na posicao: %d", valor);


return 0;
}


Tags :

Guião laboratorial n.º 1 – exercício 9

Desenvolva uma função que verifique se existem 3 caracteres consecutivos iguais numa frase. A função recebe como argumento um ponteiro para o início da frase (deve assumir que no final existe um ‘\0’). Deve devolver 1 se existirem 3 caracteres consecutivos iguais, ou 0 no caso contrário. A sua declaração é a seguinte:
int tres_consecutivos(char *frase);


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TAM 10

int tres_consecutivos(char *frase){
int totalc=0,valor=0;
char *p, *q, *e;
p=frase;
q=frase+1;
e=frase+2;

totalc=strlen(frase);
for( ; e<frase+totalc; p++, q++, e++){

    if(*p==*q && *q==*e){
        valor=1;
    }
}

return valor;
}
int main()
{
char frase_completa[]="Qualquer coisaaa assim assada!";
int valor=0;
valor=tres_consecutivos(frase_completa);

if(valor==1){
printf("\nExistem 3 caracteres consecutivos iguais na frase");
}else{
  printf("\nNao existem 3 caracteres consecutivos iguais na frase");
}

return 0;
}

Tags :