-
Posts
1.558 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que isrnick postou
-
Sempre use a tag CODE, apertando o botão <> no topo do campo onde você digita resposta, para postar seu código, pois assim você mantém a formatação do seu código, e evita que o autocorretor do fórum faça alterações no texto do código. Mas se entendi o que você quer é que o usuário digite 5 números, e some apenas os que forem múltiplo de 3? Para testar se um número é múltiplo de outro basta obter o resto da divisão inteira, se o resto for 0 então o número é múltiplo. Em C o operador para calcular o resto da divisão inteira é %. Por exemplo: 6 % 2 = 0 //Logo 6 é múltiplo de 2 5 % 2 = 1 //Logo 5 não é múltiplo de 2
-
Mostra o código que você usou. (Use a tag CODE para postar códigos apertando o botão <> no topo do campo de resposta, para manter a formatação do código e evitar que o autocorretor do fórum faça modificações nele.)
-
Como começar a estudar programação?
isrnick respondeu ao tópico de Curvina em Programação - iniciantes
E se ainda não souber bem o inglês eu sugiro estudar ao mesmo tempo em que vai estudando lógica de programação, pois vai tornar seu aprendizado de programação e suas linguagens muito mais fácil. -
Verificação de programa via arquivo batch
isrnick respondeu ao tópico de Kyuube em Programação - outros
Você pode usar o tasklist para checar se o processo está rodando, aí você precisa processar a saída dele para obter a parte que te interessa para checar: Comando: TASKLIST /FI "IMAGENAME eq notepad.exe" /FO CSV /NH Saída: "notepad.exe","1576","Console","1","11.656 K" Ou então isto Comando: TASKLIST /FI "IMAGENAME eq notepad.exe" /NH Saída: notepad.exe 3028 Console 1 11.800 K Ou talvez, seja mais interessante checar a resposta pra quando o programa não é encontrado: INFORMAÇÕES: nenhuma tarefa em execução correspondente aos critérios especificados. -
#include <stdlib.h> #include <stdio.h> int main(){ int mult1=0,mult2=0,n=10; /*Obs: Para armazenar 11 caracteres não nulos o vetor da string deve conter pelo menos 12 posições, pois a 12ª deverá conter o caractere nulo '\0', que indica onde acaba a string.*/ char cpf[12]; printf("Digite seu cpf no formato(XXXXXXXXXXX)"); fgets(cpf,12,stdin); for(int i=0;i<1;i++){ /*É aqui que você precisa converter o caractere do dígito numérico para o número inteiro correspondente, para então fazer a multiplicação: */ mult1 += (cpf[i] - '0') * n; n--; } printf("%d", mult1); return(0); } A função atoi() recebe como parâmetro uma string inteira, por exemplo converteria "123" para 123 (centro e vinte e três) inteiro, logo mandar um único caractere não é possível, seria necessário passar pelo menos uma string de 2 posições com o caractere seguido pelo caractere nulo. Veja alguns exemplos: char c[4] = "123"; atoi(c); //retorna 123 c[0] = '1'; c[1] = '\0'; atoi(c); //retorna 1 atoi("1"); //retona 1 pois com aspas duplas é uma string atoi("123"); //retorna 123 /*Mas as duas situações abaixo não funcionam, pois está sendo passado apenas um único char para a função.*/ atoi('1'); atoi(c[0]);
-
Erro sobre declarar variáveis no VisualG
isrnick respondeu ao tópico de Cainã Rinaldi Esteche em Programação - iniciantes
Acredito que o operador para calcular a divisão inteira no VisualG é a barra invertida '\', como: 5 \ 2 = 2 -
O problema está na hora de fazer a multiplicação não na hora de imprimir... (Aliás "multi" é um int não um char, não tem porque subtrair '0' ali.)
-
Aqui, acredito que seja isto o que você quer fazer: #include <iostream> #include <string> using namespace std; int main() { string entrada; int count = 0, comprimento, totaldeslocado; cout << "Digite sua cadeia de caracteres ou frase: \n"; getline(cin, entrada); comprimento = (int)entrada.length(); for (count = 0; count < comprimento; count++) { if (isalpha(entrada[count])) { entrada[count] = tolower(entrada[count]); /*Abaixo fiz a soma numa variavel int pois char só tem 8 bits então só contaria até 255, o que causaria problemas quando a string for muito longa, e count começa a crescer tal que a soma resulta em mais que 255, como num texto ao invés de uma frase ou palavra.*/ totaldeslocado = (int)entrada[count] + count + 1; if (totaldeslocado > (int)'z') /*Subtrai o total deslocado de 'a', pega o resto da divisão inteira do resultado por 26, converte o resto p/ char, e soma a 'a' para obter o caractere deslocado.*/ entrada[count] = 'a' + (char)((totaldeslocado - (int)'a') % 26); else entrada[count] = (char)totaldeslocado; } } cout << "Resultado: \n" << entrada << endl; }
-
Ou então o robocopy.
-
Tente algo assim: (comando para salvar o valor da variável x dentro de x.bat) echo set "x=%x%" > x.bat (comando para recuperar o valor da variável x gravado em x.bat) call x.bat
-
No segundo for a variável inteira "a" deveria receber "(n-k)" inicialmente, pois o que você quer calcular é o fatorial (n-k)!. Ficando assim: int fat = 1; for (int a = n-k; a > 0; a--){ fat = fat * a; } No entanto tem uma maneira mais direta de calcular o arranjo: n! pode ser expandida assim: n! = n * (n-1) * (n-2) * ... * (n-k+1) * (n-k)! Logo: n! / (n-k)! = [ n * (n-1) * (n-2) * ... * (n-k+1) * (n-k)! ] / (n-k)! n! / (n-k)! = n * (n-1) * (n-2) * ... * (n-k+1) Então você só precisa fazer: arranjo = 1; for(int i = n; i > n-k; i--) { arranjo = arranjo * i; }
-
No seu programa cpf[i] é um caractere. Uma variável char é um inteiro com 8 bits = 1 byte, e existem tabelas que associam este número a um caractere. Por exemplo o número 49 é o número que corresponde ao caractere '1'. Logo: #include <stdio.h> int main(){ char c1, c2; c1 = 49; c2 = '1'; if (c1 == c2){ printf("Os valores de c1 e c2 sao iguais, veja:\n\n c1 c2\n %d %d\n %c %c\n", c1, c2, c1, c2); } } Uma maneira de converter o caractere para o número correspondente correto seria subtrair o caractere '0', veja: char c = '1'; printf("%d", c - '0'); //Imprime o número inteiro 1 Pois o caractere '0' corresponde ao número 48, mas desta maneira você não precisa saber qual o número correspondente, apenas saber que subtraindo '0' do dígito do número resultara no número inteiro correspondente. E para saber se é um caractere é um número basta verificar se (caractere >= '0') e (caractere <= '9'). Isso é útil para o alfabeto também, se você deseja obter um número entre 0 e 25 com as letras minúsculas, basta subtrair 'a' da letra, e para letras maiúsculas subtrai 'A'. E checa se é uma letra usando os intervalos ['a' até 'z'] e ['A' até 'Z'].
-
Escrita e leitura em arquivos, numero inteiro lido de maneira inesperada
isrnick respondeu ao tópico de Jessé P. de Melo em C/C#/C++
Do jeito que está n_da_linha[] está recebendo o valor de texto[y] que você acabou de testar é igual ao caractere '\n', que em inteiros corresponde ao número 10. Talvez o que você quer seria algo assim? n_da_linha[n] = n+1; -
A questão é que nessa linha também não deveria ter o &. Ok, vamos de volta ao básico, quando você declara uma variável você está alocando espaço na memória para a informação que será guardada nela, logo a variável contém a informação que indica a posição na memória onde estes dados serão gravados, assim sempre que chamarmos ou atribuirmos um valor a esta variável o mesmo local da memória será acessado. Esta posição da memória, ou referência, da variável pode ser obtida usando o símbolo & antes do nome da variável. Assim quando fazemos algo como: int numero; scanf("%d", &numero); Estamos não estamos passando para a função scanf o valor armazenado na variável "numero", mas sim a referência desta variável, ou seja passamos para a função a posição na memória onde as informações da variável "numero" é armazenada, assim a função scanf pode acessar e atribuir valores a esta posição da memória, em efeito fazendo alterações diretamente na variável "numero", e depois podemos acessar essa informação guardada usando a própria variável sem o &. (Dentro da função scanf esta referência que foi passada é armazenada num ponteiro, que é o tipo adequado de variável para armazenar referência/posição de memória.) Entretanto, quando passamos a lidar com vetores e matrizes, para acessar os dados da variável precisamos indicar qual posição do vetor/matriz usando colchetes, e o nome do vetor/matriz sem os colchetes já indica a referência dele, logo & não deve ser usado. Para explicar melhor vou dar alguns exemplos: char vetor[50]; vetor; //referência para o vetor, nesse caso uma string inteira &vetor[0]; //referência para a primeira posição do vetor, ou seja para o primeiro caractere vetor[0]; //acessa o dado da primeira posição do vetor, ou seja o primeiro caractere char matriz[10][50]; matriz; //referência para a matriz inteira matriz[0]; //referência para a primeira linha da matriz, que sozinha é um vetor, ou seja uma string da matriz &matriz[0][0]; //referência para a primeira posição da primeira linha da matriz, no caso para o primeiro caractere matriz[0][0]; //acessa a primeira posição da primeira linha da matriz, no caso acessa o primeiro caractere
-
Programa em c dando crash para determinados valores
isrnick respondeu ao tópico de José Edivaldo em C/C#/C++
Quando você define um vetor ou uma matriz o número colocado entre os colchetes indica o comprimento ou número de itens em dada dimensão na matriz. Ex: int vetor[10]; //Define uma vetor de 10 posições. Entretanto quando você acessa as respectivas posições de um vetor a contagem começa em 0, logo no caso acima as 10 posições seriam. 1ª - vetor[0] 2ª - vetor[1] 3ª - vetor[2] 4ª - vetor[3] 5ª - vetor[4] 6ª - vetor[5] 7ª - vetor[6] 8ª - vetor[7] 9ª - vetor[8] 10ª - vetor[9] Logo, as posições de vetor de comprimento n serão acessadas por índices indo de 0 até n-1. E logicamente o mesmo é válido para cada dimensão das matrizes. Logo, se n=6 e a matriz foi declarada como matriz[n+1][n+1] você terá uma matriz de dimensão 7x7, com índices indo de 0 até 6 para acessar essas posições da matriz. Se no entanto seu programa tentar acessar a posição matriz[7][7] estará tentando acessar uma posição que não existe resultando em um "crash" ou resultados inesperados. -
Estou assumindo que pesquisaNome e nome foram declarados como um vetor e uma matriz de chars de 2 dimensões, respectivamente? Deste tipo: char pesquisaNome[100], nome[10][100]; Então nesse scanf: scanf("%s", &pesquisaNome); Não deve ser usado o & antes do nome do vetor pesquisaNome, pois isto é usado para passar a referência/posição da memória onde são armazenados os dados guardados na variável para a função scanf (e na função esta referência será armazenada num ponteiro), mas quando você passa o nome de um vetor já está passando sua referência não os dados armazenados nele (afinal, para acessar os dados de um vetor diretamente você deve indicar qual dos dados usando os colchetes, por exemplo pesquisaNome[0] para obter a primeira letra). Logo, nesse caso a função scanf deve ser usada assim: scanf("%s", pesquisaNome); E no for onde está esse if você está iterando a matriz nome de 0 até SIZE, mas este SIZE é o número total de linhas na matriz ou o número de nomes armazenados na matriz? Pois o problema pode ser que você está comparando a matriz inteira, mas a matriz não foi completamente preenchida, então possivelmente você estaria comparando valores que não são strings (lixo que ficou na memória) com pesquisaNome. Certifique-se de comparar apenas as posições onde já foi armazenado algum nome. Fora isso, não consegui identificar nenhum problema com o seu if, deveria funcionar normalmente.
-
Numa variável do tipo int só é garantido que seja possível armazenar dados de pelo menos 16 bits, apesar de que dependendo da implementação int pode ser mais longo, mas você não tem garantia disso, o que significa que você só tem certeza de que números entre −32767 e +32767 podem ser armazenados numa variável do tipo int. Se nós passarmos para o tipo unsigned int o intervalo se torna de 0 até +65535. E observe que estes números possuem no máximo 5 dígitos, entretanto números de telefone tem 8 ou 9 dígitos no Brasil, e isso sem contar DDD, e se passamos para números internacionais quantos dígitos o número de telefone pode passar a ter? Portanto, o tipo int não é adequado para armazenar números de telefone. O tipo long int ou long pode deve armazenar números de pelo menos 32 bits, logo o intervalo se torna de −2.147.483.647 até +2.147.483.647, logo é adequado para armazenar um número de 9 dígitos, mas não tem espaço suficiente para incluir o DDD, logo você poderia usar desde que armazenasse o DDD numa variável diferente. (O intervalo para unsigned long int vai de 0 até 4.294.967.295) Para armazenar tanto o DDD como o número de telefone numa única variável, seria necessário usar long long int ou long long pois seu intervalo é de −9,223,372,036,854,775,807 até +9,223,372,036,854,775,807, pois é exigido que armazene pelo menos 64 bits, que é bem maior que o necessário, visto que com 19 dígitos pode armazenar mais que o dobro do que o comprimento do número de telefone. e talvez seja um exagero, por outro lado permitiria armazenar números internacionais que talvez sejam ainda maiores que os números de telefone brasileiros. (O intervalo para unsigned long long seria de 0 até 18.446.744.073.709.551.615) Obs: Note que para ler e imprimir números inteiros longos deve-se adicionar l ao especificador de conversão usado nas funções scanf e printf, Exs: - "%ld" para long - "%lld" para long long - "%lu" para unsigned long - "%llu" para unsigned long long
-
strcmp() só vão 2 parâmetros mesmo, não tem o terceiro parâmetro indicando o número de caracteres. A função em que você define o número de caracteres como você mencionou é strncmp().
-
Como "numeroTel" está sendo declarada? int? long? unsigned long? long long? Como você está digitando o número de telefone? Com espaço? Com hífen? Quantos dígitos tem o número de telefone? Teve outro scanf antes disso? A entrada padrão (stdin) está vazia quando chega nesse scanf? A variável "linha" está recebendo valores adequados?
-
Existe alguma parte do código que eu possa diminuir pra gastar menos recursos?
isrnick respondeu ao tópico de EdwardTheHead em C/C#/C++
Agora uma coisa que eu recomendaria é evitar usar recursividade, como você faz em seu programa chamando a mesma função dentro da própria função caso a pessoa deseje continuar na mesma figura, ou pior ainda chama a função leitura() caso queira trocar de figura, e usar ciclos while ou for ao invés disto. Como regra geral a função deve ser finalizada quando seu trabalho for concluído e retornar a execução do programa para o escopo da função que a chamou. Se você chamar outra função dentro da função esta função não estará finalizada, mas a nova função chamada ocupará espaço na memória, e a função inicial fica lá esperando até a nova função retornar a execução para seu escopo para que possa prosseguir com seus comandos e finalizar sua execução. Então seu programa está encadeando um monte de funções, por exemplo: main() -> leitura() -> triangulo() -> triangulo() -> leitura() -> cubo() -> leitura() -> quadrado() -> ... etc E assim por diante e só fará o caminho inverso, retornando às funções anteriores, quando alguém finalmente escolher a opção Sair. O que significa que quanto mais alguém usar o seu programa mais memória ele vai ocupar sem necessidade. -
Passar dados de um arquivo para vetor de strings
isrnick respondeu ao tópico de Raphael Franco em C/C#/C++
Segue um exemplo para até 10 frases com até 99 caracteres cada: FILE *file = fopen("string.txt", "r"); char frase[10][100]; int i; for (i=0; i<10 && fgets(frase[i], 100, file) != NULL; i++) printf("%s", frase[i]); -
Receber e multiplicar numero pelo seus algoritmos.
isrnick respondeu ao tópico de Pedro Henrique Faria Teixe em C/C#/C++
O único problema no seu programa está na inicialização da variável "s", que armazena a multiplicação, onde você colocou que s=vet[0], e deveria ser inicializado em 1 (s=1). Fazendo essa modificação o programa funciona corretamente. Obs: Note que ali no inicio do programa vet[0] ainda não recebeu nenhum valor, apenas foi reservado o local na memória, mas ainda não foi atribuído nenhum valor, então s=vet[0] vai pegar qualquer valor lixo (deixado por algum outro programa usado anteriormente) que está lá nessa posição da memória. Então seu programa pega isso e multiplica pelos algarismos gerando um resultado aleatório/imprevisível. -
Receber e multiplicar numero pelo seus algoritmos.
isrnick respondeu ao tópico de Pedro Henrique Faria Teixe em C/C#/C++
O termo correto é algarismo ou dígito. E o programa é simples, seria algo assim: #include <stdio.h> int main(){ int num, mult; printf("Digite o numero: "); scanf("%d%*c", &num); for (mult=1; num != 0; num=num/10) mult = mult*(num%10); printf("Resultado: %d\n", mult); return 0; } Mas talvez assim seja mais fácil de entender: #include <stdio.h> int main(){ int num, mult; printf("Digite o numero: "); scanf("%d%*c", &num); mult=1; while (num != 0){ mult = mult*(num%10); num=num/10; } printf("Resultado: %d\n", mult); return 0; } -
Como executar um .bat com uma especifica?
isrnick respondeu ao tópico de Rodrigo Pimenta em Programação - outros
A variável %DATE% já é definida nativamente, então basta compará-la a data que você quer, tente algo assim: IF %DATE%==18/01/2017 start calc.exe -
Como entrar na carreira de programador.
isrnick respondeu ao tópico de lSmoker em Programação - iniciantes
Eu diria que inglês é requisito. Sim, aprender a programar é possível sem saber bem o inglês, pois cursos de Lógica de Programação podem usar português estruturado ao invés de uma linguagem de programação propriamente, e até mesmo aprender uma linguagem é possível desde que encontre bons cursos e/ou materiais de estudo em português. Mas, primeiramente saber inglês torna o aprendizado muito mais fácil, pois não apenas a sintaxe das linguagens de programação usa o inglês, como também é muito mais fácil encontrar bons cursos, guias, tutoriais, material para estudo, etc, em inglês, e através da internet você têm acesso a uma comunidade muito maior, com pessoas no mundo inteiro que falam inglês, para tirar suas dúvidas e obter ajuda no que quer seja. De fato, normalmente apenas fazer a busca da sua dúvida em inglês no Google já te levará diretamente a algum fórum onde a mesma pergunta já foi postada e respondida. E ainda mais importante se o objetivo é se profissionalizar como programador, é o fato de que a documentação das linguagens de programação e suas bibliotecas sempre terão versão em inglês, mas ter uma versão em português e atualizada será muito mais raro, então você vai precisar saber inglês para aprender a usar estas bibliotecas.
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