
Flávio Pedroza
Membro Pleno-
Posts
2.145 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que Flávio Pedroza postou
-
C Impressão parcial de String
Flávio Pedroza respondeu ao tópico de Danilo Madruga Ferri em C/C#/C++
você usa "strncpy" para copiar parte do string para outro e imprime. Por exemplo: #include <iostream> #include <string.h> int main() { int i = 2; //quais letras vou pular no começo int n = 4; //quantas letras vou copiar char str1[]= "DANILO"; char str2[7]; //7 pois são seis letras + o 0, que marca o fim do string strncpy (str2, str1+i, n); //pulei as duas primeiras letras e vou copiar quatro -> NILO str2[n] = '\0'; //marca o fim do string printf ("%s\n", str2); //imprime NILO } O exemplo só imprime um, mas você pode fazer um laço para variar "i" e "n" e terá o resultado que quer, desde de o "'O" até a palavra completa. Alternativamente, você pode usar printf desta maneira: printf ("%.*s\n", n, str1+i); -
scanf ("%s",&clientes[i].nome); Acredito que o certo seria, em termos do padrão: scanf ("%s",clientes[i].nome); você poderia desenvolver um programa para fazer o inverso, ao invés de salvar, ler os dados armazenados em um arquivo e transferi-los para um array na memória (ex. clientes). Após ler os dados do arquivos, você deve solicitar ao usuário o nome a ser pesquisado e depois varrer todos os endereços armazenados comparando os nomes. Veja o exemplo abaixo (não testei, pode ter alguns erro sintaxe/lógica): #include <string.h> struct dados clientes[10]; ... //ler arquivo .txt e amarzenar dados no array clientes ... //pesquisa do { char cliente[40]; printf ("Entre o nome do cliente para pesquisar:"); scanf ("%s", cliente); for (int i = 0; i < 10; i++) { if !strcmp(cliente, clientes[i].nome) { printf ("Telefone: %d", clientes[i].telefone); break; } } } while (strlen(cliente) > 0); O programa para quando você digitar um nome em branco.
-
N é o a quantidade de pontos. No seu caso, você fixou como 2 (TAM). Σxy (somatório do produto) não é a mesa coisa que Σx*Σy (produto do somatório), assim como Σx2 (soma dos quadrados) não é igual a (Σx)2 (quadrado da soma). Vai precisar criar mais variáveis auxiliares. Alem disso o problema pede que você leia uma série de coordenadas x e y. Acho que você deveria primeiro ler o valor de N e depois criar dois vetores x e y: int n=0, i; printf("Digite um valor N \n"); scanf("%d",&n); float x[n],y[n]; //Leitura de x e y printf("Digite valores das cordenadas x e y: \n"); for(i=0; i<n; i++){ scanf("%d %d",&x[i], &y[i]); } A partir desse array de coordenadas x e y você calcula a e b . Ex.: float somax = 0, somay = 0; somaxy = 0; somax2 =0; for (int i = 0; i< n; i++) { somax+=x[i]; somay+=y[i]; somaxy = x[i]*y[i]; somax2 = x[i]*x[i]; } Veja se consegue implementa o resto.
-
Testei e funcionou pra mim. De todo modo, uma sugestão para otimizar um pouco e imprimir apenas no final, a formula converge muito lentamente. Também removi algumas multiplicações: #include <stdio.h> #include<math.h> int main() { double pi = 0; int i = 0; int k = 4; while(pi != 3.1415926535) { pi += (k)/(2.0*i+1); // printf("%.10lf\n",pi); // remover para ir mais rápido i++; k = -k; } printf("%.10lf\n",pi); return 0; }
-
C# Mais de uma condição para o loop while em C#
Flávio Pedroza respondeu ao tópico de Karen T. Zambrano em C/C#/C++
Tenta assim while ((Math.Abs(somah1)>0.001) || (Math.Abs(somah2) > 0.001) || (Math.Abs(somah3) > 0.001)) { //Bloco de código } -
C Não consigo resolver esta questão de Estrutura de Dados!
Flávio Pedroza respondeu ao tópico de JonathanMB em C/C#/C++
Vou botar um exemplo aqui e espero que ajude: Ex. 12.456 s divida 12.456 por 60 e ache o quociente inteiro e o resto (quociente 207 e resto 36) - este resto será o segundos. (TIME.segundos) divida 207 por 60 e novamente ache o quociente inteiro e o resto (quociente 3 resto 27) - este resto serão os minutos (TIME.minutos); as horas serão o quociente 3 (TIME.horas); 3h:27m:36s. Use "fmod" para determinar o resto de números com ponto flutuante. Para a função addTime você pode converter de TIME em segundos, somar, e depois converter novamente de segundos para TIME. Veja se consegue implementar o código. -
Se "provMnot=j;" então ele vai de 0 a 2, e não de 1 a 3, não é mesmo? for(j=0;j<col;j++){ if(provNot[i][j]<menor[i]){ menor[i]=provNot[i][j]; provMnot=j; // j vai de 0 a no máixmo 2 } } if(provMnot==0){ p1=p1+1; } if(provMnot==1){ p2=p2+1; } if (provMnot==2){ p3=p3+1; } Veja se assim funciona
-
C Programa que imprima todos os números pares de 0 até N.
Flávio Pedroza respondeu ao tópico de IsaTheKid em C/C#/C++
Tire o ";" depois do "for (...". O incremento (passo) também estava errado, o certo é "n=+2". Não precisa disso "if(i %2 == 0)", pois o i não necessariamente deve ser par. A condição de parada e "n<=i", ou seja, executa o for enquanto n for menor ou igual a i. A variável "n" pode ser local. int par(int i) { int n; for(n=0; n <= i; n=+2) printf("Numeros pares: %d", n); } -
C Escrever programa em C para “automatizar” o jogo
Flávio Pedroza respondeu ao tópico de DarkSkull10 em C/C#/C++
Para mostrar as posições da letra: char letra; do { scanf("%c",&letra); } while ((letra != 'G') && (letra != 'R') && (letra != 'B')); for (int i = 0; i < 9; i++) if (Sequencia[i]==letra) printf("%d ",i+1); -
C Alocação dinâmica para não desperdiçar memória
Flávio Pedroza respondeu ao tópico de MartiniM em C/C#/C++
O que você procura é o realloc, mas recomendo ao invés de incrementar o tamanho de um em um, faça em etapas, de dez em dez. E no final você usa realloc mais uma vez para reduzir o tamanho para a quantidade exata que o usuário digitou. Edit: não esqueça de chamar free no final. -
C# UPDATE - Alterar registro no banco de dados
Flávio Pedroza respondeu ao tópico de Ana Clara Kettl em C/C#/C++
Pede pra mostrar também a variável sqlUpdate no catch, pois pode ter algum erro na sintaxe do comando. -
O único erro que percebo é que você lê apenas 4 vezes as entradas, enquanto o problema diz " a entrada só termina quando não houveram mais números". Outra coisa é que tem que limitar o valor, "Todos os inteiros serão menores que 1.000.000 e maiores que 0.". Disto isto: while (1) { scanf("%d %d", &i, &j); if ((i < 1) || (j < 1) || (i > 1000000) || (j > 1000000)) break; if(i >= j){ maior = i; menor = j; } else { maior = j; menor = i; } ... Pode ser também o fato de que, enquanto no seu código a saída é fornecida a medida que o usuário entra com os dados, o problema exigir que forneça as primeiro todas entradas e somente depois calcule e imprima os resultados, mas não acho eu ficou claro se tem que ser assim mesmo.
-
C Falha de Segmentação utilizando ponteiro de struct
Flávio Pedroza respondeu ao tópico de MalThas em C/C#/C++
Entendi agora, sua função CHEIO estava em um loop infinito. Testa assim agora: int Cheio(Principal *Estrutura, int i){ int temp = 0; for (int j=0; j< Estrutura[i].Prox -> Sizes; j++){ if(Estrutura[i].Prox -> N[j] != 0){ temp++; } } if(temp == Estrutura[i].Prox -> Sizes){ return 1; }else{ return 0; } } -
C Falha de Segmentação utilizando ponteiro de struct
Flávio Pedroza respondeu ao tópico de MalThas em C/C#/C++
Sim, isso mesmo. Testei neste compilador online https://www.onlinegdb.com/online_c++_compiler, com as alterações que propus, e acredito que funcionou: -------------------------- Digite a opção desejada 0 - Sair 1 - Inserir Elemento 2 - Listar 3 - Listar Ordenadamente cada estrutura auxiliar 4 - Listar Ordenadamente todos os numeros 5 - Excluir um elemento 6 - Aumentar tamanho da Estrutura Auxiliar 1 Digite a posicao na qual deseja inserir o elemento: 0 Nao existe uma estrutura auxiliar. Insira o tamanho dela: 3 Digite o elemento a ser inserido: 1 Digite o elemento a ser inserido: 2 Digite o elemento a ser inserido: 3 -------------------------- Digite a opção desejada 0 - Sair 1 - Inserir Elemento 2 - Listar 3 - Listar Ordenadamente cada estrutura auxiliar 4 - Listar Ordenadamente todos os numeros 5 - Excluir um elemento 6 - Aumentar tamanho da Estrutura Auxiliar 6 Insira a posicao que deseja aumentar: 0 TAMANHO 3 Insira o novo numero de posições a ser adicionado na estrutura auxiliar: 2 TAMANHO 5 -------------------------- Digite a opção desejada 0 - Sair 1 - Inserir Elemento 2 - Listar 3 - Listar Ordenadamente cada estrutura auxiliar 4 - Listar Ordenadamente todos os numeros 5 - Excluir um elemento 6 - Aumentar tamanho da Estrutura Auxiliar 1 Digite a posicao na qual deseja inserir o elemento: 1 Nao existe uma estrutura auxiliar. Insira o tamanho dela: 2 Digite o elemento a ser inserido: 4 Digite o elemento a ser inserido: 5 -------------------------- Digite a opção desejada 0 - Sair 1 - Inserir Elemento 2 - Listar 3 - Listar Ordenadamente cada estrutura auxiliar 4 - Listar Ordenadamente todos os numeros 5 - Excluir um elemento 6 - Aumentar tamanho da Estrutura Auxiliar 2 -------------------------- Posicao 0 da estrutura Principal Elementos: 1, 2, 3, 0, 0, -------------------------- Posicao 1 da estrutura Principal Elementos: 4, 5, -------------------------- Posicao 2 da estrutura Principal Elementos: -------------------------- Posicao 3 da estrutura Principal Elementos: -------------------------- Posicao 4 da estrutura Principal Elementos: -------------------------- Posicao 5 da estrutura Principal Elementos: -------------------------- Posicao 6 da estrutura Principal Elementos: -------------------------- Posicao 7 da estrutura Principal Elementos: -------------------------- Posicao 8 da estrutura Principal Elementos: -------------------------- Posicao 9 da estrutura Principal Elementos: -------------------------- Digite a opção desejada 0 - Sair 1 - Inserir Elemento 2 - Listar 3 - Listar Ordenadamente cada estrutura auxiliar 4 - Listar Ordenadamente todos os numeros 5 - Excluir um elemento 6 - Aumentar tamanho da Estrutura Auxiliar 6 Insira a posicao que deseja aumentar: 1 TAMANHO 2 Insira o novo numero de posições a ser adicionado na estrutura auxiliar: 5 TAMANHO 7 -------------------------- Digite a opção desejada 0 - Sair 1 - Inserir Elemento 2 - Listar 3 - Listar Ordenadamente cada estrutura auxiliar 4 - Listar Ordenadamente todos os numeros 5 - Excluir um elemento 6 - Aumentar tamanho da Estrutura Auxiliar 2 -------------------------- Posicao 0 da estrutura Principal Elementos: 1, 2, 3, 0, 0, -------------------------- Posicao 1 da estrutura Principal Elementos: 4, 5, 0, 0, 0, 0, 135041, -------------------------- Posicao 2 da estrutura Principal Elementos: -------------------------- Posicao 3 da estrutura Principal Elementos: -------------------------- Posicao 4 da estrutura Principal Elementos: -------------------------- Posicao 5 da estrutura Principal Elementos: -------------------------- Posicao 6 da estrutura Principal Elementos: -------------------------- Posicao 7 da estrutura Principal Elementos: -------------------------- Posicao 8 da estrutura Principal Elementos: -------------------------- Posicao 9 da estrutura Principal Elementos: -------------------------- Digite a opção desejada 0 - Sair 1 - Inserir Elemento 2 - Listar 3 - Listar Ordenadamente cada estrutura auxiliar 4 - Listar Ordenadamente todos os numeros 5 - Excluir um elemento 6 - Aumentar tamanho da Estrutura Auxiliar -
C++ Indicação de livros sobre a linguagem c e c++.
Flávio Pedroza respondeu ao tópico de Alberto_Santos em C/C#/C++
Procura pelos autores Bjarne Stroustrup (The C++ Programming Language) e Dennis Ritchie (The C Programming Language). Não conheço pessoalmente, mas falam muito bem pois os autores são também os que desenvolveram as linguagens. Não sei se tem em português. -
Tenta assim então: void insere(int *vetor){ if (topo > 4){ printf("Pilha cheia/n"); }else{ printf("Digite o valor que quer incluir: "); scanf("%d", &pilha[topo]); topo++; } }
-
C Falha de Segmentação utilizando ponteiro de struct
Flávio Pedroza respondeu ao tópico de MalThas em C/C#/C++
Na função "Aumentar" insira um "return" na posição indicada abaixo. Também a função não tem necessidade de se usar um "while" para aumentar a estrutura, basta realocar a memória uma única vez. Acredito que agora irá funcionar: void Aumentar(Principal *Estrutura){ int NewSize = 0; int i = 0; int temp = 1; printf("\nInsira a posicao que deseja aumentar: "); scanf("%d", &i); if(Inexistente(Estrutura, i) == 1){ printf("\nEstrutura Auxiliar Inexistente!\n"); return; //insira essa linha, pois se a estrutura não existe não tem sentido em continuar o restdo do código } printf("TAMANHO %d\n",Estrutura[i].Prox -> Sizes ); printf("\nInsira o novo numero de posições a ser adicionado na estrutura auxiliar: "); scanf("%d", &NewSize); Estrutura[i].Prox -> Sizes+= NewSize; Estrutura[i].Prox -> N = (int *)realloc(Estrutura[i].Prox -> N, Estrutura[i].Prox -> Sizes * sizeof(int)); printf("TAMANHO %d\n",Estrutura[i].Prox -> Sizes ); } Por fim, você tem que liberar a memória alocada no final, pois o "c" não faz isso automaticamente. você faz isso com "free". -
Não confunda goto com gotoxy. adicionado 22 minutos depois Veja se assim funciona: int main() { Menu(); int a, d = 0; do { a = getch(); // Inicio do Cursor if (a == direita) {//Move o cursor para a esquerda d++; if (d > 3) { d = 0; } if (d == 0) { gotoxy(40, 9); } if (d == 1) { gotoxy(50, 9); } if (d == 2) { gotoxy(58, 9); } if (d == 3) { gotoxy(67, 9); } } if (a == esquerda) { // Move o cursor para a esquerda d--; if (d < 0) d = 3; if (d == 1) { gotoxy(50, 9); } if (d == 2) { gotoxy(58, 9); } if (d == 3) { gotoxy(67, 9); } if (d == 0) { gotoxy(67, 9); } } } while (a != 27); return 0; } P.S. se possível, user switch//case aos invés desses vários "if"
-
C++ Indicação de livros sobre a linguagem c e c++.
Flávio Pedroza respondeu ao tópico de Alberto_Santos em C/C#/C++
Procura pelo autor Harvey Deitel -
Delphi Problema com reprodução de som no programa Lazarus
Flávio Pedroza respondeu ao tópico de winzero em Programação - outros
Acho que esse condicional está errado, já que são strings. label1.caption > Edit1.Text Label1 tem a hora atual, correto? E Edit1, você entra com o quê? Uma hora também? Se for comparar os valores, tem que converte de string para algum formato que seja possível comparar, como um inteiro. -
Pelo que entendi, se você já preestabelece uma matriz fixa no programa, o resultado sempre será o mesmo.
-
C Insertion Sort(ordenação) erro na função ?
Flávio Pedroza respondeu ao tópico de NivaldoReis em C/C#/C++
Seu programa estava fazendo as coisas na ordem errada. Por exemplo, você invocou o "malloc" antes do usuário entrar com o "n". Outra coisa é que primeiro deve ser fornecidos os valores do array e somente depois ordená-lo. Também havia alguns erros de sintaxe. Acredito que assim vai funcionar: #include <stdio.h> #include <stdlib.h> void insertion_sort(int *A, int n) { int i,j,chave; for(i=1; i<n; i++) { chave=A[i]; j=i-1; while(j>=0 && A[j]>chave) { A[j+1]=A[j]; j= j-1; } A[j+1]= chave; } } int main() { int i,n; int *A; printf("Digite quantas posições:\n"); scanf("%d",&n); A = (int *)malloc(n *sizeof(int)); printf("Digite os numeros:\n"); for(i=0; i<n; i++) scanf("%d",&A[i]); insertion_sort(A,n); for(i=0; i<n; i++) { printf("{%d}",A[i]); } return 0; } -
void insere(int *vetor){ if (topo == 5){ printf("Pilha cheia/n"); }else{ printf("Digite o valor que quer incluir: "); scanf("%d", &pilha[topo]); topo++; } } void imprimir(int *vetor){ int i; if (topo == 0){ printf("Pilha vazia, não há o que imprimir\n"); }else{ for(i = 0; i < topo; i ++){ printf("Pilha[%d]: %d\n", i, pilha[i]); } } } Acredito que assim irá funcionar
-
C Falha de Segmentação utilizando ponteiro de struct
Flávio Pedroza respondeu ao tópico de MalThas em C/C#/C++
Isso é um pouco mais complicado, pois o tamanho do array N vai variar. Eu sugiro a seguinte solução: armazenar o tamanho que o usuário entra. Altere a estrutura Aux para acrescentar a variável tamanho: typedef struct Aux{ int *N; unsigned int tamanho; }Aux if(Inexistente(Estrutura, i) == 1){ printf("Nao existe uma estrutura auxiliar. Insira o tamanho dela: "); scanf("%d", &Tamanho); Estrutura[i].Prox = (Aux *)malloc(sizeof(Aux)); Estrutura[i].Prox->tamanho = Tamanho;// insira essa linha para salvar o tamanho Estrutura[i].Prox -> N = (int *)malloc(Tamanho * sizeof(int)); } Para imprimir: void Imprimir(Principal *Estrutura){ int i = 0; int j = 0; while(i<TAM){ printf("\n--------------------------\n"); printf("Posicao %d da estrutura Principal\n", i); printf("Elementos: "); if (Estrutura[i].Prox != NULL){ for (j = 0; j < Estrutura[i].Prox->tamanho; j++) { printf("%d, ", Estrutura[i].Prox -> N[j]); } } i++; } } Veja se funcionar (pode ter algum erro de sintaxe, pois não pude testar); -
C# Desconto sobre tamanho de roupas.
Flávio Pedroza respondeu ao tópico de Dalbert Popenda Mallmann em C/C#/C++
Alterei seu código para permitir a entrada de mais de um letra (ex.: GG). você dev trabalha com strings e usar a função strcmp para comparar os valores. Ela retornar zero se os strings são iguais. #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> using namespace std; int main(int argc, char *argv[]) { char tamanho[3]; float preco; float P; float M; float G; printf("insira o preço da sua camiseta. E aperte ENTER. \n""Depois insira o tamanho da camiseta. P, M ou G. \n"); scanf("%f\n", &preco); scanf("%s", &tamanho); P = preco - (preco * 0.3); M = preco - (preco * 0.2); G = preco - (preco * 0.1); if (!strcmp(tamanho, "P") || !strcmp(tamanho, "p")) { printf("O preço da camiseta será de: %f\n", +P); } else if (!strcmp(tamanho, "M") || !strcmp(tamanho,"m")) { printf("O preço da camiseta será de: %f\n", +M); } else if (!strcmp(tamanho,"G") || !strcmp(tamanho, "g")) { printf("O preço da camiseta será de: %f\n", +G); } else { printf("Não temos descono para esse tamanho.\n O preço da camiseta será de: %f", +preco); } system("pause"); return 0; } você pode adicionar um desconto para GG agora também: float GG; GG = preco - (preco * 0.05); else if (!strcmp(tamanho, "GG") || !strcmp(tamanho,"gg")) { printf("O preço da camiseta será de: %f\n", +GG); }
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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