Ir ao conteúdo

arfneto

Membro Pleno
  • Posts

    6.526
  • Cadastrado em

  • Última visita

Tudo que arfneto postou

  1. ?? O comando tem que especificar o endereço.... ping -t 192.,168.0.1 seria para o gateway padrão e para a internet pode deixar rodando em outra janela ping -t 1.1.1.1 por exemplo em outra assim pode ver claramente quando para o tráfego na rede local e com a internet. Pode ajudar a entender o problema
  2. arfneto

    C Fila de Prioridade em C

    Sim. Faz total sentido Quando mais seu modelo se afasta da realidade simples de uma fila de prioridade, implementada através de uma lista ligada que não deveria estar aparecendo, usando uma prioridade que está fora do dado e não como atributo dele, declarada como float, o trabalho vai ficando mais e mais difícil a toa. Agora chega a ponto de ter um alocador híbrido, com um estoque de nós vazios pré alocados para o caso de necessidade. Imagino que agora vá implementar uma lista ligada de nós apagados e prontos para reuso... Não por acaso não terminou isso no mesmo dia em que começou. Fuja disso. Use o próprio conceito de encapsulamento e redefina o USO desse modelo absurdo que recebeu. E escreva as funções de um modo convencional. Porque não pode liberar a memória?
  3. Não. não influenciam. A menos que esteja com mais de 95% do disco em uso e aí tudo vai ficando mais lento...
  4. Você teria que ter um laptop de uma marca muito exótica para não ter todos os drivers já incluídos na instalação de Windows 10. Sabe que drivers estavam faltando? Notou a mensagem em sua tela de diagnóstico? "gateway padrão não está disponível" é uma coisa de situação. Nada tem a ver com sua máquina ou o sistema que usa. Apenas o protocolo TCP/IP: perdeu o endereço do gateway padrão ou a conexão com ele. Qual o seu gateway padrão? Deixe rodando numa tela um comando ping -t nesse endereço e veja se ele fica sumindo. Esse em geral é o endereço do --- em geral único --- roteador de sua rede local.
  5. Acho que sim! Qual sua dúvida?
  6. Usando auto para o tipo e eventualmente para os parâmetros você pode usar a mesma função para vários tipos sem quer que escrever templates, só escrevendo a função. Essa é a razão por trás de auto nesses casos Talvez esse exemplo explique algo mais para você. Ele mostra 1: exemplo(2, 3.4) = 5.4 2: exemplo("Clube"," do Hardware) = Clube do Hardware 3: exemplo('a','b') = 195 4: exemplo(2, 3) = 5 A função exemplo() roda para qualquer tipo que possa ser somado. Isso em C++20 é um concept. Se você criar qualquer classe que defina soma a função lambda vai funcionar sem qualquer mudança. E você pode definir soma para qualquer classe que escreva. Imagine uma classe conjunto por exemplo e se você escrever a união entre dois conjuntos como sendo a soma deles. a função lambda vai rodar com seu conjunto Eis o exemplo #include <iostream> using namespace std; int main() { auto exemplo = [](auto a, auto b) -> decltype(a+b) { return ( a + b ); }; // 1 std::cout << "1: exemplo(2, 3.4) = " << exemplo( 2, 3.4 ) << std::endl; // 2 const string a{ "Clube" }; const string b{ " do Hardware" }; std::cout << "2: exemplo(\"" << a << "\",\"" << b << "\) = " << exemplo(a,b) << std::endl; // 3 std::cout << "3: exemplo('a','b') = " << exemplo('a', 'b') << std::endl; // 4 std::cout << "4: exemplo(2, 3) = " << exemplo(2, 3) << std::endl; }
  7. @devair1010 Se você estiver em uma entrevista de emprego ou com seu orientador na universidade e o entrevistador pedir para você falar sobre fflush() e buffers e streams em C no Windows você pode dizer: (a) A gente precisa precisa apagar o lixo do teclado então tem que dar fflush() para limpar o buffer!. Todo mundo sabe isso! E funciona no Code::Blocks! (b) fflush() não está definida para fluxos de entrada, mas a Microsoft implementou essa extensão que funciona apenas, claro, no Windows. no Windows você pode chamar FlushConsoleInputBuffer() que com esse nome já se imagina o que faz Por outro lado uma simples chamada a fgets( , ,stdin ) vai consumir os dados que eventualmente não foram consumidos por scanf() scanf() nunca deveria ser usada para entrada de dados via teclado. Basta ver o nome. O propósito dela é scan formatted input --- ler entrada formatada --- e o teclado não é nada formatado: o usuário tem dezenas de teclas e grande liberdade se é preciso controlar perfeitamente a entrada, sem permitir que o cursor saia pela tecla afora por exemplo, é melhor separar o teclado da tela, como nos anos 80. Ler sem eco e só mostrar na tela e mover o cursor se for algo válido. Ou ao menos ler a linha toda usando fgets() ou letra a letra usando fgetc() O que venha a ter no buffer do teclado não é lixo. Não se sabe o que foi parar lá e pode ter outra rotina no mesmo programa que vai consumir o que scanf() não leu. Não se pode imaginar que isso seja um problema de scanf() ou que uma função de biblioteca, e que foi escrita para outra coisa, tenha capacidade de identificar o que os valores digitados representam para o programa: será um gato andando sobre o teclado ou o cara digitou aquilo de propósito? Conheça as ferramentas que usa e boa sorte nas entrevistas se por acaso passar por alguma.
  8. arfneto

    C Fila de Prioridade em C

    você entendeu o que eu te expliquei? eu mostrei a linha, a razão e as variáveis. De novo: O que eu tentei de explicar, mais de uma vez, vou tentar resumir de outro modo: uma fila de prioridade pode ser implementada de qualquer maneira. Qualquer uma. Esse conceito de colocar a implementação toda dentro da estrutura é o tal de encapsulamento. Quando você lê as chamadas das funções que tratam a lista de prioridade não consegue ver como ela foi implementada. Se você abre seu programa nas funções que tratam a lista ligada não vê o que ela está ligando, não vê a fila de prioridade. E esse é o valor real dessas coisas: ADT. Você abstrai o modelo real e esconde nessas estruturas de estruturas de estruturas. Esse modelo que você recebeu é muito ruim. Não mostra o valor dos modelos. Não ajuda na implementação e ainda fica no seu caminho. Exatamente o que eu te disse que dá problema está dificultando a simples compilação de um algoritmo que já está torto na própria declaração. Mas assim é. Se deve fazer assim use suas variáveis e tipos e conserte o que der. Veja se entende a linha de código que te mostrei de novo e a questão dos tipos. A culpa não é sua de ficar confuso se está confuso. O modelo é ruim demais. Não, não é. Um ponteiro é só isso: uma variável de 4 ou 8 bytes nesse caso e que tem um endereço. Esse endereço pode apontar para qualquer coisa. Corrija o que te expliquei ou pergunte de novo se não entendeu. adicionado 9 minutos depois Um exemplo do seu modelo: PFILA é um ponteiro para FILADEPRIORIDADE, e aponta para um endereço onde tem uma estrutura arranjo que aponta para um ponteiro para struct aux, onde tem um ponteiro ant para uma outra struct aux. Você acha que um exercício introdutório como esse justifica esse nível de redirecionamento? Eu acho que não. adicionado 19 minutos depois novoElemento é PONT, que é struct aux* typedef struct aux { int id; float prioridade; struct aux* ant; struct aux* prox; } ELEMENTO, * PONT; E lá não tem esse campo arranjo. Ele está em f, que é FILADEPRIORIDADE*, onde tem um campo arranjo que é struct aux** que é PONT* sinistro. Estou quase aprendendo seu modelo.
  9. Estava indo bastante bem com sua estrutura, mas acabou perdendo algo: todo o propósito é escrever em torno dos dados e com um olho no futuro, já que vai classificar a lista pode ter que escrever outra lista logo no próximo exercício Então era para escrever algo assim typedef struct { int codigo; TEXTO nome; } DADO; typedef struct NODO { DADO dado; NODO* proximo; } NODO; typedef struct { int tamanho; NODO* inicio; NODO* fim; } LISTA; Onde a lista é um conjunto de NODO e cada NODO tem um DADO. Essa é a abstração que está procurando. Na verdade seria melhor usar DADO* no NODO, ou mesmo void*. Porque? Simples: no caso de usar um ponteiro, ao percorrer a lista original os DADO já estão na memória e seria só o caso de realocar os ponteiros de uma série de NODO. Poderia mesmo manter a lista original. Muitas vezes é o que se quer: uma LISTA para cada critério de classificação, mas sem duplicar DADO porque cada um pode ser uma estrutura enorme. Porque (void*) ? Simples: Se hoje é sexta e na segunda aparece a necessidade de programar outra lista com dados completamente diferentes e cada NODO aponta para void* dado então você não precisa nem recompilar a parte de LISTA para o novo programa. Use uma convenção para nomear os tipos, como tentou usar em 2 de 3 estruturas. Todas letras em maiúscula, a primeira letra apenas, um prefixo, um sufixo, qualquer coisa. Mas faça algo e faça sempre igual. E evite declarar typedef com ponteiros porque dá muito trabalho ficar procurando o que é o que nas definições. De volta ao código void ordenaCodigo(LISTA *l); Em geral retornar void é um desperdício. E muitas vezes um erro mesmo. Em geral há razão para retornar algo. E necessidade. No seu caso aqui poderia retornar o endereço da nova LISTA. Não ficou claro se quer gerar uma nova lista ou se vai só reordenar a própria lista l
  10. for(i = 0; b < n; i++) { auxiliar = a + b; a = b; b = auxiliar; printf("%d\n", auxiliar); } Se o número que você imprime é auxiliar porque d1@b0 de razão está usando outro valor para controlar a saída do loop? O objetivo não é mostrar a serie enquanto menor que o valor digitado? Porque não escreve claramente nos printf() antes de ler o que pretende que aconteça?
  11. arfneto

    C Fila de Prioridade em C

    Acho que já falei isso, mas essas estruturas sequer representam bem um fila de prioridade. E do modo como foi escrito vai atrapalhar muito ao invés de ajudar a escrever. Sugiro escrever em torno dessas estruturas e usar o nada original conceito de encapsulamento. E tem coisas folclóricas: bool aumentarPrioridade(PFILA f, int id, float novaPrioridade); bool reduzirPrioridade(PFILA f, int id, float novaPrioridade); Considerando que a prioridade é um número de ponto flutuante e com sinal qual o sentido de ter uma função para aumentar e outra para diminuir a probabilidade? E considerando o valor e o conceito geral de encapsulamento qual o propósito do enunciado dizer que o valor original não pode ser removido? Porque restringir a implementação? Um valor de prioridade em float só não é mais estranho que um em radianos Considerando que uma fila de prioridade em geral se define como uma coleção, um conjunto onde cada elemento tem uma chave e uma prioridade e as operações consideradas são insert(x,S); insere a chave x no conjunto S --- push() max(S) retorna o primeiro da fila. Pode ser o menor se a fila for ascendente --- top() extract(S) retira o primeiro --- pop() increase(k,x,S) para aumentar a prioridade k do elemento x em S E uma fila dessas geralmente se implementa usando Heap e não listas, então como eu tinha dito em outra ocasião essa é uma estrutura híbrida de lista ligada e fila de prioridade e só vai te dar mais trabalho para escrever e provavelmente ensinar pouca coisa. Estruturas de dados abstratas modelam coisas reais, e a prioridade muitas vezes sequer faz parte do node. Imagine um sistema de transporte onde a prioridade de uma caixa depende do destino do caminhão que vai entrar no BOX de carga, e isso só apareça quando ele entrar na vaga e o operador passar o cartão... De volta aos termos do enunciado e ao seu código printf("\nValores do arrajo:\n\[ "); tem erros simples como esse que além do erro de grafia tem um \[ e claro que o compilador vai reclamar. Agora tem coisas para pensar como isso void buscaSeqExc(PFILA f, float prioridade, PONT* atual, PONT* ant); PONT é struct aux*, um ponteiro. Então PONT* é struct aux** e você tem que tratar de acordo, como em *atual = ant->prox;//Próximo elemento da fila. já que *atual é PONT e então NÃO pode escrever *atual = ant->prox;//Próximo elemento da fila. No comentário pode escrever o que quiser, mas PONT não tem um campo chamado prox *ant tem... Pense nisso. Assim estaria certo: *atual = (*ant)->prox;//Próximo elemento da fila. Por isso eu disse aqui que não é esperto declarar typedef para ponteiros e estruturas ao mesmo tempo. Declare apenas para estruturas e não vai errar como aqui...
  12. Não há razão para inicializaLista(). Apenas controle o número de alunos. Está alterando 10.000 estruturas a toa. Em copiaAlunosLista2Arquivo() não leia campo a campo. Para que todo o trabalho de criar a estrutura se vai ler campo a campo? Pense bem. Grave e leia uma estrutura inteira por vez usando o simples: read() e write() As primeiras funções que deve escrever são as que gravam no disco e as que listam a estrutura como está na memória. Porque é assim que se certifica de que as coisas estão andando de acordo com o esperado...
  13. void insereAluno(Aluno *lista, int n); Essa construção é problemática. Procure usar algo assim void insereAluno(Aluno* novo, Aluno[] turma, int n); e não misture a leitura com a inserção. Isso só dificulta os testes e leva a problemas. E fica mais difícil de ler. Mais ainda, escreva em torno de seus dados e entenda que uma Sala por exemplo é um conjunto de alunos. Chamado container em C++ ou coleção em java, e escreva algo assim typedef struct { char matricula[10]; char nome[50]; char curso[25]; char cpf[25]; char peso[10]; char altura[10]; char idade[5]; } Aluno; typedef struct { char nome[50]; int N; // quantos tem agora? Aluno aluno[TAM]; } Turma; Aí você pode declarar coisas assim Turma fisica[3]; fisica[0].N = 0; strcpy(fisica[0].nome, "Fisica II Turma A"); fisica[1].N = 0; strcpy(fisica[1].nome, "Fisica II Turma B"); fisica[2].N = 0; strcpy(fisica[2].nome, "Fisica II Turma C"); E criar 3 salas de física e começar com 0 alunos em cada uma e carregar os caras. Só que cada turma tem seus dados, incluindo o vetor e o tamanho, então tudo fica mais fácil de ler e programar. Pode ser algo simples com declarar void insereAluno(Aluno lista[], int n); Se leu o resto que escrevi entende que pode ser melhor escrever de outro jeito, passando um aluno para a função e NUNCA lendo lá dentro.
  14. Então não está assim "normal" mesmo. Precisa mesmo testar com um vetor de 10 mil alunos? Você declarou Aluno* e isso é... um ponteiro para Aluno. Um único aluno. Ou você declara e constrói um vetor de ponteiros para estrutura, usando Aluno**, ou declara um ponteiro para um vetor de Aluno, usando Aluno[] como argumento nas funções.
  15. Não entendi seu programa. Está ao final no último else testando de novo os possíveis valores de cod que já testou antes. Para que? E porque todos esses else? só fica mais difícil de ler. Cada opção é definitiva: vai tratar a opção e sair ou continuar no loop lendo o próximo valor de cod. São dois casos e dois comandos: return para sair e continue para ler o próximo cod. Porque usou só o return e deixou esses else todos? Porque não mostra o valor de cod que leu, a toda vez? Enquanto está testando é bom se acostumar a fazer isso. Porque quando o código está em branco tem um tratamento especial, que é só deixar de mostrar a mensagem? Depois de ler com scanf() você precisa consumir o que quer que seja que o cara digitou e que possa não ter sido usado. scanf() é para ler entrada formatada. Teclado não é assim: o usuário tem uma certa liberdade... Use um simples loop e consuma o que quer que tiver lá. Entenda que ao digitar o valor ao tratar cod D por exemplo o usuário pode escrever "120.00 todo o dinheiro que eu tinha! " e só depois teclar ENTER. E isso vai claro atrapalhar um pouco a sua lógica Depois de ler o que queria leia o resto. E Entenda que scanf() pode não ler nada. Por isso ela retorna um int dizendo quantos valores leu. Só que você não está testando e aí nunca vai saber. SEMPRE teste o retorno de scanf() . adicionado 7 minutos depois É, não deve. fflush() não está definido para arquivos de entrada. Code::Blocks não tem efeito sobre isso. Seu compilador é que está fazendo isso --- flush() numa situação que contraria a documentação --- porque no Windows a Microsoft adotou esse comportamento e está programado assim no código de fflush() na biblioteca padrão. Você pode apenas ler o que está lá. Entenda que o usuário pode ter teclado mais coisas, mas no mínimo tem um ENTER, então um simples fgets() funcionaria em Windows E Linux e outras plataformas.
  16. O tipo pode ser qualquer coisa, ou pode ser calculado depois a partir dos valores de retorno. Mas provavelmente não há razão para não usar auto
  17. Eu mostrei o porque. mostrei quem criou a Álgebra de Boole, e deve imaginar que o nome Bool vem de George Boole e que a álgebra de Boole vem do trabalho desse cidadão e em especial do livro que eu citei. Te mostrei no glossário da Intel quais são os operadores lógicos. e lá estão eles de novo. Mesmo que você não tenha nenhuma formação matemática pode achar essa leitura interessante, o referido livro. Entenda que em C os tais operadores bitwise só tratam bits e tem os lógicos, cuja lista imagino que já saiba, AND OR NOT e XOR e os de shift que deslocam bits. Seria redundante ficar acrescentando que eles são lógicos porque se imagina que todo mundo saiba, apesar da intel ter colocado no glossário, quais são os operadores. Talvez saiba que todos os processadores tem essas instruções lógicas Ou fosse pesquisar no Google por eles. Olha só a primeira página no Google pesquisando por isso pois é: nem precisa abrir a pesquisa. Acho que só quer criar polêmica afinal Postei um exemplo da solução e a linha em questão é óbvia Claro que é equivalente ao código que postou int const A = (0 == meu_numero_inteiro % 3); int const B = (0 == meu_numero_inteiro % 5); int const C = (A && B); int const R = ((A || B) && !C); Ou esse que é mais comum e simples int const C = (A && !B) || (B && !A); // a definicao de ou exclusivo No entanto se espera que o aluno (ou o candidato, é uma pergunta comum em teste de emprego) aluno perceba que se trata de XOR e escreva o óbvio int const C = A ^ B; // o obvio, desde George Boole, // no seculo XIX, antes do bool, do C, do FORTRAN Para uma coisa que está nos livros desde o século XIX devia ser mais fácil de você aceitar. Eis a tabela, como em todo processador. Cortesia de https://en.wikipedia.org/wiki/Bitwise_operations_in_C#Bitwise_XOR_^ Sobre não ter um operador ^^ apesar de ter && e || pode ser que "aceite" a opinião de Dennis Ritchie, o criador da linguagem, como está no C`FAQ em c-faq.com/misc/xor.dmr.html Estou citando isso tudo porque outros podem estar lendo isso e o seu aparente interesse em criar polêmica com qualquer coisa ao ponto de não aceitar algo como Álgebra de Boole possa distrair outros da simples e descomprometida informação de o que é o que.
  18. Acho que sabe agora que gets() foi condenada há décadas. Use fgets(), mas entenda que gets() e fgets() retornam ao ler um '\n' na entrada e ele vem na linha então deve tratar isso de acordo. Em geral é ok porque vai sair com fputs() que faz a mesma coisa. Mas se vai usar no programa pode precisar tirar o valor de lá. Como ele está sempre lá no fim é trivial. Não use variáveis globais. Nunca. Em geral nas empresas é proibido, nas escolas custa nota. E não é esperto. Sempre dá problema. main() deve ser a primeira função de seu programa, sempre. Se possível em um arquivo separado. Isso ajuda você e outros que venham a ler seu programa. não escreva duas vezes código para fazer a mesma coisa: para remover um contato você primeiro pesquisa, igualzinho naquela função pesquisa()... Então chame aquela função. Assim se errar ou precisar mudar aquilo vai mudar em um lugar só. pesquisa() devolver o número do cara é pouco útil. Que vai fazer com esse número? No momento seguinte pode ter inserido alguém na frente e o número mudou... Retorne o endereço dele Entenda que uma lista é uma coleção de nós. Ela não é um nó. Você pode fazer de conta que é, como em geral parece que os caras ensinam e os alunos tentam. Mas não é. Do seu programa: noContato* prim = NULL; //define primeiro elemento como vazio noContato* ult = NULL; //define ultimo elemento como vazio int quant = 0; Isso só arruma problemas para você mesmo: imagine se precisar usar duas listas, do nada. E acaba tendo que passar parâmetros pra todo lado toda hora. Ou pior, como fez, usando valores globais. E com nomes assim simples: prim e ult. Outro dia tinha eu vi um programa com uma variável global chamada aux. E o que aconteceu? No meio do programa o autor declarava outra e lá se ia a estrutura toda. Imagine algo assim struct no { void* item; struct no* next; struct no* prev; }; // no typedef struct no Node; struct a_propria_lista { char* nome; unsigned quantos; unsigned maximo; Node* inicio; Node* fim; }; typedef struct a_propria_lista Lista; E você pode declarar Lista livros; Lista* playList; Lista novas[8]; E junto com a lista vão os ponteiros, o tamanho e o limite, por exemplo. Para cada lista
  19. Escreva seu programa em torno dos dados. Sempre. Considere também uma construção assim const int testeA[MAX] = { 2, -4, 6, -8 , 10 }; const int testeB[MAX] = { -2, 4, -6, 8 ,-10 }; const int outroA[MAX] = { -1, 1, 1, 1, 1 }; const int outroB[MAX] = { 0, 0, 0, 0, 0 }; E escreva seu programa com dados que você pode ir alterando e testando até dar tudo certo. Já deve ter visto o quanto é chato para cada simples teste entrar com 10 números. Não faça isso. Só perde tempo. Quando estiver funcionando você insere a leitura, que não acrescenta nada. Sobre um algoritmo Considere os dados e entenda que você tem que olhar todos. Os menores podem estar só no fim do segundo vetor, pode ser tudo igual... Então pode fazer em dois passos: primeiro encontra o menor elemento de todos, do jeito mais ingênuo, olhando um por um afinal tem que olhar um por um. De posse desse conhecimento a segunda fase é um loop, de 2 até o total que precisa para preencher o segundo vetor. Olhando de novo um a um, mas ao invés de procurar o menor procura o menor que seja maior ou igual ao último que colocou no vetor de saída...
  20. Pelo que diz aí você não instalou nenhum dos kits da lista... Aquela lista do tópico #1... Até onde eu sei Qt Creator não é open source. E por outro lado pode ser problema o Qt creator se usa outras API ao mesmo tempo então... https://www.qt.io/product/development-tools Me parece menos comprometedor usar no Visual Studio. E mais simples nesse caso. Como eu disse, 1 click.
  21. Se está sugerindo que XOR não é um operador lógico, recomento a leitura de um livro sobre isso, qualquer sobre o assunto. Ou qualquer manual de C. Para citar algo mais técnico, leia no glossário da Intel, conhecida por fabricar chips com operadores lógicos e aritméticos Veja uma ilustração de lá: De volta à questão: Isso é chamado OU EXCLUSIVO. É uma pergunta comum em testes de emprego para estagiários. E uma vez que agora está claro o que é seria ingênuo não escrever como tal e ao invés disso dar voltas pela definição. Para uma bibliografia mais consagrada, recomendo An Investigation of the Laws of Thought de George Boole é do século 19 mas já se sabia sobre operações lógicas. Esse autor é o pai disso tudo, e um ícone da filosofia e matemática. Em C como seria? Eis o resultado Desse pequeno programa #define _mmCRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int main(void) { int i = 0; char res[2] = { 'N', 'S' }; // so 0 eh falso const int valor[] = { 12, 15, 18, 30, 2, 10, 15, 20, 25, 8 }; printf("Divisivel por 3 ou 5 mas nao pelos dois?\n\n"); for (i = 0; i< sizeof(valor)/sizeof(int); i+=1) { int condicao_1 = valor[i] % 3 == 0; int condicao_2 = valor[i] % 5 == 0; printf( "\t%4d: %c\n", valor[i], res[condicao_1 ^ condicao_2] ); }; printf("\n\t%d valores testados\n", i); }; Note a linha res[condicao_1 ^ condicao_2] que é a condição do enunciado. Se você que está lendo isso tiver que responder algo assim numa entrevista de emprego, lembre que eu avisei . George Boole criou a disciplina, chamada hoje ainda de álgebra de Boole, e praticamente todas as linguagens tem esse operador. COBOL não tem. até onde eu sei. Todos os processadores tem. É essencial em criptografia pela conhecida propriedade de ser reversível. A^B^A para todo A Isso está errado os operadores lógicos são chamados bitwise quando operam, quem diria, com bits. Mas são operadores lógicos. Como são && || e ! para expressões. Muda o alvo, não o conceito. Leia mais sobre isso, por exemplo nos locais que citei acima e em algum livro sobre C que você aprove. Ou apenas leia a gramática de C se conhecer a notação
  22. Está errado. Eu te disse duas maneiras de escrever isso. Sobre a teoria procure em seu livro por escopo --- scope . adicionado 2 minutos depois ainda sobre isso: o endereço é igual, só que não tem mais nada lá. Ou pode ter. Fora da função vai depender do sistema o que fazer com o conteúdo daquele endereço.
  23. Faz sentido, já que como te expliquei, clienteAlvo só existe dentro dessa função.
  24. map não é uma biblioteca; é uma classe. Qual sua dúvida nesse código?
  25. Pense bem em suas condições e escreva seu programa em torno dos dados. SEMPRE. Sua terceira condição é mais abrangente e é conhecida pelo nome de ou exclusivo e tem um operador para isso, o ^ . Em geral é abreviada por XOR Assim deve escrever apenas A^B, porque pode ser só uma pegadinha esse enunciado... Se int valor = n; Então pode escrever sua condição como if ( (valor%3 == 0) ^ (valor%5 == 0) ); // esse serve

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!