SOCORRO! URGENTE. Algoritmo em C

1. SOCORRO! URGENTE. Algoritmo em C

Perfil removido
removido

(usa Nenhuma)

Enviado em 19/06/2008 - 11:12h

Amigos, estou fazendo um trabalho em linguagem C (no linux) valendo 10 pontos para o professor de programação. O trabalho já está pronto só estou com um pequeno problema quanto às restrições no programa. JÁ PESQUISEI NA INTERNET, ESTOU QUEBRANDO A CABEÇA E NÃO CONSIGO FAZER UM ALGORÍTMO QUE ADMITA SOMENTE VALORES INTEIROS PARA UMA VARIÁVEL DO TIPO INT, UM ALGORÍTMO QUE ADMITA SOMENTES VALORES DO TIPO FLOAT E OUTRO ADMITA SOMENTE VALORES DO TIPO CHAR. Se alguém puder me ajudar a fazer pelo menos o que admita somente valores inteiros eu faço os outros 2. MUITO OBRIGADO E BOM DIA A TODOS!


  


2. isInt()

Pedro
javamizer

(usa Suse)

Enviado em 19/06/2008 - 14:17h

bool isInt(string tocheck)
{
// Get length of string to check and prepare to loop
unsigned long int length = tocheck.length();
unsigned long int loop = 0;

// Loop until we've gone through all the characters
while(loop < length)
{
// If the current character is not a digit (i.e. 0-9), then the string can't be an integer so return false
if((tocheck[loop] =! '0') || (tocheck[loop] =! '1') || (tocheck[loop] =! '2') || (tocheck[loop] =! '3') || (tocheck[loop] =! '4') || (tocheck[loop] =! '5') || (tocheck[loop] =! '6') || (tocheck[loop] =! '7') || (tocheck[loop] =! '8') || (tocheck[loop] =! '9'))
{
return false;
}
// Continue looping
loop++;
}
// If no problems have been found then the string must be an integer
return true;
}

http://www.linuxquestions.org/questions/programming-9/c-isint-function-376409/


3. Resposta

Perfil removido
removido

(usa Nenhuma)

Enviado em 19/06/2008 - 16:45h

Amigo eu realmente agradeço sua resposta, mas entendi pouca coisa do algoritmo que você escreveu, pois eu ainda sou leigo e estou no primeiro período de sistemas de informação. Se você puder me dar uma pequena dica...OBRIGADO


4. Orientação.

Reis
gnu_reis

(usa Slackware)

Enviado em 19/06/2008 - 18:59h

Saudações hpedro!

Cara, pelo que vejo esse código é C++, então ficará bem complicado para ele entender, tentarei refazê-lo hoje a noite, caso você não faça antes, ai você analisa para ver se está de acordo. Até mais!


5. cara

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 20/06/2008 - 17:14h

Cara, para inteiro e float fiz um código aqui rapidao que funciona. Da pra melhorar, mas como iniciante se você fizer um código mto bom o professor pode desconfiar (a não ser q vc seja da area de TI)...
Ah, este código envolve aritmética de ponteiros, no caso do char *, você poderia usar a posição do array direto e fazer um loop com o tamanho da string tbem.

int isInt(char * texto)
{
char * ptTexto = texto;
int numero = 1;
while (*ptTexto != 0) {
// Use codigo asc dos numeros
if (*ptTexto < 48 || *ptTexto > 57) {
numero = 0;
}
ptTexto++;
}
return numero;
}

int isFloat(char * texto)
{
char * ptTexto = texto;
int numero = 1;
int ponto = 0;
while (*ptTexto != 0) {
// Use codigo asc dos numeros
if (*ptTexto < 48 || *ptTexto > 57) {
if (*ptTexto != 46) {
numero = 0;
}
}
if (*ptTexto == 46) {
if (ponto == 1) {
numero = 0;
}
ponto = 1;
}
ptTexto++;
}
if (ponto == 0) {
numero = 0;
}
return numero;
}



6. ah

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 20/06/2008 - 17:16h

pra char é facil, basta observar os códigos asc... essa vou deixar de desafio pra vc ok, pq se pegar pronto você não vai aprender nada.
ah... fica abaixo um código do programa completo se quiser testar os números...

---- inicio numero.c ----
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#ifdef WIN32
#include <windows.h>
#include <conio.h>
#else
#include <termios.h>
#endif

#ifdef WIN32
#define CHAR_ENTER 13
#else
#define CHAR_ENTER 10
#endif

int isInt(char * texto)
{
char * ptTexto = texto;
int numero = 1;
while (*ptTexto != 0) {
// Use codigo asc dos numeros
if (*ptTexto < 48 || *ptTexto > 57) {
numero = 0;
}
ptTexto++;
}
return numero;
}

int isFloat(char * texto)
{
char * ptTexto = texto;
int numero = 1;
int ponto = 0;
while (*ptTexto != 0) {
// Use codigo asc dos numeros
if (*ptTexto < 48 || *ptTexto > 57) {
if (*ptTexto != 46) {
numero = 0;
}
}
if (*ptTexto == 46) {
if (ponto == 1) {
numero = 0;
}
ponto = 1;
}
ptTexto++;
}
if (ponto == 0) {
numero = 0;
}
return numero;
}

int lerCarac() {
int chLido;
#ifdef WIN32
chLido = getch();
#else
struct termios oldt, newt;
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
chLido = getchar();
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
#endif
return chLido;
}

int main(int argc, char *argv[])
{
// Vamos ler um numero de 9 (int 32 bits) posições em uma string primeiramente
char * numeroStr = malloc(sizeof(char) * 10);
// Limpar a string
int x = 0;
for (x = 0; x < 10; x++) {
numeroStr[x] = 0;
}

printf("Entre com o numero: ");
char chLido = 0;
while (chLido != CHAR_ENTER && strlen(numeroStr) < 9) {
chLido = lerCarac();
if ((chLido > 47 && chLido < 58) || chLido == 46) {
/* Numero lido */
putchar(chLido);
fflush(stdout);
numeroStr[strlen(numeroStr)] = chLido;
}
}
printf("\n");

printf("Int: %d\n", isInt(numeroStr));
printf("Float: %d\n", isFloat(numeroStr));
return 0;
}








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts