Pesquisar na Comunidade
Mostrando resultados para as tags ''ponteiros''.
Encontrado 22 registros
-
Olá, boa tarde. Estou com duvida sobre o porquê do meu código não rodar. Eu pesquisei na internet e aparentemente ele esta 100%, sem nenhum erro. #include <stdio.h> #include <stdlib.h> void somatorioMedia(float *a, int n, float *somatorio, float *media); int main(){ int i; float a[10]; int n = 10; float *somatorio; *somatorio = 0; float *media; *media = 0; for(i=0; i<10; i++){ printf("n[%i]: ", i); scanf("%f", &a[i]); } somatorioMedia(a, n, somatorio, media); printf("Somatorio: %.2f\n", *somatorio); printf("Media: %.2f", *media); return 0; } void somatorioMedia(float *a, int n, float *somatorio, float *media){ int i; for(i=0; i<n; i++){ *somatorio += a[i]; } *media = *somatorio / n; }
-
Não consigo imprimir os valores que foram digitados pelo ponteiro, já tentei de tudo e continuam aparecendo esses valores que não foram digitados, segue a parte do código que não estou conseguindo resolver: printf("\nNumeros digitados: \n"); for (x = 0; x < limite; x++) { printf("%d ", (*pont + x)); } o código completo: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int main(){ int *pont; int limite, soma = 0, x; printf("Digite a quantidade de numeros que desejas armazenar: "); scanf("%d",&limite); pont = (int*)malloc(limite * sizeof(int)); if (pont == NULL) { printf("Memoria insuficiente para armazenar estes numeros."); system("pause"); return 0; } printf("\nDigite os %d numeros desejados \n", limite); for (x = 0; x < limite; x++) { printf("Digite o %d numero: ", x+1); scanf("%d", (pont + 1)); soma += *(pont + 1); } printf("\nNumeros digitados: \n"); for (x = 0; x < limite; x++) { printf("%d ", (*pont + x)); } printf("\n\nSoma dos numeros armazenados: %d \n", soma); system("pause"); return 0; }
-
Bom dia. Estou fazendo meu estudo sobre ponteiros e no livro que eu estou usando para consultar está um código que, apesar de estar funcionando bem, não fez muito sentido para mim. Se alguém puder me ajudar a entende-lo vai ser ótimo. #include<stdio.h> #include<stdlib.h> #include<locale.h> main() { setlocale(LC_ALL,"portuguese"); char s[100]; char *ptr = s; /* Aponta para o primeiro caractere de 's', pois o nome da variável de um vetor sempre é o endereço do primeiro elemento daquele vetor */ printf("Introduza uma String : "); fgets(s,100,stdin); if(*ptr == '\0') /* String vazia */ { return 0; } /* Imprimir a String normalmente */ while(*ptr!='\0') { putchar(*ptr++); } /* Imprimir a String ao contrário */ while(ptr>=s) /* Enquanto ptr for >= que &s[0] */ { putchar(*ptr--); } return 0; }
-
Boa tarde Senhores(as)! O código-fonte a seguir é a miniaturização de um problema maior no qual estou trabalhando. Preciso imprimir os valores do vetor gerado pela função "fazVetor", na função "main". Porém, para que o código se assemelhe ao problema real no qual estou trabalhando, existem duas restrições que devem ser respeitadas. Estas estão comentadas no código a seguir. #include <stdio.h> #include <stdlib.h> #define TAM 3 int fazVetor(int **vet){ int *array = malloc(sizeof(int) * TAM); array[0] = 4; array[1] = 7; array[2] = 8; /* nesta função somente a linha a seguir pode ser alterada. */ *vet = array; } int main() { int **qualquer; /* Na função main, somente a linha a seguir NÃO PODE ser alterada. */ fazVetor(&qualquer); printf("\n--==[Valores do Vetor]==--\n\n"); for(int i = 0; i < TAM; i++){ printf(" %d", (qualquer[i])); } printf("\n\n"); return 0; } O único objetivo é a impressão dos valores do vetor na função "main". Respeitadas as devidas restrições. De antemão, muito obrigado! Edwar Saliba Jr.
-
Estou realizando um trabalho para faculdade e estou com dúvidas na utilização de structs e ponteiros, está aparecendo erros como o seguinte: warning: implicit declaration of function 'CadCurso' [-Wimplicit-function-declaration] warning: implicit declaration of function 'CadTurma' [-Wimplicit-function-declaration] Não sei o porque desses erros aparecem no case se eu estou chamando as variaveis dos cadastros e listagens. #include <stdio.h> #include <stdlib.h> struct Curso { int codigo; char nome[50]; }; struct Turma { int codigo; char nome[50]; int codigoCurso; }; struct Disciplina { int codigo; char nome[50]; int codigoTurma; }; struct Aluno { int matricula; char nome[50]; int codigoDisciplina; }; int Opcao() { int valor = 0; printf("\n-------------------------------------------------------"); printf("\n 1-Cadastrar Curso 2-Cadastrar Turma "); printf("\n 3-Cadastrar Disciplina 4-Cadastrar Aluno "); printf("\n 5-Listar Turmas 6-Listar Disciplinas "); printf("\n 7-Listar Aluno 8-Listar Cursos "); printf("\n 9-Sair "); printf("\n-----------------------------------------------------\n"); scanf("%d",&valor); return (valor); } //aqui comeca o main int main() { int opc=99; int TOTAL = 0; int qtdCursos = 0; int qtdTurmas = 0; int qtdDisciplinas = 0; int qtdAlunos = 0; struct Curso * cursos; struct Turma * turmas; struct Disciplina * disciplinas; struct Aluno * alunos; printf("\nInforme o numero de cadastros:"); scanf("%d", &TOTAL); cursos = (struct Curso*)malloc(sizeof(struct Curso) * TOTAL); turmas = (struct Turma*)malloc(sizeof(struct Turma) * TOTAL); disciplinas = (struct Disciplina*)malloc(sizeof(struct Disciplina) * TOTAL); alunos = (struct Aluno*)malloc(sizeof(struct Aluno) * TOTAL); while (opc > 0){ opc = Opcao(); switch (opc){ case 1: CadCurso(cursos, TOTAL); break; case 2: if(qtdCursos < 1){ printf("não existe um curso cadastrado.Cadastre-o primeiro!"); } else{ qtdTurmas++; CadTurma(turmas, cursos, TOTAL); break; case 3: if(qtdTurmas < 1){ printf("não existe uma turma cadastrada.Cadastre-a primeiro!"); break; } else{ qtdDisciplinas++; CadDisciplina(cursos,turmas,disciplinas,TOTAL,qtdTurmas); break; case 4: if(qtdDisciplinas < 1){ printf("não existe uma disciplina cadastrada.Cadastre-a primeiro!"); break; }else{ qtdAlunos++; CadAluno(alunos,cursos,turmas,disciplinas,TOTAL); break; case 5: ListarTurmas(cursos,turmas,TOTAL); break; case 6: ListarDisciplinas(cursos,disciplinas,turmas,TOTAL); break; case 7: ListarAluno(alunos,turmas,disciplinas,cursos,TOTAL); break; case 8: qtdCursos++; ListarCursos(cursos,TOTAL,qtdCursos); break; case 9: opc = 0; break; default : break; } } free(cursos); free(turmas); free(disciplinas); free(alunos); return 0; } //acabou o main void CadCurso(struct Curso * cursos, int TOTAL) { int x = 0; for(; x < TOTAL; x++) { printf("\nInforme o codigo do curso: "); scanf("%d", &cursos[x].codigo); printf("\nInforme o nome do curso: "); scanf("%s", cursos[x].nome); } } void CadTurma(struct Curso * cursos, struct Turma * turmas, int TOTAL) { int x = 0; for(; x< TOTAL; x++) { printf("\n Informe o codigo do curso %d: ", cursos[x].codigo); printf("\n Informe o codigo da turma: "); scanf("%d", &turmas[x].codigo); printf("Informe o nome da turma: "); scanf("%s", &turmas[x].nome); } } void CadDisciplina(struct Disciplina * disciplinas,struct Turma * turmas, struct Curso * cursos, int TOTAL,int qtdTurmas) { if(qtdTurmas < 1 ) { printf( "Não existe turma(s) cadastradas no sistema !\n" ); }else{ int x = 0; for(; x< TOTAL; x++) { printf("\n Informe o codigo do curso %d : ", cursos[x].codigo); printf("\n Informe o codigo da turma %s: "); scanf("%d", &turmas[x].codigo); printf("\n Informe o codigo da disciplina: "); scanf("%d", &disciplinas[x].codigo); printf("Informe o nome da disciplina: "); scanf("%s",&disciplinas[x].nome); } qtdTurmas++; } void CadAluno(struct Aluno * alunos, struct Turma * turmas, struct Disciplina * disciplinas, struct Curso * cursos, int TOTAL) { int x = 0; for (;x < TOTAL;x++){ printf("\n Informe a matricula do aluno:"); scanf("%d",&alunos[x].matricula); printf("\n Informe o nome do aluno:"); scanf("%s",&alunos[x].nome); printf("\n Informe o curso que o aluno esta inserido:"); scanf("%d",&cursos[x].codigo); printf("\n Informe as disciplinas que o aluno cursa:"); int i = 0; for(; i < 3;i++){ printf("\n Codigo da disciplina:"); scanf("%d",&disciplinas.codigo); printf("\n Nome da disciplina:"); scanf("%s",&disciplinas.nome); } } } void ListarAluno( struct Aluno * alunos,struct Disciplina * disciplinas, struct Turma * turmas,struct Curso * cursos, int qtdAlunos) { if(qtdAlunos < 1 ) { printf( "Não existe aluno(s) cadastrados no sistema !\n" ); }else{ int matriculaAluno; printf( "\n Matricula do aluno: " ); scanf( "%d",&matriculaAluno); int i = 0; for(; i < qtdAlunos; i++ ) if( alunos.matricula == matriculaAluno ) { printf("Matricula: %d | Nome: %s\n", alunos.matricula, alunos.nome ); printf("__________________________________________________"); printf("Disciplina:\n"); printf("Codigo da disciplina: %d \n", disciplinas.codigo); printf("Nome do aluno: %s \n", disciplinas.nome); printf("__________________________________________________"); printf("Turma:\n"); printf("Codigo da Turma: %d \n", turmas.codigo); printf("Nome da turma: %s \n", turmas.nome); printf("__________________________________________________"); printf("Curso:\n"); printf("Codigo do Curso: %d \n", cursos.codigo); printf("Nome do Curso %s \n", cursos.nome); printf("__________________________________________________"); printf("\n"); } } } void ListarTurmas(struct Curso * cursos,struct Turma * turmas, int qtdTurmas) { //verificando se a quantidade de turmas é menor que 0 if(qtdTurmas < 1 ){ printf( "Não existe turmas cadastradas!\n" ); } //lendo o codigo do curso int codigoCurso; printf( "\n Código do Curso: " ); scanf( "%d", &codigoCurso); //listando turmas int i = 0; for( i; i < qtdTurmas; i++ ) if( turmas.codigoCurso == codigoCurso ){ printf("Código da Turma: %d \n", turmas.codigo); printf("Nome da turma: %s \n", turmas.nome); printf("\n"); } } void ListarDisciplinas(struct Curso * cursos,struct Turma * turmas,struct Disciplina * disciplinas, int qtdDisciplinas) { int codigoCurso = 0; printf( "\n Código do Curso: " ); scanf( "%d", &codigoCurso); if(qtdDisciplinas < 1){ printf( "Não existe disciplinas!\n" ); } int i = 0; int codigoTurma = 0; for(; i < qtdDisciplinas; i++ ) if( disciplinas.codigoTurma == codigoTurma ){ printf("Código da Turma: %d \n", disciplinas.codigo); printf("Nome da turma: %s \n", disciplinas.nome); } } void ListarCursos(struct Curso * cursos,int qtdCursos) { int codigoCurso; printf( "\n Código do Curso: " ); scanf( "%d", &codigoCurso); if(qtdCursos < 1){ printf( "Não existe cursos cadastrados!\n" ); } int i = 0; for(; i < qtdCursos; i++ ) if(cursos.codigo == codigoCurso ){ printf("Código do Curso: %d \n", cursos.codigo); printf("Nome do curso: %s \n", cursos.nome); } } }
-
Estou realizando um trabalho para faculdade e estou com dúvidas na utilização de structs e ponteiros, está aparecendo erros como o seguinte: warning: implicit declaration of function 'CadCurso' [-Wimplicit-function-declaration] warning: implicit declaration of function 'CadTurma' [-Wimplicit-function-declaration] Não sei o porque desses erros aparecem no case se eu estou chamando as variaveis dos cadastros e listagens. #include <stdio.h> #include <stdlib.h> struct Curso { int codigo; char nome[50]; }; struct Turma { int codigo; char nome[50]; int codigoCurso; }; struct Disciplina { int codigo; char nome[50]; int codigoTurma; }; struct Aluno { int matricula; char nome[50]; int codigoDisciplina; }; int Opcao() { int valor = 0; printf("\n-------------------------------------------------------"); printf("\n 1-Cadastrar Curso 2-Cadastrar Turma "); printf("\n 3-Cadastrar Disciplina 4-Cadastrar Aluno "); printf("\n 5-Listar Turmas 6-Listar Disciplinas "); printf("\n 7-Listar Aluno 8-Listar Cursos "); printf("\n 9-Sair "); printf("\n-----------------------------------------------------\n"); scanf("%d",&valor); return (valor); } //aqui comeca o main int main() { int opc=99; int TOTAL = 0; int qtdCursos = 0; int qtdTurmas = 0; int qtdDisciplinas = 0; int qtdAlunos = 0; struct Curso * cursos; struct Turma * turmas; struct Disciplina * disciplinas; struct Aluno * alunos; printf("\nInforme o numero de cadastros:"); scanf("%d", &TOTAL); cursos = (struct Curso*)malloc(sizeof(struct Curso) * TOTAL); turmas = (struct Turma*)malloc(sizeof(struct Turma) * TOTAL); disciplinas = (struct Disciplina*)malloc(sizeof(struct Disciplina) * TOTAL); alunos = (struct Aluno*)malloc(sizeof(struct Aluno) * TOTAL); while (opc > 0){ opc = Opcao(); switch (opc){ case 1: CadCurso(cursos, TOTAL); break; case 2: if(qtdCursos < 1){ printf("não existe um curso cadastrado.Cadastre-o primeiro!"); } else{ qtdTurmas++; CadTurma(turmas, cursos, TOTAL); break; case 3: if(qtdTurmas < 1){ printf("não existe uma turma cadastrada.Cadastre-a primeiro!"); break; } else{ qtdDisciplinas++; CadDisciplina(cursos,turmas,disciplinas,TOTAL,qtdTurmas); break; case 4: if(qtdDisciplinas < 1){ printf("não existe uma disciplina cadastrada.Cadastre-a primeiro!"); break; }else{ qtdAlunos++; CadAluno(alunos,cursos,turmas,disciplinas,TOTAL); break; case 5: ListarTurmas(cursos,turmas,TOTAL); break; case 6: ListarDisciplinas(cursos,disciplinas,turmas,TOTAL); break; case 7: ListarAluno(alunos,turmas,disciplinas,cursos,TOTAL); break; case 8: qtdCursos++; ListarCursos(cursos,TOTAL,qtdCursos); break; case 9: opc = 0; break; default : break; } } free(cursos); free(turmas); free(disciplinas); free(alunos); return 0; } //acabou o main void CadCurso(struct Curso * cursos, int TOTAL) { int x = 0; for(; x < TOTAL; x++) { printf("\nInforme o codigo do curso: "); scanf("%d", &cursos[x].codigo); printf("\nInforme o nome do curso: "); scanf("%s", cursos[x].nome); } } void CadTurma(struct Curso * cursos, struct Turma * turmas, int TOTAL) { int x = 0; for(; x< TOTAL; x++) { printf("\n Informe o codigo do curso %d: ", cursos[x].codigo); printf("\n Informe o codigo da turma: "); scanf("%d", &turmas[x].codigo); printf("Informe o nome da turma: "); scanf("%s", &turmas[x].nome); } } void CadDisciplina(struct Disciplina * disciplinas,struct Turma * turmas, struct Curso * cursos, int TOTAL,int qtdTurmas) { if(qtdTurmas < 1 ) { printf( "Não existe turma(s) cadastradas no sistema !\n" ); }else{ int x = 0; for(; x< TOTAL; x++) { printf("\n Informe o codigo do curso %d : ", cursos[x].codigo); printf("\n Informe o codigo da turma %s: "); scanf("%d", &turmas[x].codigo); printf("\n Informe o codigo da disciplina: "); scanf("%d", &disciplinas[x].codigo); printf("Informe o nome da disciplina: "); scanf("%s",&disciplinas[x].nome); } qtdTurmas++; } void CadAluno(struct Aluno * alunos, struct Turma * turmas, struct Disciplina * disciplinas, struct Curso * cursos, int TOTAL) { int x = 0; for (;x < TOTAL;x++){ printf("\n Informe a matricula do aluno:"); scanf("%d",&alunos[x].matricula); printf("\n Informe o nome do aluno:"); scanf("%s",&alunos[x].nome); printf("\n Informe o curso que o aluno esta inserido:"); scanf("%d",&cursos[x].codigo); printf("\n Informe as disciplinas que o aluno cursa:"); int i = 0; for(; i < 3;i++){ printf("\n Codigo da disciplina:"); scanf("%d",&disciplinas.codigo); printf("\n Nome da disciplina:"); scanf("%s",&disciplinas.nome); } } } void ListarAluno( struct Aluno * alunos,struct Disciplina * disciplinas, struct Turma * turmas,struct Curso * cursos, int qtdAlunos) { if(qtdAlunos < 1 ) { printf( "Não existe aluno(s) cadastrados no sistema !\n" ); }else{ int matriculaAluno; printf( "\n Matricula do aluno: " ); scanf( "%d",&matriculaAluno); int i = 0; for(; i < qtdAlunos; i++ ) if( alunos.matricula == matriculaAluno ) { printf("Matricula: %d | Nome: %s\n", alunos.matricula, alunos.nome ); printf("__________________________________________________"); printf("Disciplina:\n"); printf("Codigo da disciplina: %d \n", disciplinas.codigo); printf("Nome do aluno: %s \n", disciplinas.nome); printf("__________________________________________________"); printf("Turma:\n"); printf("Codigo da Turma: %d \n", turmas.codigo); printf("Nome da turma: %s \n", turmas.nome); printf("__________________________________________________"); printf("Curso:\n"); printf("Codigo do Curso: %d \n", cursos.codigo); printf("Nome do Curso %s \n", cursos.nome); printf("__________________________________________________"); printf("\n"); } } } void ListarTurmas(struct Curso * cursos,struct Turma * turmas, int qtdTurmas) { //verificando se a quantidade de turmas é menor que 0 if(qtdTurmas < 1 ){ printf( "Não existe turmas cadastradas!\n" ); } //lendo o codigo do curso int codigoCurso; printf( "\n Código do Curso: " ); scanf( "%d", &codigoCurso); //listando turmas int i = 0; for( i; i < qtdTurmas; i++ ) if( turmas.codigoCurso == codigoCurso ){ printf("Código da Turma: %d \n", turmas.codigo); printf("Nome da turma: %s \n", turmas.nome); printf("\n"); } } void ListarDisciplinas(struct Curso * cursos,struct Turma * turmas,struct Disciplina * disciplinas, int qtdDisciplinas) { int codigoCurso = 0; printf( "\n Código do Curso: " ); scanf( "%d", &codigoCurso); if(qtdDisciplinas < 1){ printf( "Não existe disciplinas!\n" ); } int i = 0; int codigoTurma = 0; for(; i < qtdDisciplinas; i++ ) if( disciplinas.codigoTurma == codigoTurma ){ printf("Código da Turma: %d \n", disciplinas.codigo); printf("Nome da turma: %s \n", disciplinas.nome); } } void ListarCursos(struct Curso * cursos,int qtdCursos) { int codigoCurso; printf( "\n Código do Curso: " ); scanf( "%d", &codigoCurso); if(qtdCursos < 1){ printf( "Não existe cursos cadastrados!\n" ); } int i = 0; for(; i < qtdCursos; i++ ) if(cursos.codigo == codigoCurso ){ printf("Código do Curso: %d \n", cursos.codigo); printf("Nome do curso: %s \n", cursos.nome); } } }
-
Preciso de sugestões para aprender ponteiros
uma questão postou Rodrigo Rech Tutoriais & Dicas - C, C++
Não estou conseguindo aprender o suficiente de ponteiros na faculdade, poderiam sugerir materiais para entender completamente desse assunto? -
Bom dia, Boa tarde, e Boa noite a todos. Venho aqui para tentar esclarecer uma dúvida minha em que não estou conseguindo solucionar. Meu professor passou um exercício em que seria necessário criar uma matriz para armazenar 10 strings e depois ordena-las alfabeticamente, mas claro usando ponteiros. Eu vi algumas resoluções no fórum e só achei do tipo que usa o comando strcmp mas não é desse que preciso. Já fiz a parte do código para receber as strings e armazena-las na matriz, apenas não sei como proceder para orderna-la alfabeticamente com o uso de ponteiros. Se puderem ao menos me dar um norte ou um exemplo já ajudaria. Agradeço a qualquer um que tenha a disposição de ajudar. OBS.: Necessita ser obrigatoriamente na Linguagem C, e não em C++. OBS².: Aqui está o enunciado da questão: 1. Leia 10 strings para uma matriz de string. Ordene e imprima as strings em ordem alfabética usando ponteiros.
- 6 respostas
-
#include <stdio.h> int comprimento (const char *s) { int i = 0; while(s+i != "\0") { i++; } return i; } void main() { const char *s; const char v[] = {"abc"}; s = &v[0]; printf("%d", comprimento(s)); //puts(s[0]); } Olá galera, tenho esse programa acima onde tento fazer com que ele mostre o número de caracteres q tem um array de char. mas quando rodo tá ficando em loop infinito. Acredito que seja um erro bobo, por favor peço ajuda. Grato! RESOLUÇÃO: Já resolvi o problema. Em vez de "\0" tem de ser '\0'. porque se coloca "" é como se fossem dois bytes.
-
Pessoal, preciso de ajuda para alocar uma matriz de forma dinâmica. Segui vários tutoriais e está quase tudo dando certo, mas quando vou compilar dá um erro em relação ao tipo da função que eu criei para alocar a matriz dinamicamente. ->Na função main() eu criei um ponteiro para ponteiro do tipo float (float **mat), defini as entradas inteiras para linhas e colunas da matriz (l, c) ->chamo a funcao q aloca a matriz: mat=Alocar_matriz_real(l, c); ->a função para alocação está abaixo: float **Alocar_matriz_real(int m, int n){ /* ponteiro para a matriz */ float **v; int i,j; /* variável auxiliar */ if (m < 1 || n < 1) { /* verifica parametros recebidos */ printf ("** Erro: Parametro invalido **\n"); return (NULL); } /* aloca as linhas da matriz */ v=(float**)calloc(m, sizeof(float*)); /* Um vetor de m ponteiros para float */ if (v == NULL) { printf("** Erro: Memoria Insuficiente **"); return (NULL); } /* aloca as colunas da matriz */ for ( i = 0; i < m; i++ ) { v = (float*)calloc(n, sizeof(float)); /* m vetores de n floats */ if (v == NULL) { printf("** Erro: Memoria Insuficiente **"); return (NULL); } } return (v); } erro: redefinition of Alocar_matriz_real Alguém pode me ajudar a resolver isso?
-
Boa noite pessoal! Estou estudando ponteiros em C++ e no material que estou vendo mostrou o código abaixo como exemplo. Estou usando como compilador o netbeans e ele me retorna que o "cout" não é aplicável nesse escopo. O que pode estar de errado? Podem me ajudar? #include <cstdlib> using namespace std; int main() { int score = 5; cout << &score <<endl; return 0; }
-
vazio
-
Olá! Estou com uma dúvida, existe algum modo de alocar um vetor dinâmico dentro de uma estrutura em C++? Dessa forma que eu fiz o código é compilado normalmente, mas ao executar ele sai do programa quando tenta alocar o tamanho dos vetores recurso e processo. Se alguém puder ajudar, agradeço! Já tentei fazer TComputador *cmp = new TComputador + (sizeof(TProcesso *)*prc) + (sizeof(TRecurso *)*rec); Mas aí o programa termina toda vez que encontro algo tipo "cmp->processo". Segue um trecho do código como exemplo. typedef struct TComputador{ int maxRec; int maxPrc; int numPrc; double exec; TRecurso **recurso; TProcesso **processo; } cmp; TComputador *iniComputador(int rec, int prc){ TComputador *cmp = new TComputador; int tipo; double cap, vel; if(cmp != NULL){ *cmp->processo = new TProcesso[prc]; *cmp->recurso = new TRecurso[rec]; cmp->maxPrc = prc; cmp->maxRec = rec; cmp->numPrc = ; for(int i = ; i < rec; i++){ cin >> tipo; cin >> cap; cin >> vel; addRecurso(cmp->recurso[i], tipo, cap, vel); } } return cmp; }
-
Boa tarde a todos. uma dúvida. Tenho um objeto criado no local A do software do tipo TCliente, nele temos as seguinte propriedades nome e telefone (preenchidas). No local B vou precisar também de um objeto do tipo TCliente, devido a isso criei uma variável do tipo TCliente e já instanciei a mesma. Dentro do local A eu passo o meu objeto instanciado no local A para o local B assim; LocalB.VarTipoCliente := LocalA.VarTipoCliente; Isso esta correto, percebo que recebo todas as informações ligadas ao objeto , no entanto a minha duvida é quando vou dar um free na variável LocalB.VarTipoCliente percebo que a variavel LocalA.VarTipoCliente já não esta mais acessível tb. Porque?
-
Olá, estou com um problema: tenho que ler um arquivo de .csv que contem simulações de jogos entre dois times e/ou consultas ao ranking.Foi especificado que o numero de consultas é muito maior que o numero de simulações de jogos. Para não ficar muito custoso pensei em sempre inserir os times após cada simulação já de maneira ordenada, e se o time já tiver feito algum outro jogo, eu removo e insiro novamente ordenado. /**************************** Estruturas ****************************/ typedef int TipoChave; typedef struct TipoTime { char *nome; int classificacao; int pontos; }TipoTime; typedef struct TipoItem{ TipoChave Chave; TipoTime Time; }TipoItem; typedef struct TipoCelula *TipoApontador; typedef struct TipoCelula{ TipoItem Item; TipoApontador Prox; }TipoCelula; typedef struct TipoLista{ TipoApontador Primeiro, Ultimo; }TipoLista;/**************************** Funcoes ****************************/ void FLVazia (TipoLista *Lista); int Vazia(TipoLista Lista); void Insere (TipoItem x, TipoLista *Lista); void Retira (TipoApontador p, TipoLista *Lista, TipoItem *Item); void Imprime (TipoLista Lista); void ImprimeNoArquivoDeSaida (TipoLista Lista); int pesquisarTime(TipoLista *L , char *nome, TipoCelula *Celula); void inserirOrdenado(TipoLista Lista , TipoItem *Time); void atualizaVitoria(TipoLista Lista, TipoItem *Item, TipoApontador p); void atualizaEmpate(TipoLista Lista, TipoItem *Item, TipoApontador p);/*Função que faz uma lista vazia*/ void FLVazia (TipoLista *Lista){ Lista -> Primeiro = (TipoApontador) malloc (sizeof(TipoCelula)); Lista -> Ultimo = Lista -> Primeiro; Lista -> Primeiro -> Prox = NULL; } int Vazia(TipoLista Lista){ return (Lista.Primeiro == Lista.Ultimo); } /*Insere na lista*/ void Insere (TipoItem x, TipoLista *Lista){ Lista -> Ultimo -> Prox = (TipoApontador) malloc (sizeof (TipoCelula)); Lista -> Ultimo = Lista -> Ultimo -> Prox; Lista -> Ultimo -> Item = x; Lista -> Ultimo -> Prox = NULL; } /*Remove da lista*/ void Retira (TipoApontador p, TipoLista *Lista, TipoItem *Item){ TipoApontador q; if ( (Vazia(*Lista)) || (p == NULL) || (p -> Prox == NULL) ){ printf ("\nErro: lista vazia ou posicao nao existe!!\n"); return; } q = p -> Prox; *Item = q -> Item; p -> Prox = q -> Prox; if (p -> Prox == NULL){ Lista -> Ultimo = p; } free (q); } /*Imprime a lista*/ void Imprime (TipoLista Lista){ TipoApontador Aux; Aux = Lista.Primeiro -> Prox; while (Aux != NULL){ printf ("%d \n" , Aux -> Item.Chave); Aux = Aux -> Prox; } } /*void ImprimeNoArquivoDeSaida (TipoLista Lista){ TipoApontador Aux; Aux = Lista.Primeiro -> Prox; while (Aux != NULL){ fprintf (ArqSaida,"%d, \n" , Aux -> Item.Chave); Aux = Aux -> Prox; } }*/ //pesquisa se já existem o time na lista. int pesquisarTime(tlista *L,char *nome, TipoCelula *Celula){ TipoCelula *p; TipoTime *Time; while (p !=NULL){ Time = L->nome; if (strcmp(nome,Time->nome)==0){ return 1; } } return 0; } /*Esta função faz a inserção na lista de maneira ordenada*/ void inserirOrdenado(TipoLista Lista **p, *Time) { lista *atual, *novo, *anterior; int num; novo = (lista *) malloc(sizeof(lista)); atual = *p; anterior = NULL; novo->valor = Time; if(atual == NULL){ novo->prox = NULL; *p = novo; } else{ while(atual != NULL && atual->valor < num){ anterior = atual; atual = atual->prox; } novo->prox = atual; if(anterior == NULL){ *p = novo; } else{ anterior->prox = novo; } } } /*A função recebe o time vitorioso, copia para um time temporário. chama a função Retira, para remover o item da lista soma os 3 pontos da vitória e insere novamente de maneira ordenada*/ void atualizaVitoria(TipoLista Lista, TipoTime Time, TipoApontador p){ TipoItem ItemTemp; //Copia o time para um TipoTime temporário. ItemTemp.Time.nome = Item.Time.nome; ItemTemp.Time.classificacao = Item.Time.classificacao; ItemTemp.Time.pontos = Item.Time.pontos+3;//Ponteiro ou conteudo ? Retira ( p, *Lista, *Item); inserirOrdenado( Lista **p, *ItemTemp); } /*A função recebe os times que empataram(um por vez), copia para um time temporário. chama a função Retira, para remover o item da lista soma o 1 ponto da vitória e insere novamente de maneira ordenada*/ void atualizaEmpate(TipoLista Lista, TipoItem *Item, TipoApontador p){ TipoItem ItemTemp; ItemTemp.Time.nome = Item.Time.nome; ItemTemp.Time.classificacao = Item.Time.classificacao; ItemTemp.Time.pontos = Item.Time.pontos+3;//Ponteiro ou conteudo ? Retira ( p, *Lista, *Item); inserirOrdenado( Lista **p, *ItemTemp); }int main(){ /************************** VARIAVEIS *****************************/ char buffer[100]; int i = 0; int flag = 1; TipoLista Campeonato; TipoItem ItemAux; char *Acao; char *TipoDaAcao; char *NomeDoTime1; char *NomeDoTime2; /************************ LEITURA ARQUIVOS *******************************/ FILE *ArqEntrada; // leitura dos comandos FILE *ArqSaida; // resultado dos comandos FILE *ArqRanking; // arquivo do ranking ordenado ArqEntrada = fopen("entrada.csv","r"); ArqSaida = fopen("saida.csv", "w"); ArqRanking = fopen("ranking.csv","r"); if (ArqEntrada == NULL) { printf ("\nERRO: Arquivo de entrada incorreto!"); } if (ArqSaida == NULL){ printf("\nERRO: Arquivo de saida incorreto!"); } if (ArqRanking == NULL){ printf("\nERRO: Ranking nao encontrado. Sera gerado um novo."); ArqRanking = fopen("ranking.csv","w"); flag = 0; } /************************ CARREGANDO SIMULAÇÕES ANTERIORES *******************************/ if (flag==1){ fgets (buffer, 100, ArqRanking); while (!feof(ArqRanking)){ printf ("\n"); ItemAux.Time.nome = atoi (strtok (buffer, ",")); printf ("\nNome: %s", ItemAux.Time.nome); ItemAux.Time.classificacao = atoi (strtok (buffer, ",")); printf ("\nClassificacao: %d", ItemAux.Time.classificacao ); ItemAux.Time.pontos = atoi(strtok (NULL, ",")); printf ("\nPontuacao: %d", ItemAux.Time.pontos); fgets (buffer, 100, ArqRanking); } } /************************ LEITURA DA ENTRADA *******************************/ while (!feof(ArqEntrada)){ Acao = strtok (NULL, ","); if (strcmp("CONSULTA", Acao)==0){ TipoDaAcao = atoi (strtok (buffer, ",")); NomeDoTime1 = atoi (strtok (buffer, ",")); //if (pesquisarTime(&Campeonato, *NomeDoTime1, ItemAux )==0){ if (1){ printf("/nERRO: Time nao encontrado para consulta."); } if (strcmp("PONTUACAO", Acao)==0){ fprintf(ArqSaida, "%s,%s,%d", TipoDaAcao, NomeDoTime1, ItemAux.Time.pontos); } else if (strcmp("RANKING", Acao)==0){ fprintf(ArqSaida, "%s,%s,%d", TipoDaAcao, NomeDoTime1, ItemAux.Time.classificacao); } } else if(strcmp("VITORIA", Acao)==0){ NomeDoTime1 = atoi (strtok (buffer, ",")); NomeDoTime2 = atoi (strtok (buffer, ",")); if (1){//*pesquisarTime(*NomeDoTime1, Campeonato, ItemAux )*/){ atualizaVitoria(Campeonato, *Item, p); } else if(1){ //(pesquisarTime(*NomeDoTime1, Campeonato, ItemAux )==0){ //Como somar os 3 pontos para inserir ordenado? inserirOrdenado(Campeonato p, *Time); } if (1){ //(pesquisarTime(*NomeDoTime2, Campeonato, ItemAux )==0){ inserirOrdenado(Campeonato p, *Time); } /* else if(strcmp("EMPATE", Acao)==0){ NomeDoTime1 = atoi (strtok (buffer, ",")); NomeDoTime2 = atoi (strtok (buffer, ",")); /* pesquisarTime retorna 1 se o time for encontrado e 0 se não. if (pesquisarTime(*NomeDoTime1, Campeonato, ItemAux )){ atualizaEmpate(Campeonato, *Item, p); } /* pesquisarTime retorna 1 se o time for encontrado e 0 se não. else if (pesquisarTime(*NomeDoTime1, Campeonato, ItemAux )==0){ //Como somar o 1 ponto para inserir ordenado? inserirOrdenado(Campeonato p, *Time); } /* pesquisarTime retorna 1 se o time for encontrado e 0 se não. if (pesquisarTime(NomeDoTime2, Campeonato, ItemAux )){ atualizaEmpate(Campeonato, *Item, p); } /* pesquisarTime retorna 1 se o time for encontrado e 0 se não. else if (pesquisarTime(*NomeDoTime2, Campeonato, ItemAux )==0){ //Como somar o 1 ponto para inserir ordenado? inserirOrdenado(Campeonato p, *Time); } */ } else{ printf("/nErro: Primeiro argumento invalido."); } } /************************ IMPRIME RANKING *******************************/ ImprimeNoArquivoDeSaida(Campeonato); fclose(ArqEntrada); fclose(ArqSaida); fclose(ArqRanking); return 0; }Fiz o código desta maneira porém estou com muitas duvidas quanto as passagens dos parâmetros para as funções. Vocês podem me ajudar ? Obrigado
-
Escrever um programa para alocar dinamicamente um vetor de inteiros, preencher este vetor com valores lidos do teclado e, por último, escrever o vetor Completar este programa ( sempre usando ponteiros) para informar ao usuário: o maior valor no vetor; o menor valor no vetor; o valor médio armazenado no vetor; e o número de valores negativos no vetor; imprimir os elementos em ordem contrária. Alguém poderia me ajudar com essa questão?
-
Sou inciante e estou treinando alguns conceitos básicos na faculdade sobre listas encadeadas com ponteiros. Estou implementando uma lista onde quero fazer cadastro de moradores de um condomínio, onde serão cadastrados o nome e se possuem veículos dentro do apartamento. Porém na hora que chamo a função imprimir(), simplesmente não acontece nada, embora eu ache que a lógica esteja certa. Alguém pode me ajudar ? Segue o código: #include <iostream> #include <stdlib.h> #include <string> using namespace std; struct Morador { string nome; string veiculo; string placa; string condominio; Morador *proximo; }; struct ListaMoradres { Morador *primeiro; }; ListaMoradres lista; // CRIEI UMA LISTA GLOBAL, POIS QUERO QUE A LISTA CONTINUE COM OS CADASTROS MESMO APÓS O FIM DA EXECUÇÃO // DO MAIN (não SEI SE TA CERTO FAZER ISSO KKK) void inciar() { lista.primeiro = nullptr; } void inserir_Morador() { string nome = ""; string veiculo = ""; string placa = ""; string condominio = ""; int op; cout << "Digite o nome do morador\n"; cin >> nome; cout << "\nPossui veiculo?\n1-SIM\t2-não\n"; cin >> op; switch (op) { case 1: cout << "Carro ou Moto? 1- CARRO\t2- MOTO\n"; cin >> op; if (op == 1) { cout << "Digite placa:\n"; cin >> placa; veiculo = "(Carro)"; break; } else { cout << "Digite placa\n"; cin >> placa; veiculo = "Moto"; break; } case 2: veiculo = "não possui"; break; default: cout << "Opcao invalida\n"; break; } } if (lista.primeiro == nullptr) { Morador *primeiro_Morador = new Morador(); lista.primeiro = primeiro_Morador; primeiro_Morador->nome = nome; primeiro_Morador->veiculo = veiculo; primeiro_Morador->placa = placa; primeiro_Morador->condominio; primeiro_Morador->proximo = nullptr; cout << "Primeiro morador inserido com sucesso\n"; return; } else { Morador *ultimo = lista.primeiro; while (ultimo->proximo != nullptr) ultimo = ultimo->proximo; Morador *novo = new Morador(); ultimo->proximo = novo; novo->nome = nome; novo->veiculo = veiculo; novo->placa = placa; novo->condominio = condominio; novo->proximo = nullptr; cout << "Morador inserido com sucesso\n"; return; } } void imprimir() { Morador *inicio = lista.primeiro; while (inicio->proximo != nullptr) { cout << "\nNome: "+inicio->nome << endl; cout << "Veiculo: " + inicio->veiculo << endl; cout << "Placa: " + inicio->placa << endl; cout << "Condominio: " + inicio->condominio << endl; inicio = inicio->proximo; } return; } int main() { int op; cout << "1 - inciazlizar\t2 - inserir\t3 - imprimir\n"; cin >> op; switch (op) { case 1: inciar(); break; case 2: inserir_Morador(); break; case 3: imprimir(); break; default: cout << "Opcao invalida\n"; break; } main(); }
-
É o seguinte, estou tentando desenvolver um programinha simples em C que, através das bibliotecas ncurses.h, menu.h e dirent.h listaria os arquivos de um diretório. Acontece que o programa compila, mas ao executar dá Segmentation Fault. Então chamei o gdb pra ver onde estava o erro e ele apontou para a linha 38. Segue o código: #include <dirent.h> #include <ncurses.h> #include <menu.h> #include <string.h> #include <stdlib.h> #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) #define CTRLD 4 int main(int argc, char *argv[]) { char *choices; ITEM **items; int c; MENU *menu; int n_choices, i; ITEM *cur_item; initscr(); cbreak(); noecho(); keypad(stdscr, TRUE); DIR *d; struct dirent *dir; d = opendir("/home/tulio"); int b=0, k; if (d) { while((dir = readdir(d)) != NULL) { choices[b] = *dir->d_name; <---------------------------- ERRO b++; } items[n_choices] = (ITEM *)NULL; closedir(d); items = (ITEM **)calloc(n_choices+1, sizeof(ITEM *)); n_choices = ARRAY_SIZE(choices); for(k=0; n_choices; k++) { items[k] = new_item(&choices[k], ""); } menu = new_menu((ITEM **)items); menu = new_menu((ITEM **)items); mvprintw(LINES - 2, 0, "F1 to exit"); post_menu(menu); refresh(); int key; while((key = getch()) != KEY_F(1)) { switch(key) { case KEY_DOWN: menu_driver(menu, REQ_DOWN_ITEM); break; case KEY_UP : menu_driver(menu, REQ_UP_ITEM); break; } } } free_item(items[0]); free_item(items[1]); free_menu(menu); endwin(); } Alguém pode me explicar o que fiz errado? A princípio achava que poderia ser algum problema com ponteiros, mas ao testar a listagem de diretórios em um arquivo .c isolado, sem ncurses e só com printf, compilou e rodou direitinho. Obrigado.
-
- segmentation
- fault
- (e %d mais)
-
E ai galera, fiquei um tempo sem programar em C++ e agora estou fazendo um programa, porém estou tendo dificuldades quanto a ponteiros. Lembro que quando estudava, tinha esses mesmo problemas, mas agora esqueci como resolve-los. O seguinte código esta compilando, mas o programa trava. A ideia é o seguinte, tenho um classe "alimento" e dentro da classe "refeição" quero criar uma lista de alimentos. No main, ao chamar a função addAlimento, o programa trava. A logica pra criar a lista eu lembro, fiz esse codigo apenas para testar o por que esta travando, mas não estou chegando em uma solução. Obrigado!
-
Bom dia! Sou novo no C++ e estou passando por um problema aparentemente simples, mas que não consigo identificar o que fazer. Eu possuo uma classe que contém um vector de objetos. Em outra classe, eu recupero esse vector e tento alterar um atributo de um objeto dele, ae está o problema, o valor não é alterado na memória, os gets funcionam mas o set não. Acredito que eu não esteja utilizando o ponteiro corretamente, mas não consegui resolver. Obrigado. LinhaSimplex *ponteiroLinhaSimplex; for (unsigned int i = 0; i < getTabela().size(); i++) { ponteiroLinhaSimplex = &(getTabela()[i]); string texto = ponteiroLinhaSimplex->getSinalDaOperacao(); string sinal = "<"; if (utils.isSinal(texto, sinal)) { ponteiroLinhaSimplex->setVariavelDeFolga(true); ponteiroLinhaSimplex->setVariavelArtificial(false); }