
Durub
Moderadores-
Total de itens
788 -
Registro em
-
Última visita
Tudo que Durub postou
-
Neste caso, seria muito melhor deixar dentro do case. Não seria "boa programação" colocar no começo da função principal. Abraços.
-
Não. gets(ident) está passando um endereço de memória. Se ident é definido como ele falou, então ident é um ponteiro para ponteiro. char** ident. Ao deferenciar com ident, agora ele passou de um char** para char*. gets(ident) está correto, acredito que não seja esta parte que esteja dando problema. Você está usando scanf antes dessa chamada ao gets? Outra coisa: gets é ruim, scanf é pior. Você deveria usar fgets. E ainda: declarar uma variável desta forma (com um tamanho variável) sequer funciona? O compilador não reclama? Eu acho que você deveria é estar usando malloc ou calloc. Abraços.
-
Estando no ultimo elemento da lista, aponte para o novo elemento criado. novo = malloc(sizeof(TLista)); if(novo == NULL) { printf("Alocacao falhou!\n"); exit(1); } novo->valor = 15; novo->prox = NULL; /* ultimo deve ser o último elemento da lista */ ultimo->prox = novo; Alguma razão para você estar usando C++ (cstdlib e iostream) e não estar usando new e delete ao invés de malloc e free? Outra coisa, não use system("pause"). Use std::cin.get(). (C++) Link para referência: http://www.gidnetwork.com/b-61.html Abraços.
-
Para futura referência, está faltando passar o formato da string a ser lida. No seu caso, scanf("%f", &variavel); Abraços!
-
(Resolvido) Dúvida com liberação de espaço alocado.
pergunta respondeu ao Ricardo Martins de Durub em C, C++
Exatamente. Por isso, nesses casos, geralmente se usa funções de alocação. AGENDA* alocar_agenda() { AGENDA* agenda; agenda = malloc(sizeof(AGENDA)); if(agenda == NULL) { /* erro de alocação aqui. é importante sempre verificar pelo null */ return NULL; } agenda->nome = malloc(50 * sizeof(char)); if(agenda->nome == NULL) { /* erro de alocação aqui. é importante sempre verificar pelo null */ free(agenda); return NULL; } agenda->email = malloc(50 * sizeof(char)); if(agenda->email == NULL) { /* erro de alocação aqui. é importante sempre verificar pelo null */ free(agenda->nome); free(agenda); return NULL; } return agenda; } void liberar_agenda(AGENDA* agenda) { free(agenda->nome); free(agenda->email); free(email); } Agora tudo que você tem que fazer é usar alocar_agenda e liberar_agenda para gerenciar o alocamento dinâmico de memória. Isto também é útil caso vocẽ queira mudar o esquema de alocamento depois, por exemplo. Abraços! -
#include <stdio.h> #include <stdlib.h> #include <time.h> /* matriz[m][n] */ void preenche_matriz(int** matriz, int n, int m) { for(int i = 0; i < n; ++i) { for(int j = 0; j < m; ++j) { matriz[i][j] = rand(); } } } int main(int argc, char *argv[]) { int matriz[3][3]; srand(time(NULL)); /* isso é importante! faz gerar números diferentes a cada execução. só precisa ser chamada UMA vez */ preenche_matriz(matriz, 3, 3); return 0; } Pronto. Não testei. Faltar adaptar para o seu uso. (de tal a tal número na função preenche_matriz, por exemplo) Abraços.
-
Editou por quê? Abraços.
-
Com sinceridade, parece que você está tentando algo muito avançado para o seu nível. Erro um: double Efetua_calculo::Entra_valores (double *valorvet) Você está chamando essa função sem passar nenhum argumento, e esperando que magicamente este valorvet apareça onde esta função foi chamada. Você deve passar um array de double para ser preenchido por ela. double valores[5]; Entra_valores(valores); valores[0]; /* agora sim foi modificado pela função */ Erro dois: Efetua_calculo(double valora,double valorb,double valorc, double valord) int main () { Efetua_calculo calculo(); calculo.Mostra_calculo(); return 0; } Seu construtor aceita parâmetros, mas você está o chamando sem passar nenhum! --------------------------------- Receba os valores no main por uma função auxiliar, sem ser de classe alguma. Depois, passe estes valores para o construtor. Abraços.
-
Mostre o código, por favor. Abraços.
-
http://www.codingforums.com/showthread.php?t=107563 Abraços.
-
Se você recompilar, a execução reflete o que você alterou no código. Se você só re-executar o programa, você ainda está executando o código antigo. Tente criar um novo arquivo, colar o conteúdo e ver o que acontece quando você aperta F9. E verifique por possíveis erros de compilação! (aqui foi ok para compilar seu código) Abraços.
-
Está correto, sim. Tem certeza que você recompilou ao invés de simplesmente executar novamente o programa? Abraços.
-
Aqui parece estar tudo ok: media = (10 + 9 + 8) / 3 = 27 / 3 = 9 Resultado correto. Ele não está mostrando a média para você? Abraços.
-
A função está retornando o valor, e não imprimindo na tela: return soma/quantidade_al; Ela (ou o código que está a chamando) deve imprimir com o printf. No caso deste valor (float), deve-se usar %f. Exemplo: printf("Media: %f\n", media_turma(turma, quantidade_alunos)); Outra coisa, eu aconselharia você a trocar o system("pause") por getchar(), da stdio.h. Aqui, por exemplo, onde eu uso Linux, system("pause") não funciona. getchar() funciona em qualquer lugar. Abraços.
-
int escolha,n,i,status=0,bc=0; struct { int cod; char nome[50]; char desc[50]; int quant; float preço; char bn[50]; }cadas[n]; Você não deveria estar inicializando n para algum valor? Abraços.
-
Se possível poste o código, por favor. Abraços.
-
Qual o erro? Abraços.
-
if((soma-sin(x)<=1e-15)&&(soma-sin(x)>=-1e-15)) Pense em um número maior ou igual a um. Agora pense em um número menor ou igual a um. Agora pense em números que são tanto maiores ou iguais a um, e menores ou iguais a um. Que número restou? Somente o 1. Ou seja, o if só é ativado se soma - sin(x) == 1e-15. Como é um número de ponto flutuante, não é recomendável comparar diretamente, por erros de arredondamento. Uma boa lida é o documento http://www.validlab.com/goldberg/paper.pdf, mas é grande e necessita de conhecimentos um pouco mais avançados, além de um domínio do inglês. Então, por enquanto, apenas direi para você tentar fazer uma comparação à um intervalo de valores, como por exemplo, ao invés de comparar se é igual a 1.0, tente comparar se é maior que 0.95 e menor que 1.05. Tente! Abraços.
-
A função sin do math.h utiliza como argumento um ângulo em radianos. O ângulo 2 * pi, em radiano, é igual a 0 ou 360 graus, o que corresponde a um seno de valor 0. Abraços.
-
E se não achar? Ele volta. E tenta. E tenta. E tenta de novo. Infinitas vezes! Somente neste trecho, é impossível que alguma posição da tabela fique vazia. Talvez você queira sair do loop caso não encontre uma vazia? Abraços!
-
Arquivo cadcli.c int cadastrar(int codigo) { return 1; } Arquivo menu.c int cadastrar(int codigo); /* declaração do protótipo da função */ int considerar_opcao(char opcao) { if(opcao == 'c') { cadastrar(0); return 1; } return 0; /* opção inválida */ } No C, você pode chamar funções de outros arquivos. Para fazer isto, entretanto, é necessário o nome delas e seu protótipo. Veja as etapas da compilação: Código fonte -> Compilador -> Linker -> ... Falando de uma forma simplificada: O compilador apenas precisa saber quais funções existem e como elas "agem". Neste caso, no arquivo menu.c, ele precisa saber que a função cadastrar existe e como ela pode ser chamada. Pouco importa onde ela reside. Você apenas a declara. Na etapa do linker é onde é feita esta ligação. Quando você chama a função cadastrar no arquivo menu.c, o linker procura a definição dela (que está no arquivo cadcli.c) e liga a sua declaração com a definição. No C, é padrão utilizar a seguinte estrutura: matematica.h #ifndef MATEMATICA_H #define MATEMATICA_H // os chamados include guards. se não souber o que são e o que fazem, leia sobre. // _declaração_ da função multiplicarPorDois int multiplicarPorDois(int numero); #endif matematica.c #include "matematica.h" // _definição_ da função multiplicarPorDois int multiplicarPorDois(int numero) { return numero * 2; } principal.c #include <stdio.h> #include "matematica.h" // pega a _declaração_ da função multiplicarPorDois int main() { int n; printf("Digite um número\n"); scanf("%d", &n); printf("n vezes dois é igual a %d.", multiplicarPorDois(n)); return 0; } E aí você compila ambos, juntos. (se você estiver usando uma IDE, ela fará isso automaticamente para você) Um exemplo utilizando o gcc, sobre como compilar: gcc -o pordois principal.c matematica.c Abraços!
-
Não entendi o enunciado do exercício, qual a necessidade de ponteiros? Bom, uma forma fácil de transformar para o "formato ponteiro", seria trocar A por *(A + i). O que A[x] significa? Significa que o programa pega o endereço da variável A (como é um array, é o endereço do primeiro elemento), adiciona x ao endereço levando em consideração a aritmética de ponteiros e depois o desreferencia, pegando o valor contido no novo endereço. Passando isso para a forma "normal", ficaria assim: *(A + x) A -> endereço do primeiro elemento do array. se não fosse um array, seria necessário utilizar &A + x -> soma x ao endereço do A * -> operador desreferência, pega o valor localizado no endereço Isto o A[X] faz automaticamente para você. Então, você pode trocar tudo que está na forma A[x] para *(A + x). Com uma exceção, porém: se você quiser apenas o endereço, não é mais necessário utilizar &, como é utilizado no scanf. No seu scanf, você deveria trocar &A[c] para apenas A + c. Não irei te dar o código, pois você deve ir fazendo e entendendo, caso tenha mais dúvidas, erros de compilação etc. continue postando neste tópico. Outra coisa (agora referente ao seu código), acho que o enunciado, ao dizer que quer que você faça um novo array B com aqueles parâmetros, significa que você não deve alterar o A como está fazendo e depois associar, mas sim alterar o B. Se A[x] for impar, você está fazendo A[x] *= 3 e depois B[x] = A[x], enquanto o que deveria realmente estar fazendo é: B[x] = A[x] * 3. Abraços!
-
error C2065: 'AddressOfKeAttachProcess' : undeclared identifier -> A variável AddressOfKeAttachProcess não existe neste escopo. error C4047: '=' : 'int' differs in levels of indirection from 'PVOID' -> int não está no mesmo nível de abstração do que um pointeiro para void, *void (PVOID). Se você estiver absolutamente certo que quer fazer isso, faça um cast para int. Exemplo: void *ponteiro = Memória; int endereco = (int) ponteiro; Abraços.
-
Vendo seu código, antes de responder sua pergunta, tenho que perguntar: o que você acha que a função getch faz? Abraços.
-
Qual o tipo da variável Gerador[nofinal]? Ela tem que ser outro complex<double>. Abraços.