Ir ao conteúdo
  • Cadastre-se

isrnick

Membro Pleno
  • Posts

    1.543
  • Cadastrado em

  • Última visita

Tudo que isrnick postou

  1. isrnick

    Exercicio Triangulo

    Basta colocar as análises de tipo de triângulo dentro do if que checa se forma triangulo, assim ele nunca checará essas condição se não formar, veja: (Dei uma organizada no seu código) //Exercicio Triângulo#include<iostream>#include<string.h>#include<stdlib.h>#include<conio.h>#include<stdio.h>#include<locale.h>int main(){ int A, B, C; setlocale(LC_ALL, "Portuguese"); printf("Informe os lados do triângulo (Separados por espaço):\n"); scanf("%d %d %d",&A,&B,&C); //Verificando se forma triângulo ou não //Condição para formar triangulo if((A+>C && (A+C)>B && (B+C)>A) { /*No caso de fomar triangulo, Verificar qual tipo de triângulo será formado*/ //Condição para triangulo RETANGULO if ((B* + (C*C) == (A*A) || (A*A) + (C*C) == (B* || (B* + (A*A) == (C*C)) { printf("r\n"); } //Condição para triangulo OBTUSANGULO if(A>B && A>C || B>A && B>C || C>B && C>A) { if ((B* + (C*C) < (A*A) || (A*A) + (C*C) < (B* || (A*A) + (B* < (C*C) ) { printf("o\n"); } } //Condição para triangulo ACUTANGULO else if ((B* + (C*C) > (A*A) || (A*A) + (C*C) > (B* || (B* + (A*A) > (B*) { printf("a\n"); } } //Se não formar triangulo já imprime a letra N e finaliza else { printf("n\n"); } system("pause"); } Esse é um problema que é postado aqui no fórum frequentemente, aqui estão 2 tópicos que podem ser interessantes pra você: http://forum.clubedohardware.com.br/forums/topic/1067339-programa-em-c/ http://forum.clubedohardware.com.br/forums/topic/1068211-d%C3%BAvida-em-programa-c/
  2. Ok, primeiramente em C o caractere nova linha (=apertar Enter no console) é representado por '\n'. Como você já sabe na string de formatação do scanf são usados especificadores dependendo do tipo de entrada de dados desejado. Todos começando com % seguido do especificador, como %d para inteiro, %c para caractere, %s para string, etc... No caso de caracteres e strings além dos especificadores mencionados acima também é possível usar o especificador %[], este especificador define um conjunto de caracteres que são admitidos como entrada (ou que não são admitidos). Para dizer quais caracteres são admitidos basta digitá-los dentro dos colchetes do especificador. Exs: %[169ab] -> apenas os caracteres 1, 6, 9, a e b são aceitos%[0-9a-zA-X] -> são admitidos os caracteres de 0 até 9, de a até z (minúsculo), e de A até X (maiúsculo) Obs: Note que é possível usar um intervalo de caracteres em sequência usando um hífen. Com este especificador a função scanf obterá, e armazenará no vetor de caracteres, todos caracteres da entrada padrão (standard input) até encontrar um caractere que não esteja na lista de caracteres admissíveis. Ao invés de dizer quais caracteres são aceitos, também é possível dizer quais caracteres você não deseja que sejam admissíveis, usando um acento circunflexo '^' após o primeiro colchete ( [^] ). Exs: %[^a-zA-Z] -> admite quaisquer caracteres que não sejam letras%[^\n] -> recebe todos os caracteres até (=exceto) encontrar o caractere nova linha O 49 em %49[^\n] diz número máximo de caracteres a serem lidos/armazenados no vetor de caracteres, pois no código o vetor foi definido com 50 posições, o que implica que o vetor pode armazenar no máximo 49 não nulos, e nesse caso a última posição deverá armazenar o caractere nulo '\0' que indica o fim da string. O asterisco * é usado para indicar que o que for obtido por um dado especificador não deverá ser armazenado em uma variável, logo será descartado. Exs: %*c -> descarta 1 caractere da entrada padrão%*d -> descarta 1 número inteiro da entrada padrão Então, juntando tudo isto temos: %49[^\n]%*c = ler/armazenar caracteres até encontrar um caractere nova linha, ou até atingir 49 caracteres, mas descartar o caractere nova linha (que sempre será o último caractere).%d%*c = ler um número inteiro, mas descartar o caractere seguinte (nor- malmente o caractere nova linha, mas pode ser um espaço)
  3. Aqui... Eu dei uma organizada no seu código: #include <iostream> #include <conio.h>using namespace std;int main(){ char sexo; int idade; cout << "\nPrograma que verifica se pode aposentar ou não"; cout << "\nInforme sua idade"; cin >> idade; cout << "\nInforme seu sexo pelas letras M ou F"; cin >> sexo if ((idade >=63) || (sexo == 'F') || (sexo == 'f')) { cout << "\nPode aposentar, minha senhora" } else if ((idade >=65) || (sexo == 'M') || (sexo == 'm')) { cout << "\nPode aposentar, meu senhor" } else getch(); } O problema é que você não colocou ponto-e-vírgula ( ; ) no final de algumas linhas (as linhas 14, 18 e 22 estão sem ; no final). A mensagem de erro até diz que é esperado ter um ; antes do if da linha apontada (= no fim da linha anterior), e que isso causou o erro, em C isso é importante pois indica onde a linha de instruções/comando termina...
  4. Não o #define apenas define um valor fixo pra um parâmetro, no caso ali ele definiu N_CONTATOS como igual a 2, então na prática você pode excluir a linha do #define e substituir todos os locais no resto do código onde está escrito N_CONTATOS pelo número 2... (Na prática o compilador faria essa substituição antes de compilar o código.) Ele só fez desta maneira pra facilitar a alteração do número total de contatos, pra não ter que alterar todos os lugares todas as vezes. Você também poderia usar uma variável inteira no main no lugar disto, que conteria o número de contatos... Então sobre os scanfs... Ele declarou no main uma struct Dados com nome agenda com 2 posições (ou seja pode armazenar 2 contatos). struct Dados agenda[N_CONTATOS]; Então seria possível chamar as posições agenda[0] e agenda[1] da agenda. Conforme a definição da struct Dados, cada elemento deste tipo possui 2 vetores de 50 caracteres, chamados "nome" e "dir", e 1 inteiro com nome "fone". Aqui vem a distinção entre uma variável simples e um vetor... Quando você usa o nome da variável o que você obtém é o valor 'armazenado nela', e para obter o endereço/a referência da memória onde este valor está armazenado você usa o operador & antes do nome. No caso de vetores entretanto para obter o valor armazenado em uma de suas posições é necessário indicar a respectiva posição entre colchetes [] após seu nome. Ex: char vetor[6] = "abcde";if (vetor[0] == 'a') printf("A posicacao 0 do vetor contem o caractere a."); Se você usar apenas seu nome, sem colchetes o que você obtém já é o endereço de memória do vetor, portanto não é necessário usar o operador &. Obs: Note que você deve usar o operador & nesse caso: &vetor[2] -> retorna o endereço na memória da segunda posição do vetor (no exemplo acima seria o endereço contendo o caractere 'c' da string). Então observe que nos scanfs do código do @vangodp ele usa o operador & apenas no caso do "fone" (que é uma variável inteira da i-ésima posição da agenda), mas não usa o operador no "nome" nem no "dir", pois são vetores de caracteres.
  5. O problema é que você está transformando os operadores e as somas em strings ao colocar aspas ao redor deles. Observe a diferença entre isto (correto): cout << "\n Os resultados: soma: " << numero1 + numero2 << ", multiplicacao: " << numero1 * numero2 << ", subtracao: "<< subtrai; E isto (errado): cout << "\n Os resultados: soma:" "<<numero1 + numero2", multiplicacao: "<<numero1 * numero2", subtracao: "<<soma - multiplica"; Observando que as partes em verde indicam as strings, e as partes em preto são comandos a serem interpretados pelo compilador...
  6. Compre um PC, não recomendo comprar notebook pra jogos se esse é o limite que você pode pagar.
  7. Se você sabe inglês StackOverflow normalmente tem a resposta pra sua pergunta sobre qualquer coisa em programação: http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list (Nesse tópico tem uma lista de livros mais indicados...)
  8. isrnick

    entrada

    Tem sim, só aumenta a complexidade um pouco: #include <stdio.h>#include <stdlib.h>int main(){ int num; char string[20], c; do { fscanf(stdin, "%s", string); /*poe na string o proximo conjunto de numeros até encontrar um espaco*/ num = atoi(string); /*converte o numero da string pra inteiro*/ printf("%d ", num); c = getchar(); /*pega o proximo caractere digitado*/ ungetc(c, stdin); /*devolve o caracter obtido pra a entrada padrao (standard input = stdin)*/ } while (c != '\n'); /*verifica se o caractere não é um caractere nova linha (= Enter), ou seja, se não acabaram os números digitados na linha, e para o ciclo se sim*/ return 0;}
  9. Talvez o problema seja que o script tem vários rótulos iguais? Quando você coloca "goto s_instalar" como o código vai decidir qual dos rótulos deve ser chamado se existem vários "s_instalar"? Você deve fazer cada rótulo único no script. Ex: :s_instalar01
  10. isrnick

    Python

    Basta saber que: multiplicacao(5,3) = 5 + multiplicacao(5,2) multiplicacao(5,2) = 5 + multiplicacao(5,1) multiplicacao(5,1) = 5 E analisando isto fica fácil ver a recursividade (multiplicacao(A, B ) = A + multiplicacao(A, B-1) ), e a condição pra para acabar a recursividade (se B igual a 1 então multiplicacao igual a A).
  11. Você não entendeu bem o que são e como funcionam ponteiros... Ponteiros indicam endereço da memória, ou seja, indica o local da memória onde se encontra o primeiro bit de um valor armazenado na memória. O tipo da variável ponteiro (float, int, char, etc) indica o comprimento (número de bits) do valor armazenado na memória, além de identificar como este valor deve ser usado/entendido. Mas toda variável por natureza já possui uma referência indicando o local onde seu valor é armazenado, e em C você pode obter esta referência usando o operador & antes do nome da variável. Se você lembrar bem você já usa isso frequentemente, na função scanf(). Ou seja, quando você faz algo como: scanf("%f", &variavelfloat); Você está passando para a função scanf() a referência que indica o local da memória onde é armazenado o valor da variável "variavelfloat". A função scanf() por sua vez armazenará esta referência num ponteiro do tipo float, assim quando a função fizer alterações no local da memória apontado por este ponteiro estará em efeito alterando o valor da variável "variavelfloat". Logo no caso da função postada pelo @Arm Outro o modo correto de usá-la no Main do programa seria este: float valor1, valor2, soma, subtracao, multiplicacao, divisao;...calculadora(valor1, valor2, &soma, &subtracao, &multiplicacao, &divisao); Assim, você está passando as referências das variáveis "soma", "subtracao", "multiplicacao" e "divisao" para a função, e estas referências são armazenadas nos respectivos ponteiros declarados na função, e as alterações feitas nos endereços de memória apontados por eles (ou seja as operações realizadas na função) estarão alterando os valores destas variáveis no Main do programa, aí o resultado pode ser obtido usando as variáveis normalmente no Main (do mesmo modo que você sempre fez no caso do scanf() ).
  12. isrnick

    ciclos

    Não, você tem razão, eu me enganei, a função exit() deve encerrar o programa não importa onde for chamada, ela faz parte da livraria padrão (standard library), então talvez você não tenha incluso a <stdlib.h> no seu programa?
  13. isrnick

    entrada

    Nesse caso você tem que criar uma condição de saída do loop de entrada de dados... Por exemplo, se você está recebendo estes dígitos como tipo int, uma condição de parada poderia ser a pessoa digitar um número negativo, ou um número com mais de 1 dígito (ou seja, maior que 9). Se está lendo como tipo char, você pode usar um caractere que indica o fim da entrada de dígitos, como o caractere ponto final (.), por exemplo. Ou então verificar que o caractere é um dos 10 dígitos possíveis, e parar se a pessoa digitar qualquer caractere que não seja um número.
  14. isrnick

    ciclos

    O MAIN do programa também é uma função, normalmente declarada como sendo do tipo int, e o programa é finalizado quando esta função retorna algum valor (normalmente 0 quando não há erros, usando return 0 ou no seu caso exit(0) ). Se você fizer uma condição pra sair de uma função que foi chamada dentro da função MAIN, então o programa apenas retornará para a função MAIN e continuará a partir do ponto em que a função foi chamada.
  15. isrnick

    entrada

    Você pode facilmente contar quantos dígitos o número tem, basta dividi-lo por 10 várias vezes (ou seja, ciclicamente), até que o número se torne igual a 0 e ir contando quantas vezes foi necessário dividir por 10.
  16. No caso a variável aí nesse exemplo seria do tipo float ou double, e não int... E a biblioteca pra fazer isso acredito que seja a "locale.h"...
  17. Nós pesquisamos mais alguns modelos mas ele acabou escolhendo o Samsung Expert X40 recomendado por você mesmo. Obrigado.
  18. Estou procurando um notebook para um amigo, e ele pretende usar o notebook pra trabalhar com design de bordados, então o notebook precisa rodar bem programas de edição de imagem. Os requisitos mínimos que ele precisa são estes: Tela: 15.6" (com boa qualidade de imagem) Processador Intel Core i5 Memória RAM: 8GB Placa de vídeo: Nvídia simples (830M e similares) Disco rígido: Não necessita muito espaço, 500 GB pra cima já atende. Na faixa de uns R$ 2.300,00. Alguém poderia recomendar alguns modelos? Obrigado.
  19. isrnick

    Função System()

    A função "system()" só aceita 1 parâmetro, do tipo char (ou vetor de chars/string), logo não possui as propriedades da função "printf()" de admitir vários parâmetros, ou de formatar os valores destes parâmetros em sua string de acordo com especificadores de formatação contidos na string... Nesse caso o modo mais simples acredito que seria concatenar as strings em 1 variável, e depois usar a variável na função "system()". Ex: #include <stdio.h>#include <string.h>int main(){ char string[300] = "C://Programa.exe "; char argumento[5] = "abcd"; strcat(string, argumento); system(string); return 0;}
  20. "maxA" está dentro de um condicional, o que significa que se a condição nunca for atendida ele nunca receberá valor algum, e a função não terá nenhum valor pra retornar para esta variável de saída, o que resulta em erro.
  21. Aqui uma solução: #include <stdio.h>int main(){ int n1 = 1, n2 = 2, n3 = 4, n4 = 3, n; n = n2; if (n > n1) { n2 = n1; n1 = n; } n = n3; if (n > n2) { n3 = n2; if (n > n1) { n2 = n1; n1 = n; } else n2 = n; } n = n4; if (n > n3) { n4 = n3; if (n > n2) { n3 = n2; if (n > n1) { n2 = n1; n1 = n; } else n2 = n; } else n3 = n; } printf("\nOrdem decrescente dos numeros: %d,%d,%d,%d\n\n", n1, n2, n3, n4); return 0;}Basicamente implementei a lógica do algoritmo de ordenação por inserção.
  22. #include <stdio.h> int main() { char x; char *ptr; ptr = &x; printf("%d %d\n", sizeof(ptr), sizeof(&x)); return 0; }
  23. Nada, o programa já funciona desta forma, deveria operar normalmente mesmo com mantissa e/ou expoentes negativos... Você fez testes com expoentes negativos? Encontrou erros?
  24. Sim, excelente solução @LNW, bem mais simples que a minha.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...