Enviado em 04/11/2022 - 14:04h
Boa tarde pessoal,#include <stdio.h> int main() { float x,y; char d; printf("Digite o primeiro numero x:"); scanf("%f", &x); printf("Digite o segundo numero y:"); scanf("%f", &y); do { if (( x > 0) && ( y > 0)) { printf("\n Os numeros(%.2f, %.2f), encontra-se no primeiro quadrante\n", x, y); } else if ( ( x > -4) && ( y > 0) ) { printf("\n Os numeros(%f, %f), encontra-se no segundo quadrante\n", x, y); } else if ( ( x < 0 ) && ( y < 0 )){ printf("\nOs numeros(%.2f, %.2f), encontra-se no terceiro quadrante\n", x, y); } else { printf("\nOs numeros(%.2f, %.2f, encontra-se no quarto quadrante\n", x, y); } printf("\nDeseja continuar com outra operacao (S) ou (N):\n"); scanf("%c", &d); } while( (d == "S") || (d =="s") ); }
Enviado em 05/11/2022 - 05:18h
#include <stdio.h> int main() { float x,y; char d; printf("Digite o primeiro numero x:"); scanf("%f", &x); printf("Digite o segundo numero y:"); scanf("%f", &y); do { if (( x > 0) && ( y > 0)) { printf("\n Os numeros(%.2f, %.2f), encontra-se no primeiro quadrante\n", x, y); } else if ( ( x > -4) && ( y > 0) ) {
printf("\n Os numeros(%f, %f), encontra-se no segundo quadrante\n", x, y); } else if ( ( x < 0 ) && ( y < 0 )){ printf("\nOs numeros(%.2f, %.2f), encontra-se no terceiro quadrante\n", x, y); } else {
printf("\nOs numeros(%.2f, %.2f, encontra-se no quarto quadrante\n", x, y); } printf("\nDeseja continuar com outra operacao (S) ou (N):\n"); scanf("%c", &d);
} while( (d == "S") || (d =="s") );
}
double x; do { int r; // Resultado de scanf(). int a, b, c; // Contadores de caracteres consumidos. c=b=a=0; // Inicializa os contadores com zero antes da leitura. printf("Digite o valor da abcissa: "); r=scanf(" %n%lf%n%*1[\n]%n", &a, &x, &b, &c); if(r==EOF){ // Erro de entrada, provavelmente irrecuperável. fprintf(stderr, "ERRO FATAL: não é possível ler dados da entrada padrão.\n"); exit(1); } if( r<1 // Conversão "%lf" falhou (pode ter sido digitada uma letra, por exemplo). || a>0 // Houve espaços antes do número, não quero que o usuário tenha essa liberdade! ;) || c<b // Número não foi imediatamente seguido por uma quebra de linha (portanto a conversão com atribuição suprimida "%*1[\n]" falhou, e a função retornou imediatamente, sem alterar o valor de c. ){ fprintf(stderr, "ERRO: favor digitar apenas o valor numérico, imediatamente seguido de <Enter>.\n\n"); // Verifica se tem de remover caracteres na entrada antes de tentar ler novamente e, se for o caso, efetua a remoção. if(c==0){ b=a=0; r=scanf("%*[^\n]%n%*1[\n]%n", &a, &b); if(r==EOF || b==0){ fprintf(stderr, "ERRO FATAL: não é possível ler dados da entrada padrão.\n"); exit(1); } } } } while(r!=1);
#include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> bool read_double(const char *message, double *p_value, size_t max_retries, FILE *input){ bool success=false; // Presume falha. char *line=NULL; size_t linesize=0; size_t n_attempts=0; do { if(message && message[0]){ fputs(message, stdout); fflush(stdout); } ssize_t linelen; if((linelen=getline(&line, &linesize, input))==-1) break; // Erro de leitura. Não adianta nem tentar novamente. int r, a=0, b=0; r=sscanf(line, " %n%lf%n", &a, p_value, &b); ++n_attempts; success=(r==1 && a==0 && b>0 && line[b]=='\n'); if(!success){ errno=EINVAL; fprintf(stderr, "ERRO: O texto “%.*s” is não é um valor de ponto flutuante válido", (int)(linelen-1), line); if(max_retries>0) fprintf(stderr, " (tentativa %zu de %zu)", n_attempts, max_retries); fputs(".\n", stderr); } } while(!success && (max_retries==0 || n_attempts<max_retries)); free(line); return success; } static const char *positions[]={ "no 3º quadrante", "na parte negativa do eixo das ordenadas", "no 4º quadrante", "na parte negativa do eixo das abcissas", "na origem", "na parte positiva do eixo das abcissas", "no 2º quadrante", "na parte positiva do eixo das ordenadas", "no 1º quadrante" }; int main(void){ double x, y; if(!read_double("Entre o valor da abcissa: ", &x, 0, stdin) || !read_double("Entre o valor da ordenada: ", &y, 0, stdin)){ fprintf( stderr, "\nERRO FATAL: ao ler valores do par ordenado: %s.\n", feof(stdin)? "fim prematuro dos dados": strerror(errno) ); return 1; } printf("\nO par ordenado (%f,%f) está %s.\n", x, y, positions[(x>=0)+(x>0)+3*((y>=0)+(y>0))]); }
Enviado em 06/11/2022 - 10:38h
Brinquei mais um pouco com o programa. Segue para quem se interessar.#include <ctype.h> #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> // Buffer dinâmico para uso com a função getline() (POSIX.1-2008), usada em read_double() e main(). static char *line=NULL; static size_t linesize=0; bool strict_strtod(const char *str, double *p_value){ char *eon; return str && (isdigit(str[0]) || (str[0] && strchr(".+-IiNn", str[0]))) && (*p_value=strtod(str, &eon), *eon=='\0'); } bool read_double(const char *message, double *p_value, size_t max_retries, FILE *input){ bool success=false; // Presume falha. size_t n_attempts=0; do { if(message && message[0]){ fputs(message, stdout); fflush(stdout); } ssize_t linelen=getline(&line, &linesize, input); if(linelen==-1) break; // Erro de leitura. Não adianta nem tentar novamente. if(line[linelen-1]=='\n') line[--linelen]='\0'; // Remove o caráter de quebra de linha, caso exista. ++n_attempts; if((success=strict_strtod(line, p_value))) break; // Converteu com sucesso: pode interromper o laço de repetição de leituras. errno=EINVAL; fprintf(stderr, "ERRO: O texto “%s” is não é um valor de ponto flutuante válido", line); if(max_retries>0) fprintf(stderr, " (tentativa %zu de %zu)", n_attempts, max_retries); fputs(".\n", stderr); } while(max_retries==0 || n_attempts<max_retries); return success; } const char *position(double x, double y){ static const char *const positions[][3]={ { "no 2º quadrante", "na parte positiva do eixo das ordenadas", "no 1º quadrante" }, { "na parte negativa do eixo das abcissas", "na origem", "na parte positiva do eixo das abcissas" }, { "no 3º quadrante", "na parte negativa do eixo das ordenadas", "no 4º quadrante" } }; return positions[(y<=0)+(y<0)][(x>=0)+(x>0)]; } const char *errorcause(FILE *f, int errnumber){ return feof(f)? "fim prematuro dos dados": strerror(errnumber); } int main(int argc, char **argv){ double x, y; unsigned n_pairs=0, n_errors=0; if(argc<2){ // Modo interativo. bool again; do { if( !read_double("Entre o valor da abcissa: ", &x, 0, stdin) || !read_double("Entre o valor da ordenada: ", &y, 0, stdin) ){ fprintf( stderr, "\nERRO FATAL: ao ler valores do par ordenado: %s.\n", errorcause(stdin, errno) ); ++n_errors; break; } printf("\nO par ordenado (%f,%f) está %s.\n", x, y, position(x, y)); ++n_pairs; do { fputs("\nDeseja testar um novo par ordenado (S/N)? ", stdout); if(getline(&line, &linesize, stdin)==-1){ // Erro de leitura. fprintf( stderr, "\nERRO FATAL: Falha de leitura: %s.\n", errorcause(stdin, errno) ); ++n_errors; again=false; break; } else { char c=tolower((unsigned char)line[0]); if((again=(c=='s')) || c=='n') break; // Resposta válida: interrompe laço de repetição da leitura. fputs("Resposta inválida.\n", stderr); } } while(1); } while(again); } else{ // Pega coordenadas de cada par ordenado a partir de argumentos da linha de comando. int n, m; for(n=1, m=2; m<argc; n+=2, m+=2){ if(++n_pairs>1) putchar('\n'); // Do segundo par odenado em diante, pula uma linha para separar da informação do par anterior. bool goodpair=true; if(!strict_strtod(argv[n], &x)){ goodpair=false; fprintf(stderr, "O valor “%s” não é válido como abcissa do %dº par ordenando.\n", argv[n], n_pairs); } if(!strict_strtod(argv[m], &y)){ goodpair=false; fprintf(stderr, "O valor “%s” não é válido como ordenada do %dº par ordenado.\n", argv[m], n_pairs); } if(goodpair) printf("O par ordenado (%f,%f) está %s.\n", x, y, position(x, y)); else ++n_errors; } if(n<argc){ if(++n_pairs>1) putchar('\n'); if(!strict_strtod(argv[n], &x)) fprintf(stderr, "O valor “%s” não é válido como abcissa do %dº par ordenando.\n", argv[n], n_pairs); fprintf(stderr, "Falta o valor da ordenada do %dº par ordenado.\n", n_pairs); ++n_errors; } } return n_errors==0? 0: 1+(n_pairs>n_errors); // 0: sucesso total; 1: falha total; 2: sucesso parcial (alguns pares OK, mas com erros). }
Programa IRPF - Guia de Instalação e Resolução de alguns Problemas
Criando uma Infraestrutura para uma micro Empresa
Criar entrada (menuentry) ISO no Grub
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalando o Pi-Hole versão v5.18.4 depois do lançamento da versão v6.0
Instalar o VIM 9.1 no Debian 12
Como saber o range de um IP público?
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Dock do debian está muito pequena (1)
Instalei Windows 11 e não alterou o Grub do Debian (0)
Linux Mint (21.2) não reconhece teclado mecanico RASEC da PCYES (2)