Ir para conteúdo
Fórum Script Brasil

Ezequiel A. Ribeiro

Membros
  • Total de itens

    25
  • Registro em

  • Última visita

Tudo que Ezequiel A. Ribeiro postou

  1. dá um olhada nesse código http://programacaoobjetiva.blogspot.com.br...s-em-disco.html
  2. Não sei qual a melhor maneira de se fazer isso, mas sei que nos sistemas operacionais dá para redirecionar a saida. Por exemplo, se você digitar somente dir no prompt as informações serão impressas na tela, mas se você digitar: dir > C:\arquivoqualquer.txt No seu caso ficaria no algoritmo: system("wmic logicaldisk get name > C:\arquivoqualquer.txt "); As informações serão gravadas no arquivo. Fazendo isso você pode abri esse arquivo e ler seu conteúdo o que é fácil. É só dar uma pesquisadinha na net de como fazer para gravar e ler arquivos em C.....não tem erro.
  3. no windows seven sei que se digitar : wmic logicaldisk get name no prompt do DOS ele irá listar todos os hds... então seu algoritmo teria que fazer um: system("wmic logicaldisk get name");
  4. perfeito a solução %c e %s tem uma diferença crucial.
  5. O seu código está um tanto quanto confuso. Pelo que entendi você criou uma matrix de char de nxn dimensões e você quer inserir nela um k de inteiro ? Isso vai dar problemas ela só receberá strings. Ponteiros não guardam valores, eles apenas apontam para endereços de outras variáveis. int a = 5; int *b = &a; // b está sendo instruído a apontar para o endereço de 'a', o sinal de '&' antes do 'a' fornece o endereço da variável e não seu conteúdo, no caso o 5. printf("%x",b); mostrará o endereço que 'a' ocupa na memória e que 'b' está apontando. printf(%d",*b); mostrará o valor que o endereço que 'b' aponta contém, no nosso caso o número 5; se fizer b = 10 vai dar erro porque b só pode receber um endereço de memória que no caso é fornecido por 'a' mas se fizer *b = 10 nesse caso tudo bem, você está dizendo que o endereço da variável que b aponta guardará o valor 10 se mandar imprimir 'a' , o valor impresso será 10 e não 5. Se você tem uma variável ponteiro que não aponta para nada, ou que depois de apontar e ser utilizada perderá sua função, você precisará fazer *b = NULL ou *B = 0 . Pronto seu ponteiro não correrá o risco de apontar para algo que não exista ou que exista mas não deveria apontar. Amigo essa é a magia da linguagem C/C++ você tem total liberdade de manipular suas variáveis. No entanto o perigo está em seu ponteiro apontar para algo que não existe, que possa ter sido deletado antes, o seu programa apresentará um grave erro. No seu algoritmo penso que seria algo do tipo : na main você criar 3 variáveis: int k, int nlin, int ncol; você faz uns printf e scanf para pegar o valor que deseja guardar e as posições na matrix. depois é só passar para função.... caso minha função fosse guardar(int matrix[2][2], int *nlin, int *ncol, int *k) na main a chamaria da seguinte forma guardar(matrix,&nlin,&ncol,&k) e na função seria matrix[*nlin][*ncol] = *k você pode fazer uma graça e criar vários ponteiros tipo: int a = 0; int *b = &a; int **c = &b; int ***d = &c; int ****e = &d; printf("%d",****e); ponteiros podem apontar para outros ponteiros ....uhallll...... quando o pessoal vê isso eles piram....quem programa em java somente, por exemplo, ao ver isso tem asia... hauahuahauh
  6. faz um "do" " while" é simples e vai satisfazer suas necessidades. por exemplo.. main(){ int continuar = 1; do{ coloque todo seu código aqui dentro aqui por último você faz uma pergunta tipo.... printf("Deseja continuar ? Sim = 1 e Não = 0"); scanf("%d",&continuar); enquanto não for digitado 0 o laço continua... }while(continuar != 0); }
  7. Amigo utilize o bloco if -> if else -> else Nesse site creio ter o que você precisa: http://intranet.deei.fct.ualg.pt/PI_flobo/pratica3-sol.html
  8. Meu amigo para gravar estruturas use o fwrite e o fread. A forma que você está usando para gravar é apenas para caracteres e não estruturas. O C não saberá localizar dentro do arquivo txt a sua estrutura gravada. Ao invés de gravar em um .txt você irá gravar em um .dat Vou tentar explicar.....quando você grava uma estrutura ele utiliza o tamanho da mesma para posiciona -la no arquivo corretamente para depois poder localizar -la. Para gravar estruturas o C irá verificar o tamanho delas através do comando sizeof(livro). Vamos supor que sizeof retornou o tamanho da sua estrutura como sendo 100. Então da posição 0 a 99 ele irá gravar o primeiro registro, da posição 100 a 199 o segundo e assim por diante. Para localizar o registro de número 1 o C irá faze irá fazer -lo através do tamanho do mesmo, nesse exemplo como a estrutura tem tamanho 100 do 0 ao 99 corresponderá o registro número 1. Tem esse exemplo aqui : http://programacaoobjetiva.blogspot.com.br...s-em-disco.html Dá uma olhada. Olhe um exemplo de gravação de estruturas. rewind(pont); fseek(pont,(pedido.pedidoNumero -1) * sizeof(pedido),SEEK_SET); fwrite(&pedido,sizeof(pedido),1,pont); Agora um exemplo de leitura: fseek(pont,(pedidoNumero -1) * sizeof(Pedido),SEEK_SET); fread(&pedidoLeitura,sizeof(pedidoLeitura),1,pont);
  9. Disponha...ainda estou gatinhando em C/C++ mais o pouquinho que sei tento passar adiante.
  10. Não sei te dizer absolutamente, mas pesquisa sobre Qt com relação a jogos. Sei que tem uma parte dessa IDE a QML que é voltada para aplicativos de modo geral para celulares inclusive jogos.
  11. Acho que é mais ou menos isso que você quer. #include<stdio.h> #include<stdlib.h> main() { char palavra[9]; char matrix_palavra[3][3]; int linha = 0; int coluna = 0; puts("Digite uma palavra:"); gets(palavra); for(;linha<9;linha++){ for(;coluna<9;coluna++){ matrix_palavra[linha][coluna] = palavra[linha]; break; } } linha = 0; coluna = 0; for(;linha<9;linha++){ for(;coluna<9;coluna++){ printf("%c\n",matrix_palavra[linha][coluna]); break; } } system("pause"); }
  12. Fiquei com a mesma dúvida. Se calhar é mais fácil fazer a arvore binária em JAVA ou até mesmo em Haskell! O problema do java é que ele dá tudo de mão beijada para o programador, de fato, para aprender realmente o C é melhor, pois força o programador a compreender a lógica do algoritmo.
  13. Amigo para criar a parte gráfica no C++ utilize a IDE QT Creator. Exemplo de calculadora : http://doc.trolltech.com/main-snapshot/scr...calculator.html
  14. O primeiro erro é você fazer duas declarações para seu array a[], uma global lá em cima da main e outra local no case 1. se você for usar a global não precisa passar por parâmetro as funções, pois o array será conhecido por todo seu código, o que não é bom e não recomendado. dá uma olhada : #include<stdio.h> #include<stdlib.h> #include<conio.h> #define TAM 100 void lerArray(int); void ordenaArray(int); int pesquisaArray(int,int); int a[TAM]; main() { int fim=0,opcao,tam,elemento,pesquisa,pos; int chave1=0; while(!fim) { system("cls"); printf("Programa de pesquisa binaria em arrays\n" "Escolha uma opcao:\n\n" "1. Ler array\n" "2. Pesquisar elemento no array\n" "3. Sair\n"); scanf("%d",&opcao); switch(opcao) { case 1: { printf("Qual o tamanho do array?\n"); scanf("%d",&tam); while(tam<1||tam>TAM) { system("cls"); printf("O array deve ter entre um e %d elementos.\n" "Quantos elementos havera no array?\n",TAM); scanf("%d",&tam); } lerArray(tam); ordenaArray(tam); chave1=1; } break; case 2: { if(chave1==1) { printf("Que elemento sera pesquisado?\n"); scanf("%d",&elemento); pesquisa = pesquisaArray(tam,elemento); } else printf("Leia um array antes!\n"); if(pesquisa==0){ printf("O elemento %d foi encontrado na posicao %d.\n",elemento); } else printf("O elemento não foi encontrado!\n"); } break; case 3: fim=1; break; default: printf("Digite 1, 2 ou 3!\n"); break; } getch(); } } void lerArray(int tam) { int i; printf("Digite os termos, separados por enter ou espaco:\n "); /*Impressão do pedido de entrada pelo teclado*/ for(i=0;i<tam;i++) /* lerArray usa um for para receber pelo teclado os valores do array, de entrada[0]*/ scanf("%d",&a[i]); /*até entrada[tam]*/ } void ordenaArray(int tam) { int passo,aux,cont; for (passo=1;passo<tam;passo++) { for(cont=0;cont<tam-passo;cont++) { if(a[cont]>a[cont+1]) { aux=a[cont]; a[cont]=a[cont+1]; a[cont+1]=aux; } } } } int pesquisaArray(int tam,int elemento) { int inf=0,sup=tam-1,meio = 0; for(int i = 0;i< tam;i++){printf("%d\n",a[i]);} while(inf <= sup ){ meio = inf + (sup-inf)/2; if(a[meio]==elemento) { return 0; } else if(a[meio]<elemento) sup = meio-1; else inf = meio +1; } return 1; }
  15. amigo dá uma olhada nesse blog http://programacaoobjetiva.blogspot.com.br...tshellsort.html esse algoritmo fiz na faculdade, ele contém vários métodos de pesquisa e classificação.
  16. Quando você cria um "char olhos[2]" você está criando um vetor de 3 posições, ou seja 0 , 1 e 2. Nunca esqueça do zero. se você fizer isso olhos = "abc" terá um erro pois no final de toda string é coloca um sinal de fim da mesma, então o que se vê "abc" na verdade é "abc/0" o vetor para conter nossa string "abc" tem que ser de 4 espaços e não 3, nunca esqueça desse sinal de fim de string quando for criar um vetor de string. O nosso vetor de 2 só cabe "ab" pois a posição 2 receberá o sinal de fim de string. olhos[3]= {'a','b','c'} é o mesmo que olhos[3] = "abc" na hora que você faz um "gets(vet.olhos)" e coloca a letra c por exemplo essa letra irá para posição 0. então para que você a localize terá que fazer o if assim : if (vet.olhos[0]=='c') o C não reclama se você fizer isso if (vet.olhos=="c"), porque "c" significa um conjunto de string, ou uma palavra, será feita uma comparação com todos os campos do vetor olhos[2], enquanto que (vet.olhos=='c') você está querendo localizar um campo especifico que contenha uma letra. Como você não especificou esse campo como em vet.olhos[0]=='c' ele dará erro. Da mesmo forma terá um erro se fizer vet.olhos[0]=="c", pois você quer localizar uma palavra inteira em uma posição apenas, que suporta apenas uma letra. O correto então seria vet.olhos=="c" , sem especificar uma posição. "forbids comparison between pointer" preste atenção na mensagem de erro, está falando que há um erro em se fazer comparação entre ponteiros, isso porque todo char na verdade é um vetor de ponteiros que apontam para caractere.
  17. resul = (divid - divis); esse trecho está errado. 7/2 é (divis - divid), ou seja 7 - 2 e não (divid - divis), ou seja 2 -7
  18. Amigo apesar de você já ter feito o código, resolvi de outra maneira usando recursão. #include<stdio.h> #include<stdlib.h> int divide(int divis, int divid){ return divis - divid; } main(){ int divisor = 0; int dividendo = 0; int resultado = 0; int i =0; do{ puts("Entre com o divisor"); scanf("%d",&divisor); puts ("Entre com o dividendo"); scanf("%d",&dividendo); resultado = divide(divisor,dividendo); i++; while(resultado >= dividendo){ i++; resultado = divide(resultado,dividendo); } printf("%d divido por %d = %d\n",divisor,dividendo,i); i=0; }while(divisor != 0); system("pause"); }
  19. A questão 6 é mais simples. /* Multiplicar sem usar o sinal de "*". 6 * 5 = 30 o mesmo que : 6+6+6+6+6 = 30 */ #include<stdio.h> #include<stdlib.h> main(){ int i = 0; int num1 = 0; int num2 = 0; int soma = 0; puts("entre com o numero 1:"); scanf("%d",&num1); puts("entre com o numero 2:"); scanf("%d",&num2); while(i != num2){ soma += num1; i++; } printf("%d X %d = %d\n",num1,num2,soma); system("pause"); }
  20. voce tem uma matrix 1000x1000 mil palavras de mil caracteres.
  21. No exercício 5 use o MOD.... Todo número que tiver MOD zero é divisil. Por exemplo vamos supor o número 40. 40 MOD 5 = 0 40 MOD 3 = 1 Então 40 só é divisível por 5. Você vai ter que fazer algo do tipo: #include<stdlib.h> #include<stdio.h> main(){ int numero = 0; int soma = 0; int i = 3; int d = 0; while(i < 135){ if ((i % 5) == 0 && (i % 3) != 0){ soma += i; printf("numeros divisivel por 5 e não por 3 = %d\n",i); d++; } i++; } printf("soma %d",soma); printf("media %d",soma / d); getchar(); } Faça um teste com o código e veja se está correto.
  22. Assim também dá certo : # include <stdio.h> # include <conio.h> main(){ int i = 0,j = 0,k = 0; do{ j = i%2; if(j != 0) { k += i; } i++; }while(i<=20); printf("Somatorio dos dez primeiros impares: %d",k); getch(); }
  23. #include<iostream> #include<math.h> using namespace std; typedef struct produto { int codigo; char descricao[20]; int quantidade; int fornecedor; float precoCusto; float precoVenda; } Produto; typedef struct lista { Produto *ponteiro; lista *proximo; } Lista; struct lista inserirProdutoNaLista(Produto *p1, Lista *l1) { Lista *auxLista = new Lista; *auxLista = *l1; cout<<p1->codigo; if(auxLista == NULL) { auxLista->ponteiro = p1; auxLista->proximo = NULL; } else { cout<<"teste3"<<endl; auxLista->ponteiro = p1; auxLista->proximo = l1; cout<<"teste4"<<endl; } *l1 = *auxLista; return *l1; } void busca(Lista *l1, int cod) { Lista *auxLista = new Lista; *auxLista = *l1; Produto *auxProduto; *auxProduto = *(auxLista->ponteiro); cout<<"teste5"<<endl; //while (auxLista != NULL || auxProduto->codigo != cod) { cout<<"teste6"<<endl; *auxLista = *(auxLista->proximo); *auxProduto = *(auxLista->ponteiro); cout<<"teste8"<<endl; if(auxLista == NULL) { cout<<"Elemento não encontrado!\n"; } else { if(auxProduto->codigo == cod) { cout<<"teste7"<<endl; cout<< auxProduto->codigo << "\t" << auxProduto->descricao << "\t" << auxProduto->quantidade << "\t" << auxProduto->fornecedor << "\t" << auxProduto->precoCusto << "\t" << auxProduto->precoVenda; cout<<"\n"; } } } } int main() { Lista *l1 = new Lista [7]; Produto *auxProduto = new Produto; Lista *auxLista = new Lista; int hash,opcao,codigo; do { //Limpando a tela system("cls"); //Imprimindo o menu printf("Escolha um opcao: \n"); printf(" 1 - Inserir um produto.\n"); printf(" 2 - Buscar um produto pelo codigo.\n"); printf(" 3 - Sair do Programa.\n"); //usuario escolhe a opcao printf("\nOpcao: "); scanf("%d", &opcao); //verifica a opcao selecionada switch(opcao) { case 1: cout<< "\nDigite o codigo do produto: "; cin>>auxProduto->codigo; cout<< "Digite o descricao do produto: "; cin>>auxProduto->descricao; cout<< "Digite o quantidade de produtos: "; cin>>auxProduto->quantidade; cout<< "Digite o fornecedor do produto: "; cin>>auxProduto->fornecedor; cout<< "Digite o preço de custo do produto: "; cin>>auxProduto->precoCusto; cout<< "Digite o preço de venda do produto: "; cin>>auxProduto->precoVenda; hash = auxProduto->codigo % 7; cout<<"teste0"<<endl; *auxLista = l1[hash]; // cout<<"teste1"<<endl; l1[hash] = inserirProdutoNaLista(auxProduto,auxLista); cout<<"teste2"<<endl; break; cout<<"teste2"<<endl; case 2: cout<<"Digite o codigo que deseja procurar: "; cin>>codigo; hash = codigo % 7; *auxLista = l1[hash]; busca(auxLista,codigo); break; case 3: printf("\nFim do programa!!!\n"); break; default: printf("\nOpcao invalida!\n"); } cin.sync(); cin.get(); } while (opcao != 3); l1 = NULL; auxProduto = NULL; auxLista = NULL; delete l1; delete auxProduto; delete auxLista; } Amigo fiz algumas alterações e consegui cadastrar um produto e depois fazer a busca do mesmo. Existe algum problema com o while da busca. Parece -me que ele fica indefinidamente no loop. o problema após cadastrar o último item está nessa parte *auxLista = l1[hash], tirei o l1 = NULL e consegui fazer o cadastro.
  24. o seu return devolve um um ponteiro do tipo Arv, mas você está devolvendo uma chamada de função. Isso é permitido em C ?
  25. #include<stdio.h> #include<stdlib.h> #define MAX 3 int main(){ float P_C[MAX], P_V[MAX], lucro=0; int mercadoriamenor10=0,mercadoriamenor20=0,mercadoriamaior20=0; int x=0; for(x=0;x<MAX;x++){ printf("Informe O preço DE COMPRA\n"); scanf ("%f", &P_C[x]); printf("Informe O preço DE VENDA:\n"); scanf("%f",&P_V[x]); } for(x=0;x<MAX;x++){ lucro = 100*((P_V[x]-P_C[x])/P_C[x]); printf("lucro %f",lucro); if (lucro<10.0) { ++mercadoriamenor10; } else if(lucro>=10.0 && lucro<=20.0) { ++mercadoriamenor20; } else if (lucro>20.0) { ++mercadoriamaior20; } } printf ("Numero de mercadorias inferior a 10%% é %d\n",mercadoriamenor10); printf("Numero de mercadorias com lucro maior ou igual a 10%% e menor do que 20%%: %d\n", mercadoriamenor20); printf("Numero de mercadorias com lucro superior a 20%%: %d\n", mercadoriamaior20); system ("pause"); return 0; } Amigo fiz algumas alterações, primeiro fiz um for para coletar os dados e depois outro for para fazer uma pesquisa no array. Sei que existe formas melhores de se fazer esse algoritmo, mas todavia, está funcionando como pede o exercício. :) if (lucro<=1.10 && lucro<=1.2) Esse trecho do código está errado. Você está por exemplo querendo um número menor que 10 e menor que 20 !!! Estranho não. Números de 0.0 a 1.2 corresponderam ao que você escreveu, no entando não é oque você quer, na verdade a intenção é obter valores entre essa faixa 1.10 a 1.20. o correto é if(lucro >=1.10 && lucro <=1.20)
×
×
  • Criar Novo...