Commits

Francisco Souza  committed 0801b1f

Adicionado primeiro trabalho de tecnicas de programacao.

Tecnicas de Programacao eh uma disciplina do IFES, foi cursada no segundo semestre de 2007.

O trabalho foi feito por Francisco Antonio da Silva Souza e Bruna Arruda Contarine

  • Participants

Comments (0)

Files changed (6)

File linguagem_c/trabalho_tp_ifes_1/enunciado.doc

Binary file added.

File linguagem_c/trabalho_tp_ifes_1/resolucao/funcoes/funcoes.cpp

+#include "stdafx.h"
+#include <stdlib.h>
+#include <string.h>
+
+/**************************************
+*      Função ehNumero, verifica      *
+*     se um caracter é número         *
+*           (Questão 1)               *
+**************************************/
+int ehNumero (char carac)
+{
+	char i;
+	int flag,cont = 0;
+	for (i = '0';i <= '9';i++)
+	{
+		if (carac == i)
+			cont++;
+	}
+	flag = (cont > 0);
+	return (flag);
+}
+
+/**************************************
+*         Função lerNumero,           *
+*           (Questão 1)               *
+**************************************/
+char *lerNumero (int quant_caracteres)
+{
+	char *str;
+	int i = 0;
+	str = (char *)malloc((quant_caracteres + 1) * sizeof(char));
+	
+	printf ("Digite os numeros: ");
+	scanf ("%s", str);
+
+	if (strlen(str) != quant_caracteres)
+		str = NULL;
+
+	while (str != NULL && i < quant_caracteres)
+	{
+		if (!(ehNumero(str[i])))
+			str = NULL;
+		i++;
+	}
+	
+	return (str);
+}
+
+/**************************************
+*          Função replicar: 		  *
+*   Cria uma string com o caracter e  *
+*        tamanho determinados         *
+*             (Auxiliar)              *
+**************************************/
+char *replicar(char letra, int n)
+{
+	char *str;
+	int i;
+	str = (char *)malloc((n+1)*sizeof(char));
+	for(i = 0; i < n; i++)
+		str[i] = letra;
+	str[n] = '\0';
+	return str;
+}
+
+/**************************************
+*          Função intToCarac: 		  *
+*   Converte um numero inteiro em um  *
+*         caracter numerérico         *
+*             (Auxiliar)              *
+**************************************/
+char intToCarac(int numero)
+{
+	return (numero + '0');
+}
+
+/**************************************
+*         Função caracToInt: 		  *
+*    Converte um caracter numerico    *
+*          para um inteiro            *
+*             (Auxiliar)              *
+**************************************/
+int caracToInt(char caracter)
+{
+	return (caracter - '0');
+}
+
+/**************************************
+*        Função somaNumeros: 		  *
+*   Soma os números de duas strings	  *
+*       (Questão 2 - a linda)         *
+**************************************/
+char *somaNumeros(char *vet1, char *vet2)
+{
+	int i, j, quant_vet3, zeros, quant_vet1 = strlen(vet1);
+	int quant_vet2 = strlen(vet2);
+	char *vet3, *vet4;
+	int tam_res, vai_um = 0;
+	int *tmp;
+	char *resultado;
+	
+	if (quant_vet1 > quant_vet2)
+	{
+		zeros = quant_vet1 - quant_vet2;
+		vet3 = (char *)malloc((quant_vet1 + 1) * sizeof(char));
+		vet4 = (char *)malloc((quant_vet1 + 1) * sizeof(char));
+		strcpy(vet4,replicar('0',zeros));
+		strcat(vet4,vet2);
+		strcpy(vet3,vet1);
+	}
+	else
+	{
+		zeros = quant_vet2 - quant_vet1;
+		vet3 = (char *)malloc((quant_vet2 + 1) * sizeof(char));
+		vet4 = (char *)malloc((quant_vet2 + 1) * sizeof(char));
+		strcpy(vet3,replicar('0',zeros));
+		strcat(vet3,vet1);
+		strcpy(vet4,vet2);
+	}
+	
+	quant_vet3 = strlen(vet3);	
+	tmp = (int *)malloc((quant_vet3 + 1) * sizeof(int));
+	
+	i = strlen(vet4);
+	
+	while (i > 0)
+	{
+		tmp[i] = (caracToInt(vet3[i - 1]) + caracToInt(vet4[i - 1]) + vai_um) % 10;
+		vai_um = (caracToInt(vet3[i - 1]) + caracToInt(vet4[i - 1]) + vai_um) / 10;
+		i--;
+	}
+	
+	tmp[0] = vai_um;
+	int posTmp = (!vai_um);
+	if (vai_um)
+		tam_res = quant_vet3 + 2;
+	else
+		tam_res = quant_vet3 + 1;
+	
+	resultado = (char *)malloc(tam_res + 1 * sizeof(char));
+	resultado[(tam_res - 1)] = '\0';
+	
+	i = 0;
+	while (posTmp <= strlen(vet3))
+	{	
+		resultado[i] = intToCarac(tmp[posTmp]);
+		i++;
+		posTmp++;
+	}
+		
+	return (resultado);
+}
+
+/**************************************
+*         Função quantVezes:		  *
+*    Verificar as ocorrências de      *
+*      um caracter em um vetor        *
+*            (Questão 3)              *
+**************************************/
+int quantVezes (char *str, char carac)
+{
+	int i, cont = 0;
+	int tamanho = strlen(str);
+	for (i = 0;i < tamanho;i++)
+	{
+		if (str[i] == carac)
+			cont++;
+	}
+
+	return (cont);
+}
+
+/**************************************
+*         Função somaCarac: 		  *
+*    Soma os números de uma string    *
+*            (Questão 3)              *
+**************************************/
+int somaCarac(char *str)
+{
+	int i, soma = 0;
+	int tamanho = strlen(str);
+	
+	for (i = 0;i < tamanho;i++)
+		soma += caracToInt(str[i]);
+
+	return (soma);
+}
+
+/**************************************
+*      Função ehDivisivelPor3: 		  *
+*    Verifica se a soma dos numeros   *
+*     da string é divisível por 3	  *
+*            (Questão 3)              *
+**************************************/
+int ehDivisivelPor3(char *str)
+{
+	int flag = (somaCarac(str) % 3);
+	return (!flag);
+}

File linguagem_c/trabalho_tp_ifes_1/resolucao/funcoes/funcoes.h

+int ehNumero (char carac);
+char *lerNumero (int quant_caracteres);
+char *replicar(char letra, int n);
+char intToCarac(int numero);
+int caracToInt(char caracter);
+char *somaNumeros(char *vet1, char *vet2);
+int quantVezes (char *str, char carac);
+int somaCarac(char *str);
+int ehDivisivelPor3(char *str);

File linguagem_c/trabalho_tp_ifes_1/resolucao/stdafx.cpp

+// stdafx.cpp : source file that includes just the standard includes
+// Trabalho_1.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file

File linguagem_c/trabalho_tp_ifes_1/resolucao/stdafx.h

+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#pragma once
+
+
+#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
+#include <stdio.h>
+#include <tchar.h>
+
+
+
+// TODO: reference additional headers your program requires here

File linguagem_c/trabalho_tp_ifes_1/resolucao/trabalho_1.cpp

+// Trabalho_1.cpp : Defines the entry point for the console application.
+//
+
+#include "stdafx.h"
+#include <stdlib.h>
+#include <string.h>
+/**************************************
+*      Incluindo todas as fun��es     *
+**************************************/
+#include "./funcoes/funcoes.h"
+
+int main()
+{
+	char *num1, *num2, *soma;
+	int carac1,carac2;
+	
+	printf ("Quantos algarismos tem o primeiro numero? ");
+	scanf ("%i", &carac1);
+	num1 = lerNumero(carac1);
+	
+	while (num1 == NULL)
+	{
+		printf ("\n\t\tErro na leitura do primeiro numero, tente novamente!\n");
+		num1 = lerNumero(carac1);
+	}
+	
+	printf ("Quantos algarismos tem o segundo numero? ");
+	scanf ("%i", &carac2);
+	num2 = lerNumero(carac2);
+	
+	while (num2 == NULL)
+	{
+		printf ("Erro na leitura do segundo numero, tente novamente!\n");
+		num2 = lerNumero(carac2);
+	}
+	
+	soma = somaNumeros(num1,num2);
+	
+	printf("\nA soma eh %s.\n",soma);
+	int quant_carac = strlen(soma);
+	printf("A quantidade de caracteres eh %d.\n",quant_carac);
+	
+	if (ehDivisivelPor3(soma))
+		printf ("O numero eh divisivel por 3.\n");
+	else
+		printf ("O numero naum eh divisivel por 3.\n");
+	
+	system("pause");
+	return (0);
+}