Ir ao conteúdo
  • Cadastre-se

Lucca Rodrigues

Membro Pleno
  • Posts

    1.081
  • Cadastrado em

  • Última visita

Tudo que Lucca Rodrigues postou

  1. @arfneto De certo modo, `x` seria auto É uma variável local de quanto(). Não entendi muito bem essa segunda afirmação... extern e static não são mutualmente exclusivos? Havia dito que: porque usar extern seria dizer que a variável estaria definida em outro lugar, e que essa declaração nada mais é que uma referenciação à definição, mas acho que isso seria só quando usamos extern explicitamente, a menos que estejamos tratando de protótipos de função, como você disse: extern não faria diferença nesse caso. Mas novamente, extern e static não são mutualmente exclusivos? Uma variável com static só pode ser acessada pelas funções do mesmo arquivo em que foi definida, e o mesmo vale para as funções definidas com static, certo? Me surgiram outras dúvidas (duvidosas)... E se definirmos uma função com extern? Não que faça sentido , até porque acho que a definição não deixaria de ser uma definição só porque está precedida por extern. E se declararmos um protótipo de função precedido por static num arquivo diferente de onde está a definição? Faria alguma diferença?
  2. Boa noite, colegas. Estava dando uma olhada no livro C: Como Programar 6ª edição, e me deparei com o seguinte: E mais adiante, o autor diz: E bem, vejo que ele disse o mesmo sobre os dois especificadores de classe de armazenamento... O único uso que conheço do extern é para referenciar variáveis globais e funções em outro arquivo, daí declaramos a variável ou função precedida por extern, mas não acho que variáveis globais e funções sejam precedidas por extern por padrão... Não seriam precedidas por static? Qual seria o certo?
  3. @alexandrecasa Se o vetor tem 10 elementos, então você tem acesso à posições de memória cujos índices variam de 0 a 9, não há uma de índice 10. E esta linha não precisa ficar dentro do loop, a atribuição é única e independente do índice `i`. Se quer copiar todos os valores até a última posição de `vetOriginal` e penúltima de `vetInvert`, o índice `i` deve ser incrementado até atingir valor 8: for(i = 0; i < 9; i++) vetInvert[i] = vetOriginal[i+1]; E então a ultima atribuição (fora do loop) é: vetInvert[9] = vetOriginal[0]; Ou então: vetInvert[i] = vetOriginal[0]; Pois `i` é incrementado uma última vez antes da condição do loop se tornar falsa. Depois é só imprimir: for(i = 0; i < 10; i++) printf("%d\n", vetInvert[i]); E bem, seria só isso se o enunciado não dissesse... Agora você precisa modificar o vetor `vetOriginal` e imprimí-lo
  4. @Visitante05052 O que espera que façamos com esse pseudocódigo? Se quer correções, terá que postar o código completo, compilável. Caso contrário, só podemos dar sugestões Veja: int x[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; `x` é uma matriz de inteiros 3x3. Os valores da primeira linha são 1, 2 e 3, e para acessar esses valores, basta um loop: for(int lin = 0, col = 0; col < 3; col++) printf("%d ", x[lin][col]); O mesmo vale para comparar esses valores, então você pode seguir a ideia de @Midori, use 2 loops: um para as linhas e o outro para as colunas. Para obter o maior valor, você pode usar esse pseudocódigo que fez, mas inicialmente atribua à `maior` o primeiro valor da linha: maior = mat[linha][0] se (mat[linha][coluna] > maior) maior = mat[linha][coluna]
  5. @Matheus Marcelino Você pode usar define: #define jogador1Vence cout << "jogador 1 Vence" #include <iostream> using namespace std; int main() { char jogada1 = '3'; char jogada2 = '2'; if(jogada1 == '3' && jogada2 == '2') jogador1Vence; return 0; } Para cada ocorrência de jogador1Vence, o compilador substitui esse identificador por cout << "jogador 1 Vence".
  6. @Luccas Fernando De certo modo, não há um valor. Digo, para a parte inteira desses limites há. Basta imprimir o número. Na saída, imprimindo FLT_MAX irá observar algo assim: 340282346638528859811704183484516925440.000000 Condiz com o valor que postou, e são 39 caracteres de parte inteira. Se tentar imprimir FLT_MIN, quanto menos casas após a vírgula, maior a imprecisão: 0.000000 0.00000000000000000000000000000000000001175494351 0.000000000000000000000000000000000000011754943508222875079687
  7. @Talyson Maia Por que não posta o pseudocódigo também? Porque a regra é "vogal - consoante". Se uma vogal for encontrada e após ela houver uma consoante, a vogal já deveria ter sido impressa antes do '-' prestes a ser impresso: Como eu havia dito: Uma forma de evitar que o '\0' faça com que a condição do if seja verdadeira é como você escreveu: Caso texto[a+1] seja o caractere nulo (0), e eventualmente vai ser, então o resultado de toda essa operação é 0, já que bit && bit && bit && 0 = 0.
  8. @Talyson Maia Se não está usando funções criadas por si, então essa linha não deveria existir, pois nela está chamando uma função vogal(). Mas já vem usando funções desde que começou a escrever programas em C. Como eu havia dito: Basta chamá-la e passar o valor de um char como argumento: Este valor será o valor do parâmetro `ch` na declaração da função: A função Vogal() é do tipo inteiro, ela retorna o valor 1 se `ch` for vogal, ou seja, se `palavra[i-1] ` for vogal, e retorna 0 caso contrário: É só isso, não tem segredo scanf() é função, printf() é função, e essas você sabe usar, certo? Tudo o que precisa fazer é passar algo como argumento que tenha correspondência com os parâmetros na declaração da função, e o mesmo vale para Vogal() ou qualquer outra função.
  9. @Talyson Maia Se você quer saber se um caractere da string `palavra` é uma vogal, não basta comparar com só uma vogal... Deve comparar com todas as 5. Você pode fazer uma função pra isso: int Vogal(char ch) { const char vogal[] = {'a', 'e', 'i', 'o', 'u'}; for(int i = 0; i < 5; i++) if(ch == vogal[i]) return 1; return 0; } Ela retorna 1 se `ch` for vogal, e 0 caso contrário. Sobre isso: O loop persiste até encontrar um 0 na string, digamos que temos: char str[] = {'b','a','t','a','t','a','\0'}; 'a' deve ser comparado com '\0' eventualmente, então o que seria impresso na saída é: Pois 'a' é vogal e '\0' não. O que você poderia fazer pra solucionar isso é inicializar o índice `i` com 1 e verificar se palavra[i-1] é vogal e palavra[i] não, veja: putchar(palavra[0]); for(int i = 1; palavra[i]; i++) { if(Vogal(palavra[i-1]) && !Vogal(palavra[i])) putchar('-'); putchar(palavra[i]); } Lembra que a função Vogal() retorna 1 se `ch` for vogal? Então: Vogal(palavra[i-1]) retorna 1 se palavra[i-1] for vogal; !Vogal(palavra[i]) retorna 1 se palavra[i] não for vogal, pois estamos usando o operador não-lógico (!); O resultado da operação 1 && 1 é 1, então a condição do if é verdadeira para o caso que queremos.
  10. Nesse código que postou não é impresso o menor dígito, apenas o índice. O código de @Midori funciona, basta pegar o retorno da função, que é a posição no vetor `vet` onde o menor valor se encontra, e usar de índice.
  11. @Caio Fagundes21 O argumento passado pra função não tem correspondência com o parâmetro, já que o vetor `vet` declarado na main é do tipo int e o primeiro parâmetro de encontremenor() é um float. Deveria ser int também. Aliás... É vetor, não veotr. E também... Esse espaço que deu depois do < causou um erro aqui.
  12. @Vktcs18 gets() é obsoleta, você pode usar a fgets() em vez dela. E não precisa de uma chamada da fflush() a cada linha do programa... Seu comportamento só é definido para fluxos de saída, então não há motivo para usar na entrada padrão.
  13. @DogTroll633 Bem, e que tal montar a tabela verdade? Você tem um inteiro binário de 3 bits na entrada, e 2 bits de saída, então você pode simplesmente fazer na mão ou simular Se quer um simulador prático, recomendo esse, de browser e tem vários componentes. Dê uma olhada nesse link como fica o circuito simulado, e mãos à obra.
  14. @Lucca Miraglia É a mais conveniente a se usar. Com scanf(), basta inserir no especificador depois do % a quantidade de caracteres que devem ser lidos e gravados na string. Com fgets(), o número máximo de caracteres a serem lidos é o segundo parâmetro, então você é obrigado a ter que determinar isso.
  15. @Gildeone Soares Nesse caso as variáveis que você precisa validar são todas membros da struct, então você tem que acessá-las da seguinte forma, por exemplo: printf ("Celular: "); scanf ("%d%*c", &y[i].celular); while(y[i].celular < 900000000 || y[i].celular > 999999999) { // Caso não esteja dentro do intervalo printf("Numero de celular invalido!\nDigite novamente: "); scanf("%d%*c", &y[i].celular); } Não se esqueça de usar o %*c como último especificador na scanf(), ele lê e ignora o '\n' digitado ao se teclar Enter no final da leitura, isso impede que o '\n' restante no fluxo eventualmente interfira em outras leituras. E bem, a mesma forma de acessar vale para `diaNascimento`, `mesNascimento` e `anoNascimento`. De resto, esta linha: Como eu havia dito anteriormente: Faltam os argumentos respectivos ao mês e ao ano.
  16. @Gildeone Soares A primeira chamada da scanf() grava um valor em `celular`, e para verificar se esse valor está dentro do intervalo requisitado, basta usar um loop: Considerando que `celular` já tem um valor armazenado, verificamos se esse valor está fora do intervalo 900000000 a 999999999, ou seja, se valor < 900000000 ou valor > 999999999, e caso estiver, chamamos a scanf() novamente para ler outro valor. Você pode usar o for, eu usei o while porque foi conveniente. Quando um novo valor é gravado, ele verifica se está fora do intervalo.
  17. @Gildeone Soares Colega, já criaram um tópico com essa questão, dê uma lida na minha resposta:
  18. @Danilorese Colega, perguntar se há alguém que tem conhecimento dessas estruturas é um pouco vago Recomendo perguntar algo mais objetivo... Afinal, tem alguma dúvida?
  19. "caracteres indesejados" acredito que, baseado em seu exemplo, se refere ao que pode restar de uma leitura após uma chamada da scanf(), e de certo modo é previsto que um '\n' reste no fluxo se não o ler. Com getchar(), os caracteres digitados são todos impressos até que se pressione Enter, e é preciso um loop para que a função leia tudo até encontrar o '\n', caso contrário, a função lê o primeiro caractere no fluxo, mas isso não muda o fato de que afinal se está aguardando um Enter. Eis minha proposta #include <stdio.h> #include <Windows.h> int Pause(void) { DWORD mode; int n = 0; int c = 0; HANDLE h = GetStdHandle(STD_INPUT_HANDLE); if (h == NULL) return 1; // Salvando o modo atual GetConsoleMode(h, &mode); // Alterando SetConsoleMode(h, mode & ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT)); // Lendo while (c != 13) ReadConsole(h, &c, 1, (LPDWORD)&n, NULL); // Restaurando SetConsoleMode(h, mode); return (!n); } int main() { int x; int ret; // Mesmo teste do vangodp // Sobra um '\n' no fluxo puts("Digite um numero:"); scanf("%d", &x); // Pause() só retorna ao teclar Enter // Pode retornar também se ocorrer um erro :/ puts("\nPressione Enter para prosseguir..."); ret = Pause(); printf("\nPause() retornou <%d>\n", ret); return 0; } Na saída: Pause() não imprime nada na saída, não é afetada pelo tal '\n' que resta no fluxo e só aguarda um Enter.
  20. @Thiago gomes de souza Sempre poste o código usando o botão code: Bem, vejo que você não fez nenhuma verificação que foi pedido no enunciado, ou seja, os itens 2 e 3 inteiros. Vou lhe mostrar um exemplo de como pode verificar o valor inserido para o número do celular, veja: #include <stdio.h> int main () { int celular; scanf("%d%*c", &celular); // O loop abaixo faz a verificacao while(celular < 900000000 || celular > 999999999) { // Caso não esteja dentro do intervalo printf("Numero de celular invalido!\nDigite novamente: "); scanf("%d%*c", &celular); } printf("O numero de celular eh: %d", celular); return 0; } Agora faça a verificação para o dia, mês e ano inseridos. A respeito disso: Faltam os argumentos respectivos ao mês e ao ano.
  21. @Aquiles Augusto Não há nenhuma variável do tipo float em seu programa. O problema é que você está tentando imprimir a string `tc` sem ao menos inicializá-la, tudo o que fez foi inserir um '\0' em uma determinada posição: Aliás, qual o propósito do vetor `tn`? Você poderia só somar o valor de `c` aos valores de `t`. E não se preocupe com cast: de char pra int ocorre uma conversão implícita, não precisa de cast.
  22. @Joao909 Tentou dar uma googlada? Leia a documentação. Se tiver dúvidas, pergunte.
  23. @Ryan Kologeski Fica mais simples se você usar uma struct: #include <stdio.h> typedef struct { int futebol; int idade; int cidade; } DADOS; int main() { DADOS pessoas[6]; return 0; } Inclusive é o esperado de um exercício no qual você deve colher e armazenar dados. Os membros da struct nem precisam ser do tipo int, podem ser short, char, etc. 1 byte de memória já é mais que o suficiente. Bem, faltou um & nessa linha: E a condição do while é satisfeita quando o `i´ atinge valor 5, então só ocorrem 5 repetições, não 6.
  24. @Caio Lopez Basta dar uma googlada em como validar um CPF. Tem várias postagens no fórum sobre isso... Estarei colando aqui uma postagem minha de um tempo atrás. O método é só um, tente criar o seu código, tenho certeza que consegue.

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!