Ir ao conteúdo
  • Cadastre-se

isrnick

Membros Plenos
  • Total de itens

    1.602
  • Registro em

  • Última visita

  • Qualificações

    0%

Reputação

958

3 Seguidores

Informações gerais

  • Cidade e Estado
    Sao Paulo
  • Sexo
    Masculino
  1. Estou procurando um computador para escritório, apenas para uso de programas básicos como office e internet, então um i5 ou até um i3 (ou Ryzen equivalente) com 8GB de ram já atenderia. Não tem requisitos de espaço de HD, 1TB já seria mais que suficiente. A empresa já possui licença para o Windows 10 então, se diminuir o custo, o computador não precisa ter SO instalado, ou pode ser com Linux para depois substituirmos nós mesmos pelo Windows. Se possível procuro algo no valor de até R$ 1500,00. O que me recomendariam?
  2. x é um vetor de caracteres, e o nome de um vetor sem colchetes já é a referência/endereço de memória do vetor, logo não se usa & antes do nome do vetor para obter a referência. E "%[^\n]%*c" usando %[^\n] junto de %*c no mesmo scanf não funciona como esperado, o %*c não funciona nesse caso, ao invés disso use 2 scanfs um após o outro: scanf(" %29[^\n]", x); scanf("%*c"); Observe que limitei a 29 caracteres para garantir que não estoura o tamanho do vetor de caracteres.
  3. Comparação de igualdade entre números de ponto flutuante é um tema complicado, pois como pode ver no exemplo do seu programa, o resultado da divisão 4/3 armazenado na forma de ponto flutuante não fica exatamente igual ao valor obtido ao ler 1.333333333333 digitado pelo usuário e lido com cin, há diferenças nas formas finais em modo binário devido a diferenças nas operações efetuadas, então a operação de comparação de igualdade == não conseguirá constatar a igualdade. Uma solução parcial/incompleta que pode ser usada é usar uma margem de erro máxima, e calcular a diferença relativa entre os 2 valores que deseja-se verificar se são iguais. Ou seja, dada uma margem de erro máxima epsilon, e dois números de ponto flutuante a e b, serão consideradas quase iguais (ou suficientemente iguais) se |(a - b) / b| < epsilon (onde | | indica valor absoluto ou módulo). Mas note que isto não funcionará se a e b forem iguais ou muito próximos de 0, pois teremos 0 / 0 que não é um valor numérico válido, ou a divisão pode ir para infinito para valores a e b muito pequenos logo o resultado não será menor que epsilon mesmo se a e b forem quase iguais. Então, vários métodos foram estudados e propostos para lidar com as exceções, e obter uma solução que funciona em todos os casos, mas isso aumenta a complexidade do problema e não é a proposta do seu exercício, se tiver interesse pesquise na internet e encontrará algumas soluções. Neste caso a solução da diferença relativa já seria suficiente. Então uma solução deste tipo deve funcionar: #include <iostream> #include <cstdlib> #include <cmath> using namespace std; int main() { double c,d; double a,b; a=4; b=3; c=a/b; cout<<"4/3 = "; cin>>d; if(abs( (c - d) / d ) < 0.0000001) { cout<<"correto"; } else { cout<<"errado a resposta e"<<c; } return 0; }
  4. Sim, e é isso que você quer, ou seja que o ciclo do-while continue enquanto operação for diferente de 's' E diferente de 'S'.
  5. É um algoritmo de ordenação por seleção (selection sort), mas está errado, pois no segundo ciclo for o j deve começar com valor i+1, não 0. Fazendo essa correção o algoritmo seria uma selection sort válido, mas é instável, e faz muito mais trocas do que o necessário. Uma versão melhor pode ser vista no próprio wikipedia: void selection_sort(int num[], int tam) { int i, j, min, aux; for (i = 0; i < (tam-1); i++) { min = i; for (j = (i+1); j < tam; j++) { if(num[j] < num[min]) min = j; } if (num[i] != num[min]) { aux = num[i]; num[i] = num[min]; num[min] = aux; } } } Nessa versão se a lista tiver 10 elementos, i vai de 0 a 8, economizando 1 ciclo pois não precisa checar o índice 9, j vai de i+1 até 9, e cada troca é feita apenas 1 vez por ciclo pois o que o algoritmo faz é buscar e selecionar o menor valor entre todos o números que ainda não foram ordenados da lista, e guarda o índice dele, e aí no fim faz a troca colocando o menor valor selecionado na i-ésima posição da lista.
  6. char **nomes é um ponteiro que aponta para um ponteiro, ou seja é um 'ponteiro para ponteiro'. O malloc irá então alocar memória para ponteiros normais char * , os quais poderão ser apontados por este ponteiro para ponteiro. Então no caso de malloc(5 * sizeof(char *)) está sendo alocado o espaço de memória suficiente para conter 5 ponteiros normais do tipo char. E ao fazer a atribuição do retorno desse malloc ao ponteiro para ponteiro nomes, ele apontará para o primeiro desses cinco ponteiros alocados, o que significa que podemos usar aritmética de ponteiros, como *(nomes + 1) ou nomes[1], para acessar cada um dos ponteiros alocados pelo malloc.
  7. @giu_d Sim, eu até postei um código num tópico demonstrando que as notações de ponteiro e de vetores são intercambiáveis e valem em todas as situações:
  8. @Josesousa Sim, esta notação (*ponteiro)[n] criar 1 ponteiro que aponta para um arranjo/vetor inteiro, ao invés de apontar para apenas 1 variável como num ponteiro normal, assim se você incrementa sobre o ponteiro estará incrementando proporcionalmente ao tamanho do arranjo, logo passa a apontar para o próximo arranjo (nesse caso a próxima linha da matriz). Ex: - linha 1 e coluna 0: (*(ponteiro + 1))[0] ou ponteiro[1][0] adicionado 8 minutos depois Bom meu programa não faz nada, só aloca e libera uma matriz. Mas em todos os lugares que testei compila e roda sem problemas, que erro deu?
  9. @Josesousa Corrigi o nome da função. Mas como foi mencionado o enunciado do exercício pede que seja feito usando ponteiro para ponteiro. Então fica aí pra aprender um método diferente com algumas vantagens se desejar.
  10. Na verdade se entender que caracteres não números, não precisa consultar a tabela ASCII: int num = 5; char numC = (char)(num + '0'); Assim não precisa saber o número decimal correspondente do caractere na tabela ASCII.
  11. Eu prefiro usar ponteiro para arranjo ( (*ponteiro)[n] ), ao invés de ponteiro de ponteiro ( **ponteiro ): #include <stdio.h> #include <stdlib.h> int (*nova_matriz(int nlinhas, int ncolunas))[] { int (*matriz)[ncolunas] = NULL; matriz = malloc(nlinhas * sizeof *matriz); if (matriz == NULL){ printf("\nERRO: Memoria livre insuficiente!\n"); exit(EXIT_FAILURE); } return matriz; } int main() { int (*matriz)[5]; matriz = nova_matriz(4, 5); /*Faz algo com a matriz de 4 linhas x 5 colunas*/ free(matriz); return 0; } Assim só precisa usar 1 free para liberar a matriz inteira, e usando 1 único malloc a matriz inteira é armazenada em um lugar continuo da memória. Com vários mallocs cada um deles reserva espaço em um lugar diferente da memória então a matriz fica fragmentada em vários lugares perdendo desempenho, e também aumenta a chance de vazamento de memória.
  12. Primeiro faça uma função para multiplicar matrizes, depois chame essa função várias vezes, sempre multiplicando a matriz pelo resultado da multiplicação anterior.
  13. Segundo o enunciado ( https://www.urionlinejudge.com.br/judge/pt/problems/view/2668 ) deseja-se obter o K-ésimo dígito menos significativo da parte inteira de XN, não o mais significativo. Usar pow(X, N) não vai funcionar pois N pode ter valor 1000000000 (109), então a potência vai ficar grande demais para calcular e armazenar numa variável. O truque nesse exercício é notar que K vai de 1 até 4 apenas, então no máximo vai obter o quarto dígito menos significativo, então não precisa obter o valor de XN, mas apenas calcular os 4 dígitos menos significativos desse número, ou seja vai multiplicando por X e se ficar maior que 5 dígitos inteiros elimina do número o que for maior que isso e continua multiplicando apenas os dígitos menos significativo por X. E = 1; for (i = 0; i < N; i++){ E *= X; if (E > 99999) E -= floor(E/100000) * 100000; } E não precisa transformar em string, basta ir dividindo a parte inteira por 10 até chegar no K-ésimo dígito, e usar o resto da divisão por 10 para obter apenas o dígito. f = (int)floor(E); for(i = 0; i < K-1; i++) f /= 10; d = f % 10;
  14. Precisa fornecer o caminho completo? Não dá pra colocar um caminho relativo? Por exemplo colocar "." ou talvez ".\" como caminho, ao invés de "C:\Users\Paulo Llimona\Dropbox\", se os 2 arquivos estão na mesma pasta. adicionado 42 minutos depois Pesquisando achei essa indicação de usar a função INDIRETO pra abrir o arquivo na mesma pasta: INDIRETO("'arquivo.xlsx'#$Planilha1.A1") ou numa subpasta da pasta atual: INDIRETO("'.\subpasta\arquivo.xlsx'#$Planilha1.A1")

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×