domingo, 9 de dezembro de 2012

Faça um algoritmo em C que converta uma string em MAIÚSCULAS usando código ASCII e vetor.

Isto seria um programa simples de se fazer. Bastaria usar algumas das funções já existentes na linguagem C/C++. Mas, porém, contudo, os professores exigem dos alunos é que eles usem vetor e a tabela ASCII. E nem todos sabem como fazer. Então, supro esta sua necessidade. Como é que faz? Eis abaixo em partes.

Parte 1: Pegando a String.

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

main ()
{
char palavra[20];
int tam,i;

printf("Digite uma palavra: ");
scanf("%s",&palavra);

printf("\nA palavra digitada foi: %s ",palavra);
printf("\n\n");

printf("\n\n");
system("pause");

}

 

O código acima é suficiente para coletar do usuário uma palavra. E sem espaço. Se você usar espaço o programa vai desconsiderar depois do ‘\0’. Se rodar o código acima ele vai apenas receber uma palavra e depois exibir na tela.


Depois de você ler as informações você vai ter que fazer a conversão. Para tal, o código abaixo deve ser inserido no código acima.


tam = strlen(palavra);

for (i=0;i < tam;i++)
{
palavra[i] = palavra[i]-32;
}

 

Você pode usar assim, como acima que funciona. A variavel “tam” através da função strlen() recebe o valor inteiro da quantidade de letras digitada. Você pode economizar escrevendo o código assim:


for (i=0;i < strlen(tam);i++)
{
palavra[i] = palavra[i]-32;
}

 


O que é que muda? A variavel “tam” é usada dentro do laço e vai ter a mesma ação, que é, pegar o tamanho em inteiro da quantidade de letras digitadas na palavra[i]. É esta a função de strlen(tam). Str=string e len=lenght. Tamanho da String. Usando desta maneira, você economiza a linha de atribuição: tam = strlen(palavra);


O código: palavra[i] = palavra[i]-32 é quem converte a sua palavra em minúsculo para MAIÚSCULA. Mas, como é que funciona? Simples: na tabela ASCII toda e qualquer letra minúscula, menos 32, vai para a mesma letra em maiúscula. Não acredita? Faz o teste: abra o Bloco de Notas e segure a tecla ALT da esquerda e então digite no teclado Numérico o número 97. Vai sair a letra ‘a’ em minúsculo. 97-32=65 não é? Então! Faça a mesma coisa. Segure ALT da esquerda e aperte no teclado númerico 65 e você vai ter uma letra A, em maiúscula.


Então é por isto que o código  palavra[i] = palavra[i]-32 vai converter a palavra minúsculo para maiúscula. Não esquecer do que muito se repete: toda cadeia de string é na verdade um vetor. O código completo fica assim:


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

main ()
{
char palavra[20];
int tam,i;

printf("Digite uma palavra: ");
scanf("%s",&palavra);

printf("\nA palavra digitada foi: %s ",palavra);
printf("\n\n");



for (i=0;i < strlen(tam);i++)
{
palavra[i] = palavra[i]-32;
}

printf("A palavra em maiusculas %s " ,palavra);
printf("\n\n");
system("pause");

}

sexta-feira, 30 de novembro de 2012

Caixa eletrônico em C. As notas consideradas são de 100, 50, 20, 10, 5, 2 e 1.

Escrever um algoritmo que leia um valor em Reais. A seguir, calcule o menor número de notas possíveis no qual o valor pode ser decomposto. As notas consideradas são de 100, 50, 20, 10, 5, 2 e 1. A seguir mostre o valor lido e a relação de notas necessárias.

Se você já está estudando vetores abaixo um exemplo de código que fiz. Se você não está estudando vetores, tem outro exemplo no blog que usa apenas variaveis.

Evidente que você pode incrementar o código com um do{ }while(); Também você pode trocar os cout e o cin por printf() e scanf()

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <conio.c>
#include <iostream>
using namespace std;

main (){

int cedulas[] = {100, 50, 20, 10, 5, 2, 1};
int quantidadeTotal = 0;
int valorReais = 0,i=0;
int qtdCedulas[7];
cout << “Valor a sacar “;
cin >> valorReais;

for(i = 0; i < 7; i++)
{
qtdCedulas[i] = (valorReais/cedulas[i]);
valorReais = valorReais % cedulas[i];
quantidadeTotal += qtdCedulas[i];
cout << qtdCedulas[i] << ” Cedulas de.: ” <<cedulas[i] << endl;
}
cout << “Total de Cedulas: ” << quantidadeTotal;

getch();

}

Queria mais? Então! É só isto! Pode parecer simples, mas, eu levei umas horas quebrando a cabeça de como pegar os valores, dividir, tirar inteiro, guardar no segundo vetor. E, funcionou!

Comentando o laço for() onde tudo acontece.

for(i = 0; i < 7; i++)
{
          qtdCedulas[i] = (valorReais/cedulas[i]);

Esta linha acima, o vetor qtdCedulas[i] recebe o resultado da variavel valorReais e dividido pelo valor do vetor cedulas[i], ou seja,  pega o valor que o usuário digita e divide por 100, depois, por 50, 20,10,5,2,1. Assim, cada posição do vetor qtdCedulas[i] armazena a sua quantidade de notas.

valorReais = valorReais % cedulas[i];

Esta linha acima pode ser substituída por esta outra abaixo:

            valorReais %= cedulas[i];

Aqui a variavel valorReais é modificada e passa a conter a cada laço o resto da divisão do valor digitado pelo usuário pelo conteúdo do vetor cedulas[i], ou seja, se você digitar: 254 na posição de cedulas[0] guardará 54, pois, 254/100 (100 é o valor de cédulas[0]).

Na segunda passagem do laço, valorReais receberá o conteúdo de 54/50 (50 é o valor de cédulas[1]), ou seja, resto 4.

E assim por diante.

            quantidadeTotal += qtdCedulas[i];

Esta variável vai contando a quantidade de cédulas armazenado no vetor qtdCedulas[].

cout << “Cedulas de …: ” << cedulas[i] << “\t Qtd …: ” << qtdCedulas[i] << endl;

Esta linha exibe na tela o resultado. E você pode usar o printf();

Isto é tudo!

segunda-feira, 19 de novembro de 2012

Leia uma matriz 10 x 10 e escreva a localização (linha e a coluna) do maior valor.

 
A digitação da matriz segue o padrão. Usando a biblioteca <iostream> você obtém melhor desempenho e mais produtividade. Usar o cout no lugar do printf() é melhor. Usar o cin no lugar do scanf() também, pois, só o fato de não precisar se preocupar com máscaras e outras coisa muito ajuda.
 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <conio.c>
#include <iostream>
#include <windows.h>

using namespace std;

main (){
int matriz10x10[10][10];
int maiorValor=0,i,j;

// digitando a matriz
for (i=0;i<10;i++){
for (j=0;j<10;j++){
cout << i << " e " << j << " ";
cin >> matriz10x10[i][j];
if (matriz10x10[i][j] > maiorValor)
{
maiorValor = matriz10x10[i][j];
}
}
}

cout << endl;
// exibindo o resultado na tela

cout << "Matriz 10 x 10" << endl;

for (i=0;i<10;i++){
for ( j=0;j<10;j++){
if(maiorValor == matriz10x10[i][j])
{
cout << "Maior valor: " << maiorValor << endl;
cout << "Na linha: " << i << " e na Coluna: " << j << " " ;
}
cout << endl;
}
}

getch();
}

No primeiro conjunto for() da matriz, eu fiz a coleta do valor maior. A medida que o usuário digita o valor da variável maiorValor é comparado e substituido quando um valor maior é encontrado.

 

No segundo conjunto de for() da matriz eu faço a busca do valor, e então apresento a linha a coluna onde o valor está armazenado. Neste código abaixo, substituo a digitação da matriz, pelo preenchimento randômico.

 

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <conio.c>
#include <iostream>
#include <windows.h>

using namespace std;

main (){

int matriz10x10[10][10];
int maiorValor=0,i,j;

// PREENCHIMENTO RANDÔMICO até o número 160

cin >> matriz10x10[i][j];

matriz10x10[i][j] = rand()%160; // randomico
cout << matriz10x10[i][j] << " "; // exibe na tela

if (matriz10x10[i][j] > maiorValor)
{
maiorValor = matriz10x10[i][j]; // compara os numeros
}
}
cout << endl;
}

// exibindo o resultado na tela
// procura onde [i]=linha e em qual coluna [j]
// está o maior valor

cout << "Matriz 10 x 10" << endl;

for (i=0;i<10;i++){
for ( j=0;j<10;j++){
if(maiorValor == matriz10x10[i][j])
{
cout << "Maior valor: " << maiorValor << endl;
cout << "Na linha: " << i << " e na Coluna: " << j << " " ;
}
cout << endl;
}
}

getch();
}

sábado, 17 de novembro de 2012

Declare um vetor de 10 posições e o preencha com os 10 primeiros números impares e o escreva.

Declare um vetor de 10 posições e o preencha com os 10 primeiros números impares e o escreva.

 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <conio.c>
#include <iostream>
#include <windows.h>

using namespace std;

main (){
int vetor10[10]={1,3,5,7,9,11,13,15,17,19};

cout << "O Vetor[10] com numeros impares" << endl << endl;
for (int i=0;i<10;i++)
{
cout << "Vetor10 " << i << " = " << vetor10[i] << endl;
}

getch();
}

 

Outra maneira de fazer é esta abaixo. Observe que a variável X, começa em –1 para na posição ZERO termos o inicio em 1.

 


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <conio.c>
#include <iostream>
#include <windows.h>

using namespace std;
main (){

int vetor10[10];
int x=-1;
cout << "O Vetor[10] com numeros impares" << endl << endl;
for (int i=0;i<10;i++)
{
cout << "Vetor 10 [" << i << "] = " << (x=x+2) << endl;

}

getch();
}


Leia um vetor de 12 posições e em seguida ler também dois valores X e Y.

Leia um vetor de 12 posições e em seguida ler também dois valores X e Y quaisquer correspondentes a duas posições no vetor. Ao final seu programa deverá escrever a soma dos valores encontrados nas respectivas posições X e Y.

#include <stdio.h>
#include <conio.c>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
#include <windows.h>
#include <time.h>

using namespace std;

main (){

int vetor12[12];
int valor1=0,valor2=0,somaValor=0;

clrscr();
cout << "O Vetor[12] foi preenchido RANDOMICAMENTE" << endl << endl;
for (int i=0;i<12;i++)
{
vetor12[i] = rand()%100;
cout << "Vetor12 " << i << " = " << vetor12[i] << endl;
}

cout << endl << endl;

gotoxy(20,9);cout << "Somar 2 valores de 2 indices: " << endl << endl;

gotoxy(20,10);cout << "Qual indice 1? ";
cin >> valor1;

gotoxy(20,11);cout << "Qual indice 2? ";
cin >> valor2;

somaValor = vetor12[valor1] + vetor12[valor2];
cout << endl << endl << endl;
gotoxy(20,12);cout << "A soma de " << vetor12[valor1] << " + " << vetor12[valor2] << " = " << somaValor;

getch();
}


Para a função gotoxy(); funcionar você deve seguir estas dicas aqui: Como usar o gotoxy() no Dev C/C++

quarta-feira, 14 de novembro de 2012

Faça um algoritmo que gere a seguinte matriz

Faça um algoritmo que gere a seguinte matriz:

 

1 1 1 1 1 1

1 2 2 2 2 1

1 2 3 3 2 1

1 2 3 3 2 1

1 2 2 2 2 1

1 1 1 1 1 1

 

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <conio.c>
#include <iostream>
#include <windows.h>

using namespace std;

main (){
int matrizFeita[6][6] = {1,1,1,1,1,1,1,2,2,2,2,1,1,2,3,3,2,1,1,2,3,3,2,1,1,2,2,2,2,1,1,1,1,1,1,1};
int x=10,y=10;

for (int i=0;i<6;i++){
for (int j=0;j<6;j++){
cout << matrizFeita[i][j];
}
cout << endl;
}
getch();
}

Uma matriz 20 x 20. Leia também um valor X.

Leia uma matriz 20 x 20. Leia também um valor X. O programa deverá fazer uma busca desse valor na matriz e, ao final escrever a localização (linha e coluna) ou uma mensagem de “não encontrado”.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <conio.c>
#include <iostream>
#include <windows.h>

using namespace std;

main (){

int matrizA[3][3];
int i=0,j=0;
int meuNumero=0;

for (i=0;i<3;i++){
for (j=0;j<3;j++){
cout << "Digitando: ";
cin >> matrizA[i][j];
}
}

cout << endl << endl;
cout << "Meu vetor " << endl << endl;

for (i=0;i<3;i++){
for (j=0;j<3;j++){
cout << matrizA[i][j] << " ";
}
cout << endl;
}

cout << "Digite um numero: ";
cin >> meuNumero;

for (i=0;i<3;i++){
for (j=0;j<3;j++){

if(meuNumero == matrizA[i][j])
printf("Linha [%d] Coluna [%d] Numero: [%d][%d] \n", i,j, matrizA[i][j]);

if(meuNumero != matrizA[i][j]){
printf("Linha [%d] Coluna [%d] NAO ENCONTRADO \n", i,j, matrizA[i]);


}
}
getch();
}