Ir ao conteúdo
  • Cadastre-se

barutaji

Membros Plenos
  • Total de itens

    113
  • Registro em

  • Última visita

  • Qualificações

    0%

Reputação

1

Sobre barutaji

  • Data de Nascimento 14/01/1990 (29 anos)

Informações gerais

  • Cidade e Estado
    Curitiba, PR
  1. barutaji

    Dúvida básica C++

    Não sei qual exatamente a lógica de calculo que você quer representar em Soma2, mas seu programa está rodando errado só por erros de sintaxe: #include <iostream> #include <cmath> using namespace std; int main () { double Mw [7] = {7, 4 , 3, 4, 5, 6, 7}; const double k = 4.5; double Soma = 0; int i = [COLOR="Red"][B]0[/B][/COLOR]; double Soma2 = 0; while (i < [COLOR="red"][B]7[/B][/COLOR])[COLOR="red"][B]{[/B][/COLOR] Soma += k * Mw[i]; Soma2 += Soma; for (int i = 0; i < 7;i++) { Soma2 += k * Mw[i]; } [COLOR="red"] [B]i++;[/B] [B]}[/B][/COLOR] cout << Soma <<endl; //162 esperado cout << pow(Soma, 2)<<endl; //26244 esperado cout << Soma2 <<endl; //324 esperado char saida; cin >> saida; } Dá uma olhada nos negritos e tenta entender. E explica melhor qual a ideia do Soma2, senão não tem como avaliar o algoritmo direito. Abc.
  2. Olá amigos, Surgiu-me uma dúvida acerca do uso do comando delete: Para se usar em matrizes usamos: delete []blabla; Até aí ok. Mas no caso de matrizes multidimensionais, como char **blabla? delete []blabla; já dá conta do recado? ou precisaria: delete [][]blabla; ou ainda: for(int i=0; i<LIMITE; i++) delete [] blabla[i]; delete [] blabla; Alguma luz?
  3. não use negrito. Use a biblioteca conio.h para controlar o movimento do cursor, ou use ansi.sys, conforme nesse link: http://www.linhadecodigo.com.br/Dica.aspx?id=1125 Basicamente tem umas funções que mudam a posição do cursor, e você vai precisar disso para o movimento das setas, para o backspace, para o return e para mudar a tela com page up(down). Calculo que o código vai ficar grandinho, controlar gráfico por modo texto é um saco.
  4. 1º - precisa de uma variável indicando qual é o ultimo elemento válido. É 'i', 'j', ou o que que é? 2º - o 'i' parece assumir mais de um papel durante o código. 3º - o laço for ficou estranho, ele começa em 'j'(seja lá quanto isso vale) e avança até (i-1). Em cada ciclo ele atribui para funcionário um valor diferente, no próximo ciclo esse valor é substituido por outro. No final das iterações funcionário==funcionario[i-2]; O mais lógico seria começar de i e avançar até o final, a cada ciclo atribui-se fuincionario[y]=funcionario[y+1]; no final todos os valores vão "escorregar" um nível e o último elemento fica repetido. Você pode apagar o ultimo membro ou simplesmente decrementar o contador de "valor final". if(excluir==1){ printf("Codigo do funcionario:"); scanf("%d",&l); i=l;//localiza funcionario printf("\n\n Dados do %d funcionario.\n\n", i); printf("\n A matricula do funcionario e: %d", funcionario[i].matri); printf("\n O nome do funcionario e: %s",funcionario[i].nome); printf("\n O sexo do funcionario e: %c",funcionario[i].sexo); printf("\n A idade do funcionario e: %d",funcionario[i].idade); printf("\nDeseja exluir? 0-nao,1-sim)"); scanf("%d",&resposta[B])[/B]; if(resposta=1){ for ( y = i; y < fim; y++ ){ funcionario[y].matri=funcionario[y+1].matri; strcpy (funcionario[y].nome,funcionario[y+1].nome); funcionario[y].sexo=funcionario[y+1].sexo; funcionario[y].idade=funcionario[y+1].idade; } funcionario[y].matri=0; strcpy (funcionario[y].nome,""); funcionario[y].sexo=0; funcionario[y].idade=0; fim--; } system("cls"); }
  5. To com preguiça de fazer o código, mas vai a ideia geral. Pelo que entendi você quer imprimir uma string na tela alinhada à esquerda, centralizada ou à direita, isso? a esquerda: simples, imprime a string e acabou a direita: "número de espaços" = "tamanho da tela"(80) - "tamanho da string" centralizado: aí complica. "número de espaços" = "tamanho da tela"/2(40) - "tamanho da string"/2. O que complica o cálculo são os números ímpares: você tem que definir se o caractere impar vai fica desequilibrado para a esquerda ou direita e ajustar o cálculo para isso.
  6. barutaji

    Ponteiros

    bom, em primeiro lugar você criou uma estrutura que nunca mais é usada inicio=(ponteiro*)malloc(sizeof(ponteiro));//ARMAZENANDO O ESPAÇO NA MEMÓRIA DO TAMANHO DO PONTEIRO inicio = NULL ; //Ponteiro aponta para o vazio segundo, vamos iteração por iteração: -inicio = null ##primeira iteração -1ºcriado, lista=1º -lista(1º).prox=inicio : lista(1º).prox=null -inicio=lista : inicio=1º ##segunda iteração -2º criado, lista=2º -lista(2º).prox=inicio : lista(2º).prox=1º -inicio=lista : inicio=2º ##n-ésima iteração -nº criado, lista=nº -lista(nº).prox=inicio : lista(nº).prox=(n-1)º -inicio=lista : inicio=nº em outras palavras, você está construindo a lista ao contrário mesmo, quando for ler ele vai de trás para frente. Só muda isso: inicio=(ponteiro*)malloc(sizeof(ponteiro)); atual=inicio; atual->ant=null; do{ //lê os dados if(valorlido=-1) break; prox=(ponteiro*)malloc(sizeof(ponteiro)); atual->prox=prox; prox->ant=atual; atual=prox; }while(1); atual->prox=null; inicio não pode ser alterado nunca, ele marca o primeiro valor, que não muda.
  7. Você não inicializou f.fim, assim, quando você digita (em inserir()) f.elemento[f.fim] = p; f.fim será igual ao valor que já estava na mémória (que geralmente é alto), ou seja, é como se estivesse digitando: f.elemento[125] = p; e acessando uma região inválida da memória e dando erro de segmentation fault, um erro fatal que encerra o programa. Na realidade não entendi pra que servem ini e fim. Os dados podem estar em qualquer lugar da matriz ou estarão do 0 até (nElem-1)? Se for o segundo caso os dois primeiros números são inúteis. Pra esse exercício é melhor usar "filas" mesmo, um tipo específico de estrutura de dados, no qual um elemento tem um ponteiro apontando para o próximo e para o anterior. struct Pedido{ Pedido *ant, prox; int codigo, quant;}; Aí você só controla qual é o primeiro e o último e pronto, tem uma fila potencialmente infinita e pode colocar e tirar elementos sem se preocupar com posição. Além disso, pra "atender" o pedido é só fazer: pedidoatual.ant->prox = VALORQUEINDICAQUEÉULTIMO; pedidoatual.ant = &ultimopedidoatendido;
  8. Ok, observcando melhor seu código achei o erro. Não está na passagem para a função, mas sim na criação da array. matriz = new string*[10]; Desse jeito você criou uma matriz de ponteiros que apontam para o vácuo, e quando tenta acessar o vácuo dá erro. depois dessa linha precisa acrescentar um laço e alocar a memória inteira: matriz = new string*[10]; for(int i=0; i<#tamanhomatriz#; i++) matriz[i]= new string[#tamanho#]; Pronto, agora está apontando para uma área válida. Altera e testa aí.
  9. Vê se tem algo de util aí: http://www.invasao.com.br/2008/07/13/tutorial-de-winsocket-em-c-parte-i/ http://www.invasao.com.br/2008/07/13/tutorial-de-winsocket-em-c-parte-ii/ http://forum.clubedohardware.com.br/cliente-servidor-ftp/331826 Não tenho interesse direto nesse assunto, então não li detalhadamente, mas tem a ver com o assunto, mesmo que não seja a resposta "definitiva" vai ajudar a entender o funcionamento em C.
  10. Usa sempre o fórum. Sua dúvida pode (e será) a de outros também, além do que várias pessoas vão ler a pergunta e complementar um pouco mais a resposta.
  11. Segmentation fault significa que em algum lugar do programa você está acessando uma região da memória que não devia. Ou excedeu o limite de alguma matriz, ou acessou uma matriz dinâmica antes de alocar, ou simplesmente levou um ponteiro para um lugar qualquer que não devia. Não verifiquei o código inteiro para saber onde estaria, mas se você rodar em modo debug vai saber onde exatamente está o acesso indevido.
  12. -Dá pra juntar o primeiro e segundo for. Você pega o valor, grava na 1ª matriz e já copia na segunda, não tem porque fazer duas vezes esse caminho. -Não entendi porque 2 contadores (i e h) dá pra se virar com 1 só. No primeiro é só usar i+1 ao invés de h, e no 3º o i não foi usado. -312 funciona direitinho, o problema são outros números em que exista mais e 1 inversão, como 231 (resultado:213). Motivo: o método bolha funciona por várias repetições, não apenas 1, por isso precisa de 2 laços for aninhados. Se a matriz tem 3 elementos, será necessário passar 3 vezes por todos os elementos para ordenar qualquer tipo de sequencia. (Na realidade 2 com o algoritmo otimizado, mas com 3 tá ótimo.) #include <stdio.h> #include <stdlib.h> int main() { int i,h,aux; int vet[20],vetor[20]; for(i=0;i<3;i++){ /* lê os números */ printf(" Digite o %do numero:\t",i+1); scanf("\n%d",&vet[i]); vetor[i]=vet[i]; } for(i=0;i<3;i++){ for(h=0; h+1<3; h++){ if(vet[h]>vet[h+1]){ aux=vet[h+1]; vet[h+1]=vet[h]; vet[h]=aux; } } } for(h=0;h<3;h++){ printf("%d",vet[h]); } system("PAUSE"); return 0; } Laço otimizado: for(i=0;i<2;i++){ for(h=0; h+1+i < 3; h++){ if(vet[h]>vet[h+1]){ aux=vet[h+1]; vet[h+1]=vet[h]; vet[h]=aux; } } } Nessa escala não faz diferença nenhuma, talvez até atrapalhe, mas em uma matriz de 100 elementos você vai passar 99 vezes e a cada passada você verifica 1 elemento a menos (100, 99, 98, 97, 96, etc...), pois você já sabe que o "fundo" da matriz contém sempre os maiores elementos.
  13. ah é que dá pra definir o tamanho de uma matriz baseado no valor de uma variável em tempo real...? e pior que funcionou mesmo. Isso é novidade pra mim. Do jeito como você fez não precisa ser ponteiro, a declaração pode ser também void alteraVetor(int v[],int tamanho), mas no final das contas é a mesma coisa com notação diferente, só começa a existir uma diferença real entre as duas notações com matrizes com 2 dimensões ou mais (** é totalmente diferente de [][], mas * é muito similar a []). Você precisa passar o endereço (ou o ponteiro, dependendo da notação) porque não vale a pena ficar copiando vários valores de dentro de uma array só para executar uma função, você passa o endereço e faz as operações já na matriz original. Não tem como passar uma cópia dos valores de arrays em c ou c++.
  14. Se alguem tiver, ou souber onde conseguir, ajuda aí, que o google realmente não ajudou muito.
  15. barutaji

    Exercicio em c.

    -Você faz infinitamente valor=base*base. Isso sempre será base². Ao invés disso faça valor=valor*base ou valor*=base. Não esqueça de inicializar valor=1 para o resto do cálculo dar certo. -colocando printf() dentro do laço você vai repetí-lo a cada iteração, o que não é o que você quer. tire o printf() para logo depois de } -break significa: interrompa o laço imediatamente e continue a excecução depois do }. Serve para casos em que existem duas lógicas controlando o laço: a "mestre" que vai avançando valor a valor e a "exceção", que, se acontecer, interrompe o laço na hora. Por esse motivo o break vem dentro de um if() (por questão de lógica): while(condição){ comandos if(aconteceu exceção) break;} O outro devio de execução é o "continue" que pula os comandos que vem em seguida e avança direto para a condição (pula 1 iteração); while(condição){ if(aconteceu exceção) continue; comandos} no caso de for(1º;2º;3º) ele pula para o 3º e depois vai para o 2º e continua a execução (ou interrompe de vez, dependendo do resultado do 2º).

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

×
×
  • Criar novo...