quarta-feira, 30 de março de 2011

Soma de 1 até um natural x (com recursão)

#include<stdio.h>
int SomatRec(int n)
{
int soma;
if(n==1){
soma=1;}
else{
soma=n+SomatRec(n-1);}
return soma;
}
int main ()
{
int n,somaT;
printf("Informe um nunero natural: ");
scanf("%d",&n);
while(n<0){
printf("Informe um nunero natural: ");
scanf("%d",&n);}
somaT=SomatRec(n);
printf("O somatorio de 1 ate %d eh %d.\n",n,somaT);
return 0;
}

domingo, 27 de março de 2011

Ordenação em C pelo método quicksort

#include<stdio.h>
int Pivode3 (int v[],int ini,int fim)
{
int meio;
meio=(ini+fim)/2;
if (v[ini]<v[fim] && v[ini]>v[meio] || v[ini]>v[fim] && v[ini]<v[meio]) return ini;
if (v[meio]<v[fim] && v[meio]>v[ini] || v[meio]>v[fim] && v[meio]<v[ini]) return meio;
return fim;
}
void quicksort (int v[],int ini,int fim)
{
int esq,dir,pivo,aux;
esq=ini;
dir=fim-1;
if ((fim-ini)<1) return;
if ((fim-ini)==1)
{
if(v[ini]>v[fim]){
aux=v[fim];
v[fim]=v[ini];
v[ini]=aux;}
return;
}
else
{
pivo=Pivode3(v,ini,fim);
if(v[fim]!=v[pivo]){
aux=v[fim];
v[fim]=v[pivo];
v[pivo]=aux;}
while(esq<dir){
if(v[esq]>v[fim]){
if(v[dir]<v[fim]){
aux=v[esq];
v[esq]=v[dir];
v[dir]=aux;
esq++;dir--;}
else{
dir--;}}
else{
esq++;}
}
quicksort(v,ini,esq);
quicksort(v,esq,fim);
}
}
int main (void)
{
int v[10]={9,0,8,1,7,2,6,3,5,4},i;
quicksort(v,0,9);
for(i=0;i<10;i++){
printf("%d\t",v[i]);}
return 0;
}

sábado, 26 de março de 2011

Contador de caracteres de entrada em C

Escreva um programa que leia uma linha de texto e que conte a quantidade de vogais existente na linha.
O programa deverá imprimir o número total de caracteres lidos, o número de ocorrências de vogais e a respectiva
percentagem relativamente ao total de caracteres.

#include<stdio.h>
#include<string.h>
int main (void)
{
char linha[80];
int x,vogais=0,total;
printf("Digite a linha: ");
gets (linha);
total=strlen(linha);
for(x=0;x<total;x++)
{
if(linha[x]=='a'||linha[x]=='A'||linha[x]=='e'||linha[x]=='E'||linha[x]=='i'||linha[x]=='I'||linha[x]=='o'||linha[x]=='O'||linha[x]=='u'||linha[x]=='U')
{
vogais++;
}
}
printf("\nTotal de caracteres: %d. Ocorrencias de vogais: %d. Porcentagem: %.2f %\n\n",total,vogais,((float) vogais*100)/total);
return 0;
}

Calcula fatorial em C

#include<stdio.h>
int main (void)
{
int num, fat=0,y;
printf("Informe um numero inteiro: ");
scanf("%d",&num);
printf("\nO fatorial de %i eh: ",num);
y=num-1;
fat=num*y;
y--;
while(y>0)
{
fat=fat*y;
y--;
}
printf("%d\n\n",fat);

return 0;
}

Busca sequencial em C

#include<stdio.h>
int buscaSequencial(int tamanho, int vetor[],int p)
{
int i;
for(i=0;i<=tamanho;i++)
{
if(vetor[i]==p){
return i;
}
}
return -1;

}
int main (void)
{
int vetor_tst[8]={8,4,0,8,3,4,6,5},fun,x;
printf("Informe o valor a ser encontrado: ");
scanf("%d",&x);
fun=buscaSequencial(8,vetor_tst,x);
printf("%d",fun);
printf("\n\n");
return 0;
}

Pesquisa binária (Retorna o índice do elemento)

#include<stdio.h>
int buscaBinPos(int tam,int v[],int pesq)
{
int ini=0,fim=9;
while(ini<=fim)
{
int meio;
meio=(ini+fim)/2;
if(v[meio]==pesq)
{
return meio;
}
else if(v[meio]<pesq)
{
ini=meio+1;
}
else
{
fim=meio-1;
}
}
return ini;

}
int main (void)
{
int v[10]={4,5,12,22,23,34,56,76,83,90},pos,fun,x;
printf("Informe o valor a ser encontrado: ");
scanf("%d",&x);
fun=buscaBinPos(10,v,x);
printf("O valor esta ou deveria estar na posicao: %d",fun);
printf("\n\n");
return 0;
}

Modelo de struct em C

#include<stdio.h>
struct voluntario
{
char sexo;
int idade, escol;
float rendaM;
};
int main()
{
struct voluntario v[3];
int i=0;
float RENDAM;
while(i<3)
{
printf("Sexo (F ou M): ");
scanf("%c",&v[i].sexo);
while(v[i].sexo!='f'&&v[i].sexo!='F'&&v[i].sexo!='m'&&v[i].sexo!='M')
{
printf("Sexo (F ou M): ");
scanf("%c",&v[i].sexo);
}
printf("Idade: ");
scanf("%d",&v[i].idade);
while(v[i].idade<0)
{
printf("Idade: ");
scanf("%d",&v[i].idade);
}
printf("Escolaridade (0-analfabeta, 1-fundamental, 2-medio, 3-superior): ");
scanf("%d",&v[i].escol);
while(v[i].escol!=0&&v[i].escol!=1&&v[i].escol!=2&&v[i].escol!=3)
{
printf("Escolaridade (0-analfabeta, 1-fundamental, 2-medio, 3-superior): ");
scanf("%d",&v[i].escol);
}
printf("Renda mensal: R$");
scanf("%f",&v[i].rendaM);
}
return 0;
}

Matriz quadrática com símbolos em C

A diagonal principal possui um símbolo diferente.


#include<stdio.h>
int main (void)
{
int num,j,i=0;
printf("******************DIAGQUAD******************");
printf("\n\nInforme um numero inteiro positivo: ");
scanf("%d",&num);
while (num<0)
{
printf("Informe um numero inteiro positivo: ");
scanf("%d",&num);
}
while(num>i)
{
for(j=0;j<num;j++)
{
if(j==i)
{
printf(":");
}
else
{
printf("+");
}
}
printf("\n");
i++;
}
printf("\n\n");
return 0;
}

Bilheteria de metrô em C

Fazer um algoritmo para ajudar a bilheteria do metrô. O operador deve informar o tipo do bilhete (unitário, duplo ou 10 viagens) e o valor pago pelo passageiro. O sistema deve mostrar, então, a quantidade de bilhetes possíveis e o troco que o passageiro deve receber.
Considere a seguinte tabela de preço:
0.
Bilhete unitário R$2,30
Bilhete duplo R$4,60
Bilhete com 10 viagens R$23,00

#include <stdio.h>
int main (void)
{
float pagamento,troco,preco;
int bilhete,quantidade,i;
printf("***************************BITMETRO***************************\n\n\n");
printf("Informe o tipo de bilhete: 1 para Unitario, 2 para duplo e 3 para 10 viagens.\nTecle 0 para terminar o programa: ");
scanf("%d",&bilhete);
while (bilhete!=0)
{
while(bilhete!=1&&bilhete!=2&&bilhete!=3)
{
printf("\nTipo de bilhete invalido!");
printf("\nInforme o tipo de bilhete: 1 para Unitario, 2 para duplo e 3 para 10 viagens.\nTecle 0 para terminar o programa: ");
scanf("%d",&bilhete);
}
printf("\nInforme o valor pago pelo passageiro: R$");
scanf("%f",&pagamento);
if(bilhete==1)
{
preco=2.3;
quantidade=pagamento/preco;
if (pagamento<preco)
{
printf("Dinheiro insuficiente!\n");
}
}
else
{
if(bilhete==2)
{
preco=4.6;
quantidade=pagamento/preco;
if (pagamento<preco)
{
printf("Dinheiro insuficiente!\n");
}
}
else
{
if(bilhete==3)
{
preco=23;
quantidade=pagamento/preco;
if (pagamento<preco)
{
printf("Dinheiro insuficiente!\n");
}
}
}
}
for (i=quantidade;i>0;i--)
{
printf("Total de bilhetes: %d. Troco: R$%.2f\n",i, pagamento-(preco*i));
}
printf("\n\nInforme o tipo de bilhete: 1 para Unitario, 2 para duplo e 3 para 10 viagens.\nTecle 0 para terminar o programa: ");
scanf("%d",&bilhete);
}
return 0;
}

Área a ser pintada.

Faça um programa para uma loja de tintas. O programa deverá pedir o tamanho em metros quadrados da área a ser pintada. Considere que a cobertura da tinta é de 1 litro para cada 3 metros quadrados e que a tinta é vendida em latas de 18 litros, que custam R$ 80,00. Informe ao usuário a quantidades de latas de tinta a serem compradas e o preço total.

#include <stdio.h>
int calcula (int val, int div)
{
int res;
if (val%div==0)
{
res=val/div;
}
else
{
res=(val/div)+1;
}
return res;
}
int main (void)
{
float area;
int area2,litros,latas;
printf("***************************LOJTINTA***************************\n\n\n");
printf("Informe quantos metros quadrados serao pintados:");
scanf("%f",&area);
area2=area;
if(area-area2>0)
{
area2++;
}
litros=calcula (area2,3);
latas=calcula (litros,18);
printf("\nPara pintar a area informada, voce precisara de %d latas de tinta e pagara R$%d,00.\n\n",latas,latas*80);
return 0;
}

Pesquisa binária (Com recursividade)

#include<stdio.h>
int buscaBinRec(int vetor[],int ini,int fim,int pesq)
{
while(ini<=fim)
{
int meio;
meio=(ini+fim)/2;
if(vetor[meio]==pesq)
{
return meio;
}
else if (vetor[meio]<pesq)
{
return buscaBinRec(vetor,meio+1,fim,pesq);
}
else
{
return buscaBinRec(vetor,ini,meio-1,pesq);
}
}
return -1;

}
int main (void)
{
int vetor_tst[4]={2,3,4,7},fun,x;
printf("Informe o valor a ser encontrado: ");
scanf("%d",&x);
fun=buscaBinRec(vetor_tst,0,3,x);
printf("%d",fun);
printf("\n\n");
return 0;
}

Ordenação pelo método da bolha (Não otimizado)

#include<stdio.h>
void ordemBolha(int v[],int tam)
{
int aux,i,j;
for(i=0;i<tam;i++)
{
for(j=0;j<tam;j++)
{
if(v[j]>v[j+1])
{
aux=v[j];
v[j]=v[j+1];
v[j+1]=aux;
}
}
}
}
int main ()
{
int v[6]={3,7,12,2,34,15},i;
ordemBolha(v,6);
for(i=0;i<6;i++){
printf("%d\t",v[i]);}
return 0;
}

Algoritmo da inserção em C

Algoritmo que insere um valor em um vetor previamente ordenado.


#include<stdio.h>
int insereNovo(int tam,int vetor[],int novo)
{
int i,j=tam-2;
for(i=0;i<tam;i++)
{
if(novo<=vetor[i]){
while(j>=i){
vetor[j+1]=vetor[j];
j--;}
return i;}
}
return tam-1;
}
int main (void)
{
int v[7]={12,15,23,34,46,65},valn,i,inov;
for(i=0;i<6;i++){
printf("%d\t",v[i]);}
printf("Informe o valor que sera inserido no vetor: ");
scanf("%d",&valn);
inov=insereNovo(7,v,valn);
v[inov]=valn;
for(i=0;i<7;i++){
printf("%d\t",v[i]);}
return 0;
}

Algoritmo Mergesort em C

Algoritmo que ordena um vetor através da recursividade. A ideia é subdividir o vetor em 2 outros de mesmo tamanho ou com apenas a diferença de uma unidade (caso o vetor seja ímpar), ordená-los e depois intercalar, retornando o vetor inicial totalmente ordenado.

#include<stdio.h>
void intercalar (int v[],int aux[],int ini1, int ini2,int fim2)
{
int in1=ini1,in2=ini2,fim1=in2-1,au=0,i;
while(in1<=fim1 && in2<=fim2)
{
if (v[in1]<v[in2])
{
aux[au++] = v[in1++];
}
else
{
aux[au++] = v[in2++];
}
}
while(in1<=fim1)
{
aux[au++] = v[in1++];
}
while(in2<=fim2)
{
aux[au++] = v[in2++];
}

for(i=0;i<au;i++){
v[i+ini1]=aux[i];}
}
void mergeSort (int v[], int aux[],int esq, int dir)
{
int meio,i;
if(esq<dir)
{
meio=(esq+dir)/2;
mergeSort(v,aux,esq,meio);
mergeSort(v,aux,meio+1,dir);
intercalar(v,aux,esq,meio+1,dir);
}
}
int main()
{
int v[10]={45,23,10,25,89,75,46,32,20,1},aux[10],i;
mergeSort(v,aux,0,9);
for(i=0;i<10;i++)
{
printf("%d\t",v[i]);
}
return 0;
}