Ir para conteúdo
Fórum Script Brasil

== Douplus ==

Membros
  • Total de itens

    203
  • Registro em

  • Última visita

Sobre == Douplus ==

  • Data de Nascimento 13/08/1991

Contatos

  • Website URL
    http://neddih.zxq.net/
  • ICQ
    150978923

== Douplus =='s Achievements

0

Reputação

  1. == Douplus ==

    Código - OBI 2015

    Primeiro você está definindo um array de tamanho imprevisível, porque está usando size antes de inicializá-lo: int size, nm[size]; cin >> size; Segundo você não pode fazer isto se a condição do loop for i<n: if (v[i]==1&&v[i+1]==0&&v[i+2]==0){ Pois quando i = n-1 o teu programa tentará acessar v[n-1+2] que é fora dos limites do array, o que pode resultar em um valor indefinido (provavelmente zero) ou em uma falha de segmentação. Por causa dos erros no gerenciamento de memória, a saída do seu programa é imprevisível, foi inclusive sorte não ter crashado quando você enviou a solução.
  2. Provavelmente você não fez nada de errado, somente uma sua função executa em menos de um segundo para este caso.
  3. == Douplus ==

    Vetores char

    #include <stdlib.h> #include <stdio.h> int main(void) { char entrada[1000]; char *ptr; ptr = entrada; do { *ptr = getchar(); if (*ptr >= 'a' && *ptr <= 'z') { *ptr = *ptr - 'a' + 'A'; } } while (*(ptr++) != '$'); *(--ptr) = '\0'; printf("%s", entrada); return 0; }
  4. #include <iostream> using std::cout; using std::endl; #include <vector> #include <algorithm> #include <cstdlib> #include <ctime> template<class T> class Ordenador { protected: virtual bool temQueTrocar(T &alvo, T &outro)=0; public: virtual void ordenarVetor(std::vector<T> &v) { for(typename std::vector<T>::iterator it1 = v.begin(); it1 != v.end(); ++it1) { for(typename std::vector<T>::iterator it2 = it1; it2 != v.end(); ++it2) { if (temQueTrocar(*it1, *it2)) { iter_swap(it1, it2); } } } } }; template<class T> class OrdenadorCrescente : public Ordenador<T> { protected: virtual bool temQueTrocar(T &alvo, T &outro) { return (alvo > outro); } }; template<class T> class OrdenadorDecrescente : public Ordenador<T> { protected: virtual bool temQueTrocar(T &alvo, T &outro) { return (alvo < outro); } }; std::vector<int> *criarVetor(int qtde, int maior) { std::vector<int> *v = new std::vector<int>(); srand(time(0)); for (int i = 0; i < qtde; i++) { v->push_back((rand() % maior) + 1); } return v; } void mostrarVetor(std::vector<int> &v) { for (std::vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout<<(*it)<<' '; } cout<<endl; } int main(void) { std::vector<int> *v = criarVetor(50, 100); cout<<"Vetor original: \n"; mostrarVetor(*v); cout<<endl; OrdenadorCrescente<int> ordCresc; ordCresc.ordenarVetor(*v); cout<<"Vetor em ordem crescente: \n"; mostrarVetor(*v); cout<<endl; OrdenadorDecrescente<int> ordDec; ordDec.ordenarVetor(*v); cout<<"Vetor em ordem crescente: \n"; mostrarVetor(*v); cout<<endl; return 0; }
  5. Fala pro teu professor que não precisa de vetor, se ele quiser que você use vetor ele que passe outro exercício porque vetor só vai te complicar. Ele quer o menor peso, o maior peso e a média, certo? Pense assim: uma variavel (float) pra armazenar o menor peso, uma variavel (float) para armazenar o maior peso, uma variável (float) para ir somando os pesos e por fim uma variável (int) para contar quantos pesos foram entrados. Depois pra pegar a média usa a sua variável que guardou a soma de tudo e divide pela variável que contou quantas pessoas foram pesadas. Assim: #include <iostream> #include <string> using namespace std; int main(void) { float menor = 0; float maior = 0; float soma = 0; float peso; int qtde = 0; int pessoas; string placa; string fim("FIM"); do { cout<<"Digite a placa do carro: "; cin>>placa; if (placa.compare(fim)) { cout<<"Quantas pessoas? "; cin>>pessoas; for (int i = 0; i < pessoas; i++) { cout<<"Digite o peso da pessoa %d: ", i; cin>>peso; if ((menor == 0) || (peso < menor)) { menor = peso; } if (peso > maior) { maior = peso; } soma = soma + peso; } } qtde++; } while (placa.compare(fim) != 0); cout<<"Menor peso: "<<menor<<endl; cout<<"Maior peso: "<<maior<<endl; cout<<"Media: "<<(soma / qtde)<<endl; return 0; }
  6. Rapaz, não entendí a necessidade desse rolê todo... Já ouviu falar sobre um programa chamado make? Outra coisa: se quer fazer algo portável, use a ncurses direto... Tem versão pra Windows e pra Linux e a API é a mesma, não fica dando esses conflitos como o do cprintf() Até mais!
  7. Atente às linhas: P1 = SAL - (5/100); P3 = SAL - (25/100);... Você quer 5% de quê? 25% de quê? Os ifs não estão errados, mas com essas contas P1 e P3 vão sempre ser pequenos.
  8. Para que você quer uma interface gráfica?
  9. A representação na memória é diferente. Basicamente é a mesma diferença entre você fazer: char var[] = "64"; e int var = 64;
  10. Poder você pode, mas aí você estaria jogando o número como string no arquivo, enquanto fwrite() faz saída binária.
  11. Você quase chegou lá! Dá uma olhada, qualquer coisa pergunta: Lista* inverter(Lista* l){ Lista* aux, *ant, *prox; if(l == NULL) return NULL; while(l != NULL){ ant = l; aux = l->prox; l->prox = l->ant; l->ant = aux; l=aux; } return ant; }
  12. Você tava tentando mandar um inteiro para uma função que recebe um ponteiro. Para resolver, use a referência (%num) e converta-a explicitamente para const char * usando reintepret_cast. Não use fwrite(), é uma função da cstdlib e você está usando as classes de manipulação de arquivos do C++, portanto fique com a ofstream::write(). #include <fstream> using std::ofstream; #include <iostream> using std::cout; using std::cin; int main(void) { ofstream myfile; myfile.open ("alunos.dat"); short num; cout<<"Digite numero:"; cin>>num; myfile.write(reinterpret_cast<const char *>(&num),sizeof(short)); return 0; }
  13. Isso depende de como esse byte precisa ser interpretado Tem vários jeitos de fazer, implementei duas maneiras: a primeira usando uma variável char para a leitura e a segunda uma variável int. Mas, repito, há outros modos de se fazer isso. Ler sobre o complemento de dois é útil, porque é desse modo que números negativos são armazenados. Essa técnica faz os números negativos terem uma coleção de um ou mais bits setados (1) na parte mais significativa de sua representação binária. Exemplo: -10 com 1 byte (char): 11110110 -10 com 4 bytes (int): 11111111111111111111111111110110 Ler um -10 de um byte em uma variável int resultaria em: 00000000000000000000000011110110 (246d) por isso a conversão: 37 info2 = (char)info2; é necessária. Código: #include <stdlib.h> #include <stdio.h> #define FPATH "1dat" int main(void) { char info1; int info2 = 0; FILE *fptr = fopen(FPATH, "rb"); if (!fptr) { signed char outbyte = -37; fprintf(stderr, "Imposivel abrir arquivo.\nTentando criar arquivo...\n"); fptr = fopen(FPATH, "wb"); if (!fptr) { fprintf(stderr, "Impossivel criar o arquivo. Terminando\n"); exit(0); } fwrite(&outbyte, 1, 1, fptr); fclose(fptr); fprintf(stderr, "Arquivo criado.\n"); fptr = fopen(FPATH, "rb"); fprintf(stderr, "\n"); } printf("Lendo para variavel tipo char:\n\t"); if (fread(&info1, 1, 1, fptr)) printf("Inteiro lido: %d\n", info1); else fprintf(stderr, "Arquivo vazio.\n"); fseek(fptr, 0, 0); printf("Lendo para variavel tipo int:\n\t"); if (fread(&info2, 1, 1, fptr)) { info2 = (char)info2; printf("Inteiro lido: %d\n", info2); } else fprintf(stderr, "Arquivo vazio.\n"); fclose(fptr); getchar(); return 0; }
  14. então, não (heheh....). é assim, stdin le a entrada padrão, a principio o teclado. Essa linha le o que o usuario digita. A linha que grava é a linha"fprintf(arq, "%s", pessoa.nome); Tem que usar a fopen com o parametro "wb" ao invés do "w" usando fwrite() (<--- nesse link tem um exemplo).
  15. Olha... Mudei teu programinha, tenta entender e qualquer coisa pergunta. #include <stdio.h> #include <stdlib.h> struct nomeSobrenome{ char nome[50]; }; int main() { FILE *arq; int i; struct nomeSobrenome pessoa; arq = fopen("teste.txt", "w"); for(i=0;i<30;i++){ printf(" Nome completo : "); fgets(pessoa.nome, 50, stdin); fprintf(arq, "%s", pessoa.nome); } fclose(arq); return 0; } Outro detalhe, nesse caso estamos salvando a string num arquivo texto. Quando voce quiser salver uma struct use entrada e saida binaria para arquivos ao invés de texto. fwrite() e fread() fazem E/S binarias. Ateh!
×
×
  • Criar Novo...