Ir ao conteúdo

isrnick

Membro Pleno
  • Posts

    1.558
  • Cadastrado em

  • Última visita

Tudo que isrnick postou

  1. Não, não tem. C e C++ definitivamente NÃO são a mesma linguagem! Sim, o C++ originou a partir da linguagem C, e por isso é possível usar muitas das funções e recursos do C no C++, entretanto o C++ se baseou na versão C89 (de 1989) da linguagem C, mas desde então cada uma dessas linguagens seguiu seu próprio caminho. O que implica que novas versões da linguagem C adicionaram recursos que não existem no C++, logo não é possível dizer que C++ é C com mais recursos. Isso é um engano que causa muitos problemas. Aqui no fórum vemos frequentemente códigos usando bibliotecas padrão do C no C++, sendo que existem bibliotecas próprias do C++ para a mesma função, ou então códigos em que, exceto pela inclusão de uma ou duas biblioteca do C++, foram escritos totalmente em C. Mas o problema surge lá na frente quando o programador finalmente tentar usar algum recurso do C que não existe no C++, e vai ficar quebrando a cabeça tentando entender o que está errado. Pelo menos no caso do C problemas podem ser evitados facilmente salvando o código em um arquivo com a extensão .c (e não .cpp), pois assim a IDE vai saber que o código é em C e deve ser compilado usando o compilador da linguagem C, logo não vai aceitar código usando recursos do C++. Já no lado oposto é mais complicado pois muitos dos recursos do C fazem parte do C++, então é necessário saber o que está usando e porque, mas em geral não se deve usar funções do C no C++, pois o C++ possui versões próprias e melhores para fazer a mesma coisa. Se você está usando algum curso/material de estudo que diz que C e C++ são a mesma coisa, e ensina os 2 como uma coisa só, procure outro curso/material de estudo! Por exemplo, um livro de introdução ao C++ não deve usar printf ou scanf, mas sim cout e cin! Nesse caso printf e scanf podem ser mencionados como opções extras e pouco usadas herdadas do C. Este código postado é procedural, não há nada de orientação a objetos. adicionado 2 minutos depois Faltou um d no "%lld" e um & antes do N. scanf("%lld", &N);
  2. Não. No C++ struct e class são basicamente a mesma coisa, exceto que na struct os membros são públicos por padrão, mas na class os membros são privados por padrão, em ambos os casos precisando ser indicado quais membros da estrutura não seguem especificação padrão. Então, no C++, tudo que é aceitável em uma class também é numa struct, ou seja pode ter membros públicos, privados e protegidos, ter funções membras, usar herança, e fazer atribuições como nesse caso. Mas já que struct e class fazem basicamente a mesma coisa no C++, é recomendado por convenção usar a struct apenas como uma estrutura de dados simples clássica do C (sem fazer atribuições, sem funções membro ou inclusão de membros privados), e class como estrutura de dados com todas as propriedades inerentes da Orientação a Objetos, isso para permitir compatibilidade de interface com bibliotecas programadas em C, pois nesse caso é especificado que a struct do C++ deverá se comportar de forma idêntica a uma struct do C.
  3. Não, não podemos, é contra as regras do fórum resolvermos completamente exercícios postados. Só podemos ajudar a resolver tirando dúvidas e indicando ou corrigindo erros na sua tentativa. Então você precisa postar sua tentativa e/ou postar suas dúvidas para que os usuários do fórum possam te ajudar.
  4. Supostamente o programa seria em C++ de acordo com o título do tópico e o fato do código incluir as bibliotecas <iostream> e <string> do C++, mas todo o resto do código está usando apenas recursos da linguagem C, não usa nenhum recurso próprio do C++. Se usasse o tipo a classe string da linguagem C++, ao invés de usar vetor de char no estilo da linguagem C, poderia comparar usando ==, e atribuir usando = . Mas se vai fazer o programa apenas com recursos do C, então faça o programa inteiro em C, ou seja não inclua bibliotecas do C++, e salve o código num arquivo com extensão .c (ao invés de .cpp), para que a IDE compile usando o compilador próprio da linguagem C.
  5. string em C é uma sequência de caracteres finalizada por uma caractere nulo '\0' que normalmente é armazenada em um vetor de caracteres. Veja abaixo um exemplo da string "CLEITON" sendo armazenada em vetor de caracteres de 10 posições: Nesse caso a string "CLEITON" tem 7 caracteres não nulos, além do caractere nulo '\0' que indica o fim da string, logo para armazenar essa string um vetor de caracteres precisa ter pelo menos 8 posições. Daí pode ver que, para armazenar uma string com N caracteres o comprimento do vetor de caracteres deve ser de no mínimo N + 1 posições, para poder armazenar todos os caracteres não nulos da string mais o caractere nulo '\0'. Várias funções da biblioteca string.h poderiam facilitar a resolução desse trabalho. strtok() pra separar cada palavra da frase. strcmp() para comparar palavras. strcpy() e strncpy() para copiar e para fazer os deslocamentos de frases e palavras. strlen() para obter o comprimento das palavras. E da biblioteca ctype.h use toupper() para converter os caracteres para letra maiúscula.
  6. #include <stdio.h> #include <stdlib.h> int main() { char gen, gmes; int id, sal, ms, idmaior, idmenor, nm, mes, idmes, cont; mes = cont = nm = ms = idmaior = idmenor = 0; while (id >= 0) { printf("\nEntre com a idade\n"); scanf(" %d", &id); printf("\nEntre com o genero M-F \n"); scanf(" %c", &gen); printf("\nEntre com o salario\n"); scanf(" %d", &sal); if (id < 0) printf("\nVoce saiu do programa\n"); else { ms = ms + sal; cont = cont + 1; if (idmaior == 0 && idmenor == 0) idmaior = idmenor = id; else if (id >= idmaior) idmaior = id; else if (id <= idmenor) idmenor = id; if (gen == 'f' && sal <= 1000) //O erro era aqui, estava atribuindo (=) a gen, mas deve comparar (==) nm = nm + 1; if (mes == 0) { mes = sal; idmes = id; gmes = gen; } else if (sal < mes) { mes = sal; idmes = id; gmes = gen; } } } ms = ms / cont; printf("\nA media do salario e %d\n", ms); printf("\nA maior idade e %d\n", idmaior); printf("\nA menor idade e %d\n", idmenor); printf(" \n %d mulheres possuem salario ate R$1000,00\n", nm); printf("\nA pessoa do menor salario e' do genero %c\n", gmes); printf("\nA pessoa do menor salario tem %d anos\n", idmes); getchar(); return 0; }
  7. Precisa usar vetores de caracteres e strings, se ainda não aprendeu não dá para fazer.
  8. No C++ tem a biblioteca <filesystem> a partir da versão C++17 da linguagem: https://en.cppreference.com/w/cpp/header/filesystem Fiz um programa exemplo: #include <iostream> #include <string> #include <fstream> #include <filesystem> namespace fs = std::filesystem; int main() { std::string data; fs::create_directories("sandbox/a/b"); //cria subdiretórios sandbox/a/b no diretório atual std::ofstream file1("sandbox/file1.txt"); //cria arquivo no diretório sandbox std::ofstream file2("sandbox/file2.txt"); //cria arquivo no diretório sandbox file1 << "123"; file2 << "ABC"; file1.close(); file2.close(); for(auto& p: fs::directory_iterator("sandbox")){ //itera nos arquivos e subdiretórios do sandbox std::cout << p << '\n'; if(fs::is_regular_file(p)){ //Se for um arquivo std::ifstream(p.path()) >> data; //lê o conteúdo do arquivo std::cout << data << "\n"; //imprime o conteúdo } std::cout << std::endl; } fs::remove_all("sandbox"); //deleta todos o diretório sandbox e seus arquivos e subdiretórios return 0; } Mas precisa usar um compilador recente que disponibilize os recursos da versão C++17 ou mais recente da linguagem C++, e compilar usando a flag para essas versões (-std=c++17, -std=gnu++17, -std=c++2a ou -std=gnu++2a). Na versão C++14 filesystem estava disponível como experimental (#include <experimental/filesystem>), e para versões antes disso seria necessário usar a biblioteca não padrão Boost.
  9. Só selecionei alguns pequenos trechos do código aqui do fórum, cliquei com o botão direito e mandei buscar o texto selecionado no google, apareceu resultados na terceiro trecho de código que marquei.
  10. Não. Baseado nas suas dúvidas percebi que não está entendendo muito do C, e fazendo buscas notei que seu código é basicamente o código deste post de 2008 de outro forum, modificado: https://forum.scriptbrasil.com.br/topic/127654-programa-em-c-venda/ Além de não ser simples de alterar um código feito por outra pessoa para algo que sirva para seu propósito, fazer o programa do zero criaria muito menos erros, e você aprenderia muito mais.
  11. Outro problema é que na struct limite foi definido como float (%f) mas o scanf está com o especificador de tipo de int (%d). Muda a pergunta para pedir o limite ao invés de um setor, e digite um número durante a execução do programa. Ou então teria que mudar o scanf para ler uma string para guardar o nome do setor.
  12. No printf a string pede pro usuário digitar o setor do produto, mas no scanf tenta ler um número inteiro para o limite... Então acaba que você está digitando uma palavra mas o scanf espera um número.
  13. Espaço antes do %s na string de especificadores, e getchar depois do scanf: scanf(" %s",name.nome); getchar(); scanf("%d",&limit.limite); getchar();
  14. nessa parte quer dizer que o alfabeto com as letras maiuscalas comeca com o numero 65, ne?! legal Sim, pra ver na tabela ASCII (http://www.asciitable.com/) basta checar a coluna de números decimais (dec) o número correspondente para o caractere. De fato o tipo char sempre guarda um número mesmo quando atribui um caractere, o que o compilador faz é guardar na variável o número correspondente ao caractere. Na hora de imprimir com especificador %c no printf() por exemplo, a função faz o contrário pega o número da variável char e imprime seu caractere correspondente da tabela de caracteres.
  15. O tipo char é um tipo inteiro, ou seja ele armazena números inteiros, e é o menor tipo inteiro disponível, especificamente com sinal pode guardar números de -128 até 127, e sem sinal de 0 até 255. Isso porque o tipo char tem 8 bits de comprimento, ou seja usa apenas 8 bits da memória do computador para armazenar números na forma binária, possibilitando armazenar apenas 256 números distintos. (O tipo int consegue armazenar números bem maiores, pois segundo a especificação da linguagem C, int deve ter no mínimo 16 bits, mas normalmente é implementado com 32 bits. https://en.wikipedia.org/wiki/C_data_types ) Quando armazenamos um caractere numa variável char o que é guardado de fato é um número inteiro correspondente a este caractere, então para cada caractere existe um número correspondente definidos por tabelas de caracteres. Existem muitas tabelas de caracteres que variam muito entre si, mas ao menos para os caracteres básicos do alfabeto maiúsculo (A a Z) e minúsculo (a a z), e dígitos numéricos (0 a 9), e outros, há um consenso na grande maioria das tabelas de usar a mesma numeração. Quando há necessidade de verificar os números correspondentes desses caracteres básicos a tabela ASCII é uma boa opção de consulta pois é uma tabela bem básica que lista a numeração destes caracteres. http://www.asciitable.com/ Então: char c = 'A'; //É o mesmo que: char c = 65; Note também que como caracteres na verdade são números você pode fazer operações matemáticas e/ou comparações entre eles. 'C' - 'A' // = 2 'B' > 'A' //verdadeiro '3' < '1' //falso
  16. Uma possibilidade (mas não está usando ponteiros como o enunciado pede): #include <math.h> #include <stdio.h> #include <stdlib.h> /*Dicas:Potência: pow(base, expoente)*/ //Protótipo das funções float f(float valor); int grau; float multi[7]; //Indice 0 a 6 int main() { int i, N; float a, b, h, integral = 0; //Receber o grau da função entre 2 a 6 printf("Informe o grau da funcao (2 a 6): "); scanf("%i", &grau); //Receber os multiplicadores. Dica: Armazenar os valores em um vetor. //aX^0 + bX^1 + cX^2 --->Indice do vetor igual ao expoente for (i = 0; i <= grau; i++) { printf("Informe o fator multiplicador de x^%i: ", i); scanf("%f", &multi[i]); } //Exibindo a função recebida printf("A funcao recebida foi: \n"); for (i = 0; i <= grau; i++) { printf("%gx^%i", multi[i], i); if (i < grau) printf(" + "); else printf(" = f(x)\n"); } //AQUI //-----------------------INICIO----------------------- //Implementar o Algoritmo da Regra dos Trapézios Repetida //Criar as variáveis necessárias //Utilizar ponteiros printf("digite o valor inicial 'a': "); scanf("%f", &a); printf("digite o valor inicial 'b': "); scanf("%f", &b); printf("digite o valor de N: "); scanf("%d", &N); h = (b-a)/N; for(i=0 ; i<N ; i++){ integral = integral + ((f(a+i*h) + f(a+(i+1)*h)) * h)/2.0; } printf("A integral: %f\n", integral); //------------------------FIM------------------------- getchar(); getchar(); return 0; } //Funcao que realiza o calculo em em determinado ponto float f(float valor) { int i; float resultado; resultado = 0; for (i = 0; i <= grau; i++) { resultado = resultado + multi[i] * pow(valor, i); } return resultado; } Não sei em que usaria ponteiros aí, só se for forçar o uso desnecessário criando um ponteiro e alocar memória com malloc.
  17. for (j = 0; j < 3; j++){ for (i = 2; i >= 0; i--){ printf("%d ", M[i][j]); } printf("\n"); }
  18. Você incluiu a biblioteca stdlib.h? malloc, calloc, free, etc pertencem a biblioteca stdlib.h logo deve incluí-la.
  19. Não está ignorando, o problema é que está imprimindo mais linhas do que número de linhas limite do prompt, então a partir de um ponto a cada nova linha impressa as linhas mais antigas vão sendo removidas. Uma solução simples é não criar uma nova linha para cada número e caractere ASCII, imprima mais de 1 na mesma linha.
  20. isrnick

    C Sobre a Função For

    Pra deixar mais claro: for e while são intercambiáveis, ou seja, sempre pode substituir um pelo outro, escolher qual dos 2 usar é apenas uma questão de conveniência ou preferência, dependendo da situação simplesmente faz mais sentido usar um ou outro. No caso do seu ciclo for: int contador; int numero = 1; for (contador=1; contador <= 10; contador = contador+numero) { printf("%i\n", contador); } O ciclo while equivalente seria: int contador; int numero = 1; contador=1; while (contador <= 10) { printf("%i\n", contador); contador = contador+numero; } Note que a linha onde o contador é incrementado fica no final do ciclo while, isso porque como outras pessoas já mencionaram acima, o terceiro parâmetro do ciclo for só é executado após cada execução dos comandos listados dentro do ciclo. Nesse caso a conveniência de usar for ao invés de while é que todas operações referentes ao contador que controla o ciclo ficam na mesma linha (inicialização, condição de parada e incremento), ficando mais fácil detectar erros ou fazer ajustes caso necessário.
  21. Não costumo usar então não sei te indicar o que é melhor, mas buscando no google é fácil achar editor free (tem até um editor online).
  22. @Nachtwolf Nesse caso não tem mesmo opção, os dados nesses arquivos foram definidos pelo responsável por criar o programa, você poderia tentar abrir num programa visualizador e editor de hexadecimal e tentar decifrar o que cada bloco de dados contém, mas provavelmente não vai ser nada trivial.
  23. Esses programas e funções das extensões são muitos distintos entre si, praticamente não tem relação nenhuma um com o outro. Mas imagino que os arquivos que você possui com essas extensões vieram juntos e supostamente estão relacionados entre si, então nesse caso é provável que eles não pertençam a nenhum dessas 3 funções conhecidas para essas extensões.
  24. Nenhum dos 2 códigos usam Insertion Sort (ordenação por inserção). O primeiro código usa Selection Sort (ordenação por seleção), enquanto o segundo trata-se de Bubble Sort (ordenação por flutuação). Vou explicar o conceito de cada um desse 3 métodos de ordenação assumindo em todos os casos que deseja-se ordenar uma lista em ordem crescente (o respectivo nome do algoritmo já é uma boa dica de como eles se comportam): Selection Sort (ordenação por seleção): A partir da primeira posição da lista, para cada posição procura entre todos os itens restantes ainda não ordenados da lista qual é o de menor valor, este item encontrado com o menor valor é selecionado para ser movido para a posição atual, para isso o algoritmo faz a troca de posições do item da posição atual com o item de menor valor, assim conforme o algoritmo avança os itens de menor valor vão sendo movidos para cada posição da lista em sequência ficando em ordem crescente, e no fim a lista fica ordenada. Insertion Sort (ordenação por inserção): Percorre a lista, e a cada novo item da lista move o item para a posição tal que mantém todos os itens já analisados da lista ordenados em ordem crescente, para isso conforme necessário move todos os itens analisados anteriormente com valor maior que o item atual uma posição para a frente na lista, abrindo espaço para inserir o item atual na posição correta tal que mantém todos os itens já processados ordenados, quando o último item for inserido a lista estará ordenada. Bubble Sort (ordenação por flutuação): Percorre a lista várias vezes, comparando cada 2 itens consecutivos da lista, e trocando as posições dos itens se o primeiro item tiver valor maior que o segundo, então os números maiores são movidos para o fim da lista, e a cada vez que termina de percorrer a lista inteira o maior número da lista "flutua" para o fim da lista, e os números maiores vão sendo ordenados do fim da lista para o começo. Se percorrer a lista inteira e nenhuma troca for feita pode parar de percorre-la pois ela já está ordenada, ou então pode parar após percorrer N vezes uma lista com N itens pois essa é a quantidade máxima de vezes que precisa para ordenar todos os itens.
  25. isrnick

    C Bubble Sort em C

    Expliquei o que precisa corrigir nos comentários. (Código foi indentando usando https://www.tutorialspoint.com/online_c_formatter.htm ) #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int x[100],aux,i,j,qdeelementos; i=0; printf("Leitura da lista:\n"); do { printf(" \n [%d] :",i); scanf("%d",&x[i]); i++; } while ((x[i-1]) !=-99 && i<=100); // deveria ser i<100 pois o vetor x não tem índice 100 if (i>100) { // deveria ser i==100 ou i>=100 pela mesma razão qdeelementos=i; } else { qdeelementos= i-1; } printf("%d", qdeelementos); printf("\n============ lista inserida========= \n"); for(i=0; i<qdeelementos;) { printf("-%d",x[i]); i++; } for(i=0; i<qdeelementos; i++) { for(j=0; j<qdeelementos-1; j++) { if( x[j] > x[j+1]) { aux = x[j]; x[j] = x[j+1]; x[i+1] = aux; //O problema está aqui, deveria ser x[j+1] = aux; } } } for(i=0; i<=qdeelementos-1;) { printf("\n -%d",x[i]); i++; } getch(); return 0; }

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

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!