#include <stdio.h>
#include <stdlib.h>
int empilhar(int *pilha, int elemento, int tam, int *pont)
{
if(tam==*pont)
{
printf("\nPilha cheia!\n");
return 0;
}
else{
pilha[*pont]=elemento;
*pont=*pont+1;
return 1;
}
}
int desempilhar(int *pilha, int tam, int *pont){
if(*pont==0)
{
printf("\nPilha ja vazia!\n");
return 0;
}
else{
*pont=*pont-1;
pilha[*pont]=NULL;
return 1;
}
}
int main() {
char op;
int ok, tam, *pilha, elemento,pont=0,i;
printf("Informe o tamanho desejado para a pilha: ");
scanf("%d",&tam);
if((pilha=(int*)malloc(tam*sizeof(int)))==NULL) exit(1);
do{
printf("\n(e)mpilhar (d)esempilhar (s)air: ");
getchar();
scanf("%c",&op);
switch (op){
case 'e':
printf("\nInforme o elemento a ser inserido: ");
scanf("%d",&elemento);
ok=empilhar(pilha,elemento,tam,&pont);
if(ok)printf("\nEmpilhamento feito com sucesso!\n");
else printf("\nNao foi possivel inserir o novo elemento\n");
for(i=0;i<tam;i++){
printf("%d\t",pilha[i]);}
printf("\n");
break;
case 'd':
ok=desempilhar(pilha,tam,&pont);
if(ok)printf("\nElemento retirado com sucesso!\n");
else printf("\nNao foi possivel retirar o elemento\n");
for(i=0;i<tam;i++){
printf("%d\t",pilha[i]);}
printf("\n");
break;
}
}while(op!='s');
return 0;
}
Algoritmos
Este blog foi criado devido à dificuldade que estou tendo de encontrar alguns códigos de algoritmos na net. Sei que, assim como eu, outros procuram o mesmo conteúdo. Espero estar ajudando. Todas as contribuições serão bem-vindas.
quinta-feira, 29 de setembro de 2011
Inclusão e exclusão de elementos em uma fila circular
#include <stdio.h>
#include <stdlib.h>
void entrar(int *fila,int v,int tam,int *ini,int *fim)
{
int prov = (*fim+1) % (tam);
if(prov != *ini)
{
*fim=prov;
fila[*fim]=v;
if(*ini==-1) *ini=0;
}
else printf("\nFila cheia!\n");
}
int sair(int *fila,int tam, int *ini,int *fim) {
int v;
if( *ini != -1 )
{
v=fila[*ini];
if(*ini==*fim)
{
fila[*ini]=NULL;
*ini=*fim=-1;
}
else
{
fila[*ini]=NULL;
*ini = (*ini+1) % tam;
}
return v;
}
else {
printf("\nFila vazia!\n");
return -1;
}
}
int main() {
char op;
int ok, tam, *fila, elemento,ini=-1,fim=-1,i;
printf("Informe o tamanho desejado para a fila: ");
scanf("%d",&tam);
if((fila=(int*)malloc(tam*sizeof(int)))==NULL) exit(1);
do{
printf("\n(e)ntrar (s)air (f)echar: ");
getchar();
scanf("%c",&op);
switch (op){
case 'e':
printf("\nInforme o elemento a ser inserido: ");
scanf("%d",&elemento);
entrar(fila,elemento,tam,&ini,&fim);
break;
case 's':
ok=sair(fila,tam,&ini,&fim);
printf("\nO elemento retirado foi: %d.\n",ok);
break;
}
for(i=0;i<tam;i++) printf("%d\t",fila[i]);
printf("\n");
}while(op!='f');
return 0;
}
#include <stdlib.h>
void entrar(int *fila,int v,int tam,int *ini,int *fim)
{
int prov = (*fim+1) % (tam);
if(prov != *ini)
{
*fim=prov;
fila[*fim]=v;
if(*ini==-1) *ini=0;
}
else printf("\nFila cheia!\n");
}
int sair(int *fila,int tam, int *ini,int *fim) {
int v;
if( *ini != -1 )
{
v=fila[*ini];
if(*ini==*fim)
{
fila[*ini]=NULL;
*ini=*fim=-1;
}
else
{
fila[*ini]=NULL;
*ini = (*ini+1) % tam;
}
return v;
}
else {
printf("\nFila vazia!\n");
return -1;
}
}
int main() {
char op;
int ok, tam, *fila, elemento,ini=-1,fim=-1,i;
printf("Informe o tamanho desejado para a fila: ");
scanf("%d",&tam);
if((fila=(int*)malloc(tam*sizeof(int)))==NULL) exit(1);
do{
printf("\n(e)ntrar (s)air (f)echar: ");
getchar();
scanf("%c",&op);
switch (op){
case 'e':
printf("\nInforme o elemento a ser inserido: ");
scanf("%d",&elemento);
entrar(fila,elemento,tam,&ini,&fim);
break;
case 's':
ok=sair(fila,tam,&ini,&fim);
printf("\nO elemento retirado foi: %d.\n",ok);
break;
}
for(i=0;i<tam;i++) printf("%d\t",fila[i]);
printf("\n");
}while(op!='f');
return 0;
}
quinta-feira, 1 de setembro de 2011
Busca binária em uma struct
Lembrando que quando o usuário for entrar com as chaves (int), elas deverão estar em ordem, ou a busca binária não funcionará.
#include<stdio.h>
struct TPessoa{
int chave;
char nome[40];
};
struct TPessoa v[10];
int buscaBin(int tam,struct TPessoa v[], int pesq)
{
int ini=0,fim=tam-1,meio;
while(ini<=fim)
{
meio=(ini+fim)/2;
if(pesq==v[meio].chave) return meio;
else if(v[meio].chave<pesq) ini=meio+1;
else fim=meio-1;
}
return -1;
}
int main ()
{
int busca, i;
char ret;
printf("Informe os dados a serem armazenados:\n");
for(i=0;i<10;i++)
{
printf("\nChave: ");
scanf("%d",&v[i].chave);
getchar();
printf("Nome: ");
gets(v[i].nome);
}
printf("\nInforme a chave a ser encontrada: ");
scanf("%d",&busca);
ret=buscaBin(10,v,busca);
if(ret==-1)
printf("\nNao encontrado!\n\n");
else
printf("\nA chave foi encontrada e o %cndice correspondente %c %d. O nome que se encontra neste %cndice %c %s.\n\n",161,130,ret,161,130,v[ret].nome);
return 0;
}
Inclusão e exclusão em uma lista sequencial - modo fila
#include <stdio.h>
#include <stdlib.h>
int inserir(int *fila, int elemento, int tam, int *ini,int *fim)
{
if(*ini==*fim && *fim==-1)
{
fila[++*fim]=elemento;
*ini=0;
return 1;
}
if(*fim==(tam-1) && *ini==0)
{
printf("\nFila cheia!\n");
return 0;
}
if(*fim==(tam-1))
{
int i;
*fim=-1;
for(int k=*ini;k<tam;k++)
{
fila[i++]=fila[k];
fila[k]=NULL;
*fim=*fim+1;
}
*ini=0;
}
fila[++*fim]=elemento;
return 1;
}
int retirar(int *fila, int tam, int *ini,int *fim)
{
if(*fim==*ini && *fim==-1)
{
printf("\nFila ja vazia!\n");
return 0;
}
if(*fim==*ini)
{
fila[*ini]=NULL;
*ini=-1;
*fim=-1;
return 1;
}
fila[*ini]=NULL;
*ini=*ini+1;
return 1;
}
int main() {
char op;
int ok, tam, *fila, elemento,ini=-1,fim=-1,i;
printf("Informe o tamanho desejado para a fila: ");
scanf("%d",&tam);
if((fila=(int*)malloc(tam*sizeof(int)))==NULL) exit(1);
do{
printf("\n(i)nserir (r)etirar (s)air: ");
getchar();
scanf("%c",&op);
switch (op){
case 'i':
printf("\nInforme o elemento a ser inserido: ");
scanf("%d",&elemento);
ok=inserir(fila,elemento,tam,&ini,&fim);
if(ok)printf("\nElemento inserido com sucesso!\n");
else printf("\nNao foi possivel inserir o novo elemento\n");
break;
case 'r':
ok=retirar(fila,tam,&ini,&fim);
if(ok)printf("\nElemento retirado com sucesso!\n");
else printf("\nNao foi possivel retirar o elemento\n");
break;
}
for(i=0;i<tam;i++) printf("%d\t",fila[i]);
printf("\n");
}while(op!='s');
return 0;
}
#include <stdlib.h>
int inserir(int *fila, int elemento, int tam, int *ini,int *fim)
{
if(*ini==*fim && *fim==-1)
{
fila[++*fim]=elemento;
*ini=0;
return 1;
}
if(*fim==(tam-1) && *ini==0)
{
printf("\nFila cheia!\n");
return 0;
}
if(*fim==(tam-1))
{
int i;
*fim=-1;
for(int k=*ini;k<tam;k++)
{
fila[i++]=fila[k];
fila[k]=NULL;
*fim=*fim+1;
}
*ini=0;
}
fila[++*fim]=elemento;
return 1;
}
int retirar(int *fila, int tam, int *ini,int *fim)
{
if(*fim==*ini && *fim==-1)
{
printf("\nFila ja vazia!\n");
return 0;
}
if(*fim==*ini)
{
fila[*ini]=NULL;
*ini=-1;
*fim=-1;
return 1;
}
fila[*ini]=NULL;
*ini=*ini+1;
return 1;
}
int main() {
char op;
int ok, tam, *fila, elemento,ini=-1,fim=-1,i;
printf("Informe o tamanho desejado para a fila: ");
scanf("%d",&tam);
if((fila=(int*)malloc(tam*sizeof(int)))==NULL) exit(1);
do{
printf("\n(i)nserir (r)etirar (s)air: ");
getchar();
scanf("%c",&op);
switch (op){
case 'i':
printf("\nInforme o elemento a ser inserido: ");
scanf("%d",&elemento);
ok=inserir(fila,elemento,tam,&ini,&fim);
if(ok)printf("\nElemento inserido com sucesso!\n");
else printf("\nNao foi possivel inserir o novo elemento\n");
break;
case 'r':
ok=retirar(fila,tam,&ini,&fim);
if(ok)printf("\nElemento retirado com sucesso!\n");
else printf("\nNao foi possivel retirar o elemento\n");
break;
}
for(i=0;i<tam;i++) printf("%d\t",fila[i]);
printf("\n");
}while(op!='s');
return 0;
}
segunda-feira, 30 de maio de 2011
Distância entre dois pontos com struct
#include<stdio.h>
#include<math.h>
struct Ponto{
int x,y;
};
void main()
{
struct Ponto p[2];
float dist;
printf("Informe a posi%c%co do primeiro ponto (x,y): ",135,198);
scanf("%d%d",&p[0].x,&p[0].y);
printf("Informe a posi%c%co do segundo ponto (x,y): ",135,198);
scanf("%d%d",&p[1].x,&p[1].y);
dist=sqrt(pow((float)(p[1].y-(float)p[0].y),2)+pow((float)(p[1].x-(float)p[0].x),2));
printf("A dist%cncia entre os pontos %c: %.2f\n\n",131,130,dist);
}
#include<math.h>
struct Ponto{
int x,y;
};
void main()
{
struct Ponto p[2];
float dist;
printf("Informe a posi%c%co do primeiro ponto (x,y): ",135,198);
scanf("%d%d",&p[0].x,&p[0].y);
printf("Informe a posi%c%co do segundo ponto (x,y): ",135,198);
scanf("%d%d",&p[1].x,&p[1].y);
dist=sqrt(pow((float)(p[1].y-(float)p[0].y),2)+pow((float)(p[1].x-(float)p[0].x),2));
printf("A dist%cncia entre os pontos %c: %.2f\n\n",131,130,dist);
}
Multiplicação de matrizes alocadas dinamicamente em C
#include<stdio.h>
#include<stdlib.h>
int** aloca (int linha,int coluna)
{
int **matriz,i;
if((matriz=(int **)malloc(coluna*sizeof(int*)))==NULL)
{
printf("Mem%cria n%co dispon%cvel!",162,198,161);
exit(1);
}
else
{
for(i=0;i<linha;i++)
{
if((matriz[i]=(int *)malloc(coluna*sizeof(int)))==NULL)
{
printf("Mem%cria n%co dispon%cvel!",162,198,161);
exit(1);
}
}
}
return matriz;
}
void le_matriz (int **matriz,int linha,int coluna)
{
int i,j;
for(i=0;i<linha;i++)
{
for(j=0;j<coluna;j++)
{
printf("\nPosi%c%co %d%d: ",135,198,i+1,j+1);
scanf("%d",&matriz[i][j]);
}
}
return;
}
void multiplica (int **matriz_final,int **matriz1,int **matriz2,int l1,int c2,int l2)
{
int i,j,k;
for(i=0;i<l1;i++)
{
for(j=0;j<c2;j++)
{
matriz_final[i][j]=0;
for(k=0;k<l2;k++)
{
matriz_final[i][j]=matriz_final[i][j]+(matriz1[i][k]*matriz2[k][j]);
}
}
}
}
void imprime (int **matriz,int linha,int coluna)
{
int i,j;
for(i=0;i<linha;i++)
{
printf("%c",186);
for(j=0;j<coluna;j++)
{
printf("\t%d",matriz[i][j]);
}
printf("\t%c\n",186);
}
return;
}
int main()
{
int **matriz1,**matriz2,**matriz_final,l1,c1,l2,c2;
printf("Informe o n%cmero de linhas e colunas da primeira matriz respectivamente: ",163);
scanf("%d%d",&l1,&c1);
printf("Informe o n%cmero de linhas e colunas da segunda matriz respectivamente: ",163);
scanf("%d%d",&l2,&c2);
if(l2!=c1){printf("N%co %c poss%cvel realizar a multiplica%c%co com os dados informados!\n\n",198,130,161,135,198);exit(1);}
matriz1=aloca(l1,c1);
matriz2=aloca(l2,c2);
printf("\nMatriz 1:");
le_matriz(matriz1,l1,c1);
imprime(matriz1,l1,c1);
printf("\nMatriz 2:\n");
le_matriz(matriz2,l2,c2);
imprime(matriz2,l2,c2);
matriz_final=aloca(l1,c2);
multiplica(matriz_final,matriz1,matriz2,l1,c2,l2);
printf("\n\nMatriz resultante da multiplica%c%co das matrizes 1 e 2:\n",135,198);
imprime(matriz_final,l1,c2);
return 0;
}
#include<stdlib.h>
int** aloca (int linha,int coluna)
{
int **matriz,i;
if((matriz=(int **)malloc(coluna*sizeof(int*)))==NULL)
{
printf("Mem%cria n%co dispon%cvel!",162,198,161);
exit(1);
}
else
{
for(i=0;i<linha;i++)
{
if((matriz[i]=(int *)malloc(coluna*sizeof(int)))==NULL)
{
printf("Mem%cria n%co dispon%cvel!",162,198,161);
exit(1);
}
}
}
return matriz;
}
void le_matriz (int **matriz,int linha,int coluna)
{
int i,j;
for(i=0;i<linha;i++)
{
for(j=0;j<coluna;j++)
{
printf("\nPosi%c%co %d%d: ",135,198,i+1,j+1);
scanf("%d",&matriz[i][j]);
}
}
return;
}
void multiplica (int **matriz_final,int **matriz1,int **matriz2,int l1,int c2,int l2)
{
int i,j,k;
for(i=0;i<l1;i++)
{
for(j=0;j<c2;j++)
{
matriz_final[i][j]=0;
for(k=0;k<l2;k++)
{
matriz_final[i][j]=matriz_final[i][j]+(matriz1[i][k]*matriz2[k][j]);
}
}
}
}
void imprime (int **matriz,int linha,int coluna)
{
int i,j;
for(i=0;i<linha;i++)
{
printf("%c",186);
for(j=0;j<coluna;j++)
{
printf("\t%d",matriz[i][j]);
}
printf("\t%c\n",186);
}
return;
}
int main()
{
int **matriz1,**matriz2,**matriz_final,l1,c1,l2,c2;
printf("Informe o n%cmero de linhas e colunas da primeira matriz respectivamente: ",163);
scanf("%d%d",&l1,&c1);
printf("Informe o n%cmero de linhas e colunas da segunda matriz respectivamente: ",163);
scanf("%d%d",&l2,&c2);
if(l2!=c1){printf("N%co %c poss%cvel realizar a multiplica%c%co com os dados informados!\n\n",198,130,161,135,198);exit(1);}
matriz1=aloca(l1,c1);
matriz2=aloca(l2,c2);
printf("\nMatriz 1:");
le_matriz(matriz1,l1,c1);
imprime(matriz1,l1,c1);
printf("\nMatriz 2:\n");
le_matriz(matriz2,l2,c2);
imprime(matriz2,l2,c2);
matriz_final=aloca(l1,c2);
multiplica(matriz_final,matriz1,matriz2,l1,c2,l2);
printf("\n\nMatriz resultante da multiplica%c%co das matrizes 1 e 2:\n",135,198);
imprime(matriz_final,l1,c2);
return 0;
}
sexta-feira, 13 de maio de 2011
Lista Encadeada em C (Matrícula e nome)
#include <stdio.h>
#include<stdlib.h>
struct registro
{
long int matricula;
char nome[81];
struct registro *next;
};
struct registro *raiz;
void adiciona()
{
struct registro *novoreg=(struct registro*)malloc(sizeof(struct registro));
if(novoreg==NULL){printf("Mem%cria insuficiente!",162); exit(1);}
printf("\nInforme a matr%ccula do funcion%crio: ",161,160);
scanf("%d",&novoreg->matricula);
getchar();
printf("Informe o nome: ");
gets(novoreg->nome);
novoreg->next=raiz->next;
raiz->next=novoreg;
}
void exclui()
{
struct registro *reg_atual, *reg_ant;
long int matric;
reg_atual=raiz->next;
reg_ant = raiz;
printf("\nInforme a matr%ccula do funcion%crio que ser%c exclu%cdo: ",161,160,160,161);
scanf("%d",&matric);
while(reg_atual!=NULL)
{
if(matric==reg_atual->matricula)
{
reg_ant->next=reg_atual->next;
printf("\nMatr%ccula exclu%cda com sucesso!",161,161);
free(reg_atual);
return;
}
reg_ant = reg_atual;
reg_atual=reg_atual->next;
}
printf("Matr%ccula n%co encontrada!\n",161,198);
}
void imp_lista()
{
struct registro *lista;
lista=raiz->next;
if(lista==NULL)
{
printf ("\n\n\a\a\a\a\tLista Vazia\n");
system ("pause");
exit(1);
}
else
{
while(lista!=NULL)
{
printf("\nMatr%ccula: %d",161,lista->matricula);
printf("\nFuncion%crio: %s",160,lista->nome);
lista=lista->next;
}
}
}
int main ()
{
int op=3;
raiz=(struct registro *)malloc(sizeof (struct registro));
if(raiz==NULL) exit(1);
raiz->next=NULL;
do
{
printf("Digite 1 para adicionar um novo registro, 2 para excluir, 3 para listar e 4 para sair: ");
scanf("%d",&op);
if(op==1)adiciona();
else if(op==2)exclui();
else if(op==3)imp_lista();
else if(op==4)exit(1);
printf("\n");
}while(op!=4);
free(raiz);
return 0;
}
#include<stdlib.h>
struct registro
{
long int matricula;
char nome[81];
struct registro *next;
};
struct registro *raiz;
void adiciona()
{
struct registro *novoreg=(struct registro*)malloc(sizeof(struct registro));
if(novoreg==NULL){printf("Mem%cria insuficiente!",162); exit(1);}
printf("\nInforme a matr%ccula do funcion%crio: ",161,160);
scanf("%d",&novoreg->matricula);
getchar();
printf("Informe o nome: ");
gets(novoreg->nome);
novoreg->next=raiz->next;
raiz->next=novoreg;
}
void exclui()
{
struct registro *reg_atual, *reg_ant;
long int matric;
reg_atual=raiz->next;
reg_ant = raiz;
printf("\nInforme a matr%ccula do funcion%crio que ser%c exclu%cdo: ",161,160,160,161);
scanf("%d",&matric);
while(reg_atual!=NULL)
{
if(matric==reg_atual->matricula)
{
reg_ant->next=reg_atual->next;
printf("\nMatr%ccula exclu%cda com sucesso!",161,161);
free(reg_atual);
return;
}
reg_ant = reg_atual;
reg_atual=reg_atual->next;
}
printf("Matr%ccula n%co encontrada!\n",161,198);
}
void imp_lista()
{
struct registro *lista;
lista=raiz->next;
if(lista==NULL)
{
printf ("\n\n\a\a\a\a\tLista Vazia\n");
system ("pause");
exit(1);
}
else
{
while(lista!=NULL)
{
printf("\nMatr%ccula: %d",161,lista->matricula);
printf("\nFuncion%crio: %s",160,lista->nome);
lista=lista->next;
}
}
}
int main ()
{
int op=3;
raiz=(struct registro *)malloc(sizeof (struct registro));
if(raiz==NULL) exit(1);
raiz->next=NULL;
do
{
printf("Digite 1 para adicionar um novo registro, 2 para excluir, 3 para listar e 4 para sair: ");
scanf("%d",&op);
if(op==1)adiciona();
else if(op==2)exclui();
else if(op==3)imp_lista();
else if(op==4)exit(1);
printf("\n");
}while(op!=4);
free(raiz);
return 0;
}
Assinar:
Postagens (Atom)