Ir para conteúdo
Fórum Script Brasil

vangodp

Membros
  • Total de itens

    883
  • Registro em

  • Última visita

Posts postados por vangodp

  1. você cria um "console application" chama ele como você quiser, porem que termine com a extensão .h, um exemplo é util.h.

    Pega as funções e joga elas num aquivo "funçoes.c". Ao principio do funcoes.h você faz o include do util.h, e e todos os outros includes que precisar para que suas funções funcionem, e debaixo dos includes pega as suas funções.

    agora você cria o main.c, no principio faz o include de stdio normalmente, e todas os includes que precisar, por ultimo você faz o include das estruturas(util.h). logo depois você tem que por os "protótipos das funções" e por ultimo você cria o main.

    Si der algum erro tipo redefinição blablabla, é por que você tem que fazer uso do sistema de "guard" no util.h, o sistema guard é mais ou menos como una especie de "proteção contra dupla inclusão". Para que ele serve? Bem, Pense o que vai acontecer si você fizer int n; 2 vezes no seu programa, acontecerá uma dupla definiçao, e o mesmo acontece com uma dupla inclusão, então você tem que por todo o conteúdo do arquivo util.h dentro disso:

    #ifndef UTIL_H
    #define UTIL_H

    //Aqui as estruturas

    #endif // UTIL_H

    Quer dizer que si util.h não estiver definido então o programa o definirá, porem si ele já existir ele não o incluirá 2 vezes, protegendo assim o sistema contra dupla inclusão.

     

    Si você quiser eu te posso passar um projeto feito em codeblocs, porem os passos são esses.

     

    Espero que sirva. Sorte!

  2. Pense assim... O metro vai ser um inteiro? Por exemplo, você só vende os metros justos como 3 ou 7 metros? Ou você vende incluindo centímetros também? Exemplo 3.45, 4.60? Si for 3.60 deve ser float ou double, se for metros justos então deve ser int ignorando a parte decimal.

    O dinheiro deveria ser float ou double, porem si uma variável for float melhor que todas sejam float, si uma for double, então melhor que todas sejam double. Por que isso? Por que como são poucas variáveis que seu programa contem, não importa que sejam float ou double, porem sim que vão encher o saco, si tiver que ficar fazendo casts todo o tempo. Como seu programa é muito pequeno não se preocupe por serem floats ou double, isso só deve importar em programas que reservem muita memoria, melhor que sejam o todas elas float ou double.

    ...

    Então vamos pensar primeiro que queremos. Tudo tem solução, não se preocupe. O linguagem tem que se moldar ao problema e não o problema ao linguagem. ;)

    a e b representam metros arredondados? Si a resposta é sim então são inteiros: int a, b; Si não, são floats float a, b; ou double a, b;

    Agora passamos ao preço:

    double p = 256.50; // Esta correto deixamos assim

    double f, P; // Perfeito, todos são double como falei

    //aqui você lee os valores com cin...

    //aqui vão os cálculos, depois que já temos todos os valores tomados.
    f = a*b;
    P = f*p;

    //por ultimo imprimimos
    cout << "A area do terreno é: \n" << f << endl;
    cout << "O preço do terreno é: \n" << P << endl;

     

    Agora vamos ver esses cálculos f = a*b; e P = f*p; porque não estão muito bem, agora explico. Quando nós fazemos f = a*b acontece 2 coisas. O primeiro que acontece é que se multiplica a*b, porem nada disso tem que ver com o que esta do outro lado do = que é f, si é que você me entende. Essas variáveis a e b são inteiros, si você somar 10+10 você não vai obter 20.00, você vai obter 20, porque são inteiros. Entendeu? O mesmo acontece si multiplicamos. Porem o bicho pega si restamos ou dividimos, mais não é seu caso, agora entenderemos o porque.

    Agora imagine outro exemplo, 10/3, todos nós sabemos que vai dar como resultado 3.3 e uns quebrados XD. Não é? Si eu guardar em um inteiro vai guardar o 3 somente. Ou seja si faço int n = 10/3; n vai conter 3, por duas razões, 10 e 3 são inteiros, e o n também, o que significa que eu provavelmente  seja o que eu quero(Ou não XD). Porem si eu fizer double n = 10/3; que vai acontecer? Vai guardar esses 3.3, ou somente o 3? A resposta é 3. Tadha!!! Por que? Eu guardei ela em um doubleeee nhenhenhe!! Isso não tem nada a ver, si eu for numa folha de papel e multiplicar 3*7 nunca vai dar um flotante ou double. Não é? Não vai dar 21 ponto algo, é um absurdo isso, vai dar 21 "JUSTO". Então... Como é que você esta esperando que saia um double de "a" multiplicado por "b"???WTF

    Para solucionar o problema anterior, devemos fazer um cast a double de ao menos um dos inteiros na hora de fazer a multiplicação. Vamos ver um exemplo? (double)a * b ou a*(double)b ou podemos fazer o cast de ambos valores (double)a * (double)b. E por que só precisamos fazer a conversão com um? Digamos que o compilador é nosso camaradinha, e ele quer nos ajudar, então si eu converto um só dos valores, ele vai fazer o trabalho de converter o outro por vc. Si se tratasse de inteiros não deveria haver casts não é? Então! Si nos convertemos um, não tem lógica multiplicar um int por um float, ou os 2 são inteiros ou os 2 são floats, si um é float o outro é float. Ok? Ufa!!

    Então agora vamos ver isso..

    double f = (double)a*b; //a e b são inteiros

    ...o que vai acontecer é que primeiro se vai resolver o lado direito do operador = para depois guardar o resultado em f, claro, primeiro devemos saber o resultado antes de guardar. dá!!!

    Em outras palavras isso: double f = (double)a*b; primeiro se transforma nisso double f = 30.0; supondo que a guardava um 3 e era um inteiro que "casteamos"(convertemos) a double, e b valia 10 e foi "casteado" automaticamente pelo compilador para nós.

    Então passo a passo o que acontece esta a continuação:

    1.  double f = (double)a*b; //a=3, b=10
    2.  double f = 3.0*b;  //a é convertido a float
    3.  double f = 3.0*10.0; //10 é casteado a double automaticamente por nosso amigo o compilador.
    4.  double f = 30.0; // se resolve a equação
    5.  f já contem 30.0

    Quer saber si é verdade?

    prova: double f = (double)a/b; e imprima f com printf("%lf", f);

        double f= 10/(float)3;
        printf("%lf", f);

    Si funcionou comenta aqui =D.

    Agora vamos falar do que aconteceria si fazemos isso: int f= 3.0*30.3;. Simplesmente se descarta tudo o que esta depois do ponto já que um inteiro não pode guardar as partes decimais de um numero real.

    Com isso você já tem suficiente teoria para arrumar seu programa e não ter problemas com floats nunca mais. ;)

    Agora só falta você decidir si quer que seja inteiros ou reais. Valeu?

    Fui! Sorte!

  3. Não entendo para que você quer a variável MaiorValor.

    Dentro do else você deveria ter um while que só permita a saída uma vez que o numero foi corretamente tomado, porem não entendo sua lógica. Ou seja.. O que tem que ver MaiorValor com ler números negativos? =/

  4. ...eu gostaria de criar aplicativo  que envia mensagens instantânea ,tipo whatsapp.

    Ok! porem isso já é uma escolha, ao menos você sabe que tipo de programa você quer fazer. Esse tipo de aplicação é de escritório, para isso você já esta no loguar correto(ou não XD).

    Para programar um programa que se comunique com outro você tem que saber sobre comunicação entre computadores, isso aqui no C e C++ se chama soquetes ou inglês socket. É algo complicado porem acho que sim você pode conseguir si realmente se propor a isso. Não é só isso, o Skype é uma aplicação gráfica, ou seja que você tem que saber algo de interface de usuário.

    Agora vamos por passos, para fazer tudo isso você deve escolher um linguagem. tudo bem que seus colegas falaram que si você aprender um linguagem será mais fácil aprender outro, não esta errado, porem acho perda de tempo você aprender um linguagem que você depois vai aprender outro. Melhor aprender primeiro um que seja útil não é?

    Para seu propósito acho que os melhores linguagens são C, Java, C++, do mais fácil ao mais difícil na mesma ordem. Só que acho que si você aprender C primeiro melhor passar a C++ e depois a Java. Si quiser começar por Java não tem problema, ele não esta tão ligado aos outros 2 em comparação a c e c++.

    Si você quer aprender o linguagem com saída laboral aprenda Java, agora si sua intenção é aprender a programar para "caminhar com gigantes", aprenda C e depois c++, Java será mais fácil depois disso.

    Informe-se das qualidades, vantagens e desvantagens de cada linguagem, e escolha o seu. É lógico que si me perguntar eu vou lhe dizer que aprenda C/C++, isso é um fórum de C/C++ XDD, não se deixe influenciar, investigue, pergunte opiniões, descargue os compiladores, faça um hola mundo(programa básico) em cada linguagem, não vai custar muito, com umas poucas linhas de código que você fizer você vai se apaixonar de um deles mais que outros. Ok? Si quiser ajuda para começar em C ou C++ conte comigo, em java não lhe posso oferecer isso, por que não sei nada de Java. XD

  5. a estrutura já esta montada

    struct ponto{
    int x;
    int y;
    };
     

    Logo depois você cria a estrutura ponto que vai conter 2 objetos de tipo ponto.

    struct retangulo {
    struct ponto sup_esquerdo;
    struct inf_direito
    };

    E agora fazer as funções que se estão pedindo.

    void area(struct r ){
    //código para calcular área de um retângulo
    }

    struct retangulo centro(struct r ){
    //código para calcular o centro de um retângulo
    return centro;
    }

    struct retangulo mover (struct r ){
    //código para mover um retângulo
    return r;
    }

    bool contem (ponto p, struct r ){
    //código para saber si o ponto esta dentro do retangulo
    return pontoDentro;
    }

    Porem si fizer mais acabo por fazer todo o código. Melhor é si quiser fazer esse exercício e compreender ele, um dia podemos falar por skype e te explico melhor o que te estão pedindo, isso tem que ver um pouco com coordenadas cartesianas e programação gráfica, la no skype me chamo igual.

  6. Diria que isso depende do tipo de aplicação você quer criar. Que você gostaria de fazer? Aplicações web, paginas web, aplicações para telefones, aplicações de escritório..... Esse foro se centra mais em aplicações de escritório.

    Eu diria que para começar você primeiro deveria aprender logica de programação, ato seguido você pode aprender C ou C++. você até pode aprender diretamente em esses linguagens si quiser.

    Por outro lado pense no que eu falei sobre que tipo de aplicações você gostaria de criar, porque assim será mais fácil te encaminhar aos linguagens que melhor se adaptam a sua necessidade.

  7. 1) Si você for aqui nessa tabela asc2, você vai ver o código que pertence a cada carácter que é possível usar em C/C++. Para imprimir você deverá imprimir entre "" o seu valor em hexadecimal, un exemplo é a letra 'ç' minuscula, ela tem o valor 135 em DEC(decimal), e em HEX(hexadecimal) tem o valor 87h, esse é o que queremos. Pois bem si queremos escrever la em hex. colocamos primeiro uma barra invertida seguida de uma letra 'x' minuscula e o valor que esta na tabela sem a 'h' do final, es dizer que si na tabela 87h representa a 'ç' eu uso só 87 depois de \x ficando como '\x87'. A barra e a 'x' indica que o que vem a continuação não é o "87"(string) e sim eu quero o carácter da tabela asc2 que representa o 87 que é a 'ç'. eu posso Também fazer isso "fun\x87\xC6o" para formar a palavra "função". Entendeu?

    Não sei si funciona, porem tente por o valor decimal depois de uma barra assim \135, pode que funcione, eu não posso provar isso agora por que não tenho compilador.

        cout << "A area do terreno e: \n" << f << "m\FD" << endl;

    2) O que você esta fazendo mal é que o calculo você faz antes de pedir os números, por exemplo:

        f = a*b; //aqui você já fez o calculo de f antes de pedir o valor de a e b

        cout << "Digite a largura do terreno: \n";
        cin >> a;
        cout << "\n";

        cout << "Digite o comprimento do terreno: \n";
        cin >> b;
        cout << "\n";

    O correto é fazer o calculo depois de pedir os valores. Forma correta:
        cout << "Digite a largura do terreno: \n";
        cin >> a;
        cout << "\n";

        cout << "Digite o comprimento do terreno: \n";
        cin >> b;
        cout << "\n";

       f = a*b;

    //Agora só resta imprimir
        cout << "A area do terreno e: \n" << f << endl;

    OK? XD

    3) Para imprimir sem o que vai depois do ponto. por exemplo a constant PI que vale 3.1415... e só queremos imprimir o 3, devo usar uma função chamada setpresicion(n) onde o n é o valor d precisão desta forma.

    //si eu tenho um numero PI assim:

    double PI =3.14159;
    std::cout << std::setprecision(0) << PI << '\n';

    Si uso std::setprecision(2) vai mostrar somente 3.14. Valeu? É por setprecision(n) antes de imprimir o valor PI e tudo ok.

    Para mais informação ler aqui:
    http://www.cplusplus.com/reference/iomanip/setprecision/
    http://www.cplusplus.com/reference/ios/ios_base/precision/

    E al final dessas paginas tem mais informação ainda. Essa pagina é referencia para todo programador de C++, muito importante.

    Acho que respondi tudo si falta algo avise.
    Sorte!

  8. Sim, Assim é! você já tentou fazer char ch = 'Alo'; ?? Si imprimir esse ch tal como printf("%c", ch), você vai perceber que que será imprimido o ultimo numero somente.
    Um char ocupa um Byte da sua memória, e por isso ele somente guarda uma letra, um string é diferente, ele é um conjunto de chars(Bytes) que se encontram de forma consecutiva na memória, ou seja, esta um a continuação do outro e todos estariam juntos, porem um string se declara de deferente forma, se declara fazendo char palavra[tamanho], já o char ch tem muita diferença. Por isso seu case não vai funcionar como se fosse um string, pois um char só pode guardar uma letra apenas.
    O switch é mais usado para comprovações simples, por exemplo quando você quer gerar um menu tipo... quer escolher essa opção escolha 1, quer outra opção escolha 2, ou pulse 0 para sair... Si for fazer comparações complexas melhor usar if. Falou? XD

    Bay!

  9. Não é possível fazer isso.

    Exemplo correto seria case 'a':(ou qualquer outra letra), um char não é um string. Si usar if conjuntamente com strcmp de esta forma: if ( strcmp(op, "arroz")==0 ) ...então sim. O switch somente compara chars e inteiros, para strings use if con strcomp como falei. ;)

  10. você esta perguntando por matriz porem seu exemplo se trata de vetor ou array. Vou me guiar pelo seu exemplo e não pelo nome do post.

    Essa forma de reservar memória não esta definida no padrão C++, é uma forma incorreta que si bem pode funcionar, também pode falhar, alguns compiladores podem aceitar isso, e outros simplesmente podem mostrar um erro.

     

     A forma correta é tipo nome[elementos]; porem elementos deve ser um numero constante e não variável. O A matriz funciona de igual forma, ambas tomam o tamanho em tempo de compilação(antes de que se executa o programa) e por isso isso que você quer fazer é desaconselhável. O que você esta buscando é dar o tamanho para a matriz em tempo de execução do programa, para isso existe o que se denomina "alocação dinâmica memória", aparte de muitos outros mecanismos que nos proporciona C++ como os continers(std::map, std::array etc etc).

     

    Vamos com um exemplo para arrays:

    int *p; //primeiro criamos um ponteiro

    //pedimos o numero de elementos como você quer

    cout << "entre com o valor: " << endl;

     int num;

    cin >> num;

    //reservamos a memória dinamicamente em C++

    p = new int [num];

    Desde aqui p es um array normal e corrente com uma condição. Devemos antes de sair do programa usar delet para liberar memória, pois a diferencia de um simples array essa não se libera sozinha. vamos a ver como seria para usar e liberar esse array.

    //uso normal

    p[0] = 100;

    cout << p[0] << endl;

    //liberar

    delet[] p;
    return 0;

    Para estar mais seguro vamos com seu exemplo:
     

    #include <iostream>
    using namespace std;
    
    struct Estado {
        int numero;
        string nome;
        int einicial;
        int efinal;
        int recebe1;
        int recebe2;
    };
    
    int main () {
        cout << "entre com o valor: " << endl;
        int num;
        cin >> num;    //supondo que num escolhemos 10 ;)...
        Estado *atual;
        atual = new Estado[num];   //se criam 10 objetos o primeiro é atual[0], e o ultimo é atual[9].
        
        
        //uma forma de aceder ao estado é:
        atual[3].nome = "paulo";
        
        cout << atual[3].nome << endl;
        
        
        delete[] atual; //Importante liberar!!
        return 0;
    }

    Então recordando sempre de eliminar essa matriz com delete[] que é muito importante valeu? Essa é a forma correta, si quiser continuar por sua via você é livre, porem corrigir os maus hábitos te tornará melhor programador e te pode evitar muitos dores de cabeça e fazer que que você se destaque mais como programador. ;)

     

    Esqueci de por alguma referencia, aqui deixo: https://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Alocação_dinâmica_de_memória

    FUI!

  11. Disse que o identificador antes da chave { está sem classificar, isso acho que é o nome que não coincide, prove reconstruir o projeto no icone rebuild, realmente não sei qual o erro por que você não está aportando código. Mas si o prototipo for void foo(); a função tem que chamar igual. E no caso de usar include não precisa fazer o prototipo.

    Sobre sua pergunta... Si usar o guard sim pode incluir varias vezes a mesma biblioteca. É mais... não é você quem decide si incluir varias vezes um header ou não, é a sua necessidade que o obriga a faze-lo, como falei sempre que necessitar usar string, cout, cin, etc, você vai ter que fazer os includes.

  12. nesse caso você deveria fazer o #include<float.cpp> que inclui todo o arquivo ao inicio do main, porem para ficar mais bonito chamar ele de float.h que da a intender que é um header. Também você pode fazer o  include como #include "float.h" que quer dizer que o float.h se encontra na mesma pasta, ou citar toda o path tipo #include "C:/umaPasta/outraPasta/float.h", porem si estiver sempre junto só precisa por o nome e já esta.

    As variáveis float varFloat e double varDouble  ficam dentro do escopo de dessa função que você chamou como "???()", a vida delas esta entre a chave de abertura'{' e de terminação '}' dessa função. Quando você chama uma função você cria uma pilha com todas essas variáveis que estão dentro das chaves, e quando a função termina se libera a memória.

    Para ficar mais claro você pode fazer isso:

    main.cpp:

    #include "float.h"
    
    int main()
    {
        foo();
    
        return 0;
    }

     

    float.h

    #include <iostream>
    
    using namespace std;
    //Datentyp für Gleitkommazahlen
    
    
    void foo();
    {
        float varFloat;              => onde fica isso aqui?
        double varDouble;       => onde fica isso aqui?
    
        //Ausgabe von Gleitkommazahlen mit Standardeinstellung
    
        cout << "Ausgabe von Gleitkommazahlen: \n\n";          => cout continua para a impressao de dados, né?
        cout << "Standardeinstellung: \n";
        cout << "========================";
        varFloat = 10000000000.0;
        cout << "Größe Zahlen (10000000000): ";
        cout << varFloat << endl;
        cout << "Kommazahlen (1.33333333333333333333): \n";
        varFloat = 1.33333333333333333333;
        cout << "float:\t " << varFloat << endl;
        varDouble = 1.33333333333333333333;
        cout << "double:\t " << varDouble << "\n\n";
    
        //Ausgabe von Gleitkommazahlen mit geändert
        //Einstellungen
    
        cout << "15 Stellen: \n";
        cout << "=======================: \n";
        cout.precision(15);
        varFloat = 10000000000.0;
        cout << "Größe Zahlen (10000000000); ";
        cout << varFloat << endl;
        cout << "Kommazahlen (1.33333333333333333333): \n";
        varFloat = 1.33333333333333333333;
        cout << "float:\t " << varFloat << endl;
        varDouble = 1.33333333333333333333;
        cout << "double:\t " << varDouble << endl;
    }

     

    Ou você pode fazer o prototipo da função foo como falei anteriormente, porem com esse sistema todo o documento ficaria incluído, si tivesse mais funções e não somente uma, todas seriam incluídas. O problema poderia surgir por problemas de dupla inclusão, como por exemplo si você presizar usar iostream tanto em main como no arquivo float.h, nesse caso você deveria fazer uso de uma coisa que eu a chamo de "proteção contra dupla inclusão" porem simplesmente se chama "guard". seria algo assim:

    main.cpp

    #include <iostream>
    using namespace std;
    #include "float.h"
    
    int main()
    {
        
        cout << "Chamando foo desde float.h" << endl;
        foo();
    
        return 0;
    }

     

    float.h

    #ifndef FLOAT_H
    #define FLOAT_H
    
    #include <iostream>
    using namespace std;
    
    //Datentyp für Gleitkommazahlen
    
    void foo();
    {
        float varFloat;              => onde fica isso aqui?
        double varDouble;       => onde fica isso aqui?
    
        //Ausgabe von Gleitkommazahlen mit Standardeinstellung
    
        cout << "Ausgabe von Gleitkommazahlen: \n\n";          => cout continua para a impressao de dados, né?
        cout << "Standardeinstellung: \n";
        cout << "========================";
        varFloat = 10000000000.0;
        cout << "Größe Zahlen (10000000000): ";
        cout << varFloat << endl;
        cout << "Kommazahlen (1.33333333333333333333): \n";
        varFloat = 1.33333333333333333333;
        cout << "float:\t " << varFloat << endl;
        varDouble = 1.33333333333333333333;
        cout << "double:\t " << varDouble << "\n\n";
    
        //Ausgabe von Gleitkommazahlen mit geändert
        //Einstellungen
    
        cout << "15 Stellen: \n";
        cout << "=======================: \n";
        cout.precision(15);
        varFloat = 10000000000.0;
        cout << "Größe Zahlen (10000000000); ";
        cout << varFloat << endl;
        cout << "Kommazahlen (1.33333333333333333333): \n";
        varFloat = 1.33333333333333333333;
        cout << "float:\t " << varFloat << endl;
        varDouble = 1.33333333333333333333;
        cout << "double:\t " << varDouble << endl;
    }
    
    #endif // FLOAT_H
    

    Ok? =)

  13. menu File>New>Empty file

    vai sair o aviso: "do you want to add this file in the active project(has to be saved first)?" que traduzido ao meu português ruim fica como: "Quer agregar este arquivo ao projeto ativo(Primeiro deve ser salvado)?". Isso quer dizer que esse arquivo vai ser adicionado ao projeto que estiver selecionado nesse momento, codeblocks permite ter aberto vários projetos de uma vez, porem só podemos editar o que nos temos como ativo, então se só tem um não tem que se preocupar, porem si aconteceu que você tem 2 ou mais então fique ligado nisso. Escolha SIM e de um nome e um lugar para o arquivo, melhor guardar junto ao main ou vai ter dores de cabeça com rotas relativas.

     

    Mas com tudo isso você não vai notar nada diferente, para notar que funciona ou não devemos fazer isso ao main.cpp e ao outro arquivo novo criado:

    Ao main.cpp:

    void sayHello();
    
    int main(){
        sayHello();
        return 0;
    }

     

    E ao novo arquivo.cpp:

    #include <iostream>
    using namespace std;
    
    void sayHello(){
        cout << "Hello world!" << endl;
    }

     

    Em C/C++ devemos sempre ter a declaração feita antes de usar algo. Quando você usar um int ele deve existir primeiro não? Com as funções é igual, por isso não basta com incluir código em outro arquivo, devemos dizer em que ponto do main ele vai estar funcionando. Então os mecanismos nesse caso como si trata de uma função, simplesmente com ter o protótipo da função vai funcionar, o pré processador se encarga de buscar a função por vc, é só você não esquecer de fazer a declaração da função (protótipo). Outros mecanismos são os includes. ;)

    2º     Certamente si compilar o erro que vai dar é:

    ||=== Build: Debug in lol (compiler: GNU GCC Compiler) ===|
    C:\Documents and Settings\seuNome\Escritorio\lol\main.cpp||In function 'int main()':|
    C:\Documents and Settings\seuNome\Escritorio\lol\main.cpp|40|error: expected ';' before '}' token|
    ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

    ...e vai dizer que o erro esta na ultima linha do seu programa.

    return 0
    } <---- vai marcar essa linha.

     

    porem você dev se centrar no que esta em negrito. In function 'int main()': error: expected ';' before '}' token|

    vamos com meu português very good XDD...

     

    Na funçao 'int main()': erro: esperando ';'(ponto e coma) antes de '}'(chave de terminação).

    Aclaro que para o compilador não importa realmente em quantas linhas esta dividido seu código. o fato que return 0 e } estejam em linhas separadas não é importante para o compilador, você podia fazer seu programa inteiro em uma linha(si tiver coragem kkk), para o compilador o único que importa são os ponto e comas que indicam que uma instrução terminou, porem realmente não importa se você separou 40 instruções em 40 linhas ou as deixou elas na mesma linha. O único que o compilador vai te dizer é que falta um ponto e coma antes de tal coisa, nesse caso a tal coisa é '}', e a pergunta é... Que esta antes de '}' ? O return 0 <---- aqui você errou, falta ponto e coma. Para o programa o seu 

    ...

    return 0
    }

    é como se fosse ... return 0 }

    ...então ele te esta avisando que o erro é que falta ponto e coma antes da chave de terminação. Falou! XD

     

    TRUQUINHO! Si não encontrar o erro na linha que indica o compilador, olhar uma linha antes. ;)

    Sorte!

  14. normal...
     você esta saindo de rango muito feiamente, si você declarou mataux[1][n];

    Primeiro que não vejo a declaração de n. Segundo...  Si existe n(nos das código a conta gotas...) está inicializada??. Terceiro por que estas acessando a casinha mataux[1][c], não existe nenhuma casinha mataux[1][c], você declarou mataux[1][n], o valor de n eu não sei qual é, porem o valor de 1 é uma só casinha, você só pode acessar a mataux[0][c].

    Centre se nisso, si criar um vetor de esta forma int vetor[1][10], somente pode acessar a vetor[0][x] não existe a casa vetor[1][x]. Si eu crio um char array[1] quantos casinhas vai ter array? 1...2? A efeitos char array[1] é como char array, e int mataux[1][n] a efeitos é o mesmo que mataux[n], você só pode acessar a mataux[0][n]. ok?!

     

    Pense nisso por que no ultimo for você esta violando memória que não te pertence.

     

    Sorte. E si quiser por o código completo para que o arrumamos. ;)

     

  15. Infelizmente não vou poder ajudar muito. Por casualidade, qual é o sistema operativo que você esta usando, e si puder dizer IDE, compilador(de onde baixou), etc etc.

    Eu estou usando windows xp, meu pc quebrou e tenho um de reposição, até que o meu não fique bem não posso provar a ver em outro lado, ao parecer o mesmo problema eu tenho no windows xp, mais ainda pior, não me funciona nada do locale. Si tiver noticias posto aqui.

     

    Uma coisa que você pode fazer é tentar salvar o arquivo como utf-8, abre ele com o bloco de notas e escolha "salvar como" e escolha utf-8 para o tipo de codificação, ou tentar baixar outro compilador e provar, e pedir para outros provar compilar seu código. Já não tenho mais idéias, sinto muito.

    =(

  16. Prove setlocale(LC_ALL, "Portuguese"); com a 'P' maiúscula. Não se esqueça de incluir locale.h

    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    int main(void)
    {
      setlocale(LC_ALL, "Portuguese");
      printf("Utilizando caracteres e acentuação da língua portuguesa!\n\n");
     
      system("pause");
      return 0;
    }

    IMPORTANTE!
    Ademas vaia nas opções da janelinha do console e verifique sé o tipo da fonte que esta usando é trye type. Uma boa fonte é a Console do windows 7, si estiver em XP seguramente esse é o problema, em Windows não esta a fonte "Console", porem sim tem outra que se chama "Lucida console" o algo assim.  quando executar o código click com o botão direito sobre a parte superior da janela e escolha propriedades, elija a pestana "fontes", eu estou em um computador em español, pode ser outros nomes.

  17. A forma em que você aborda o problema é um pouco caótica. Não deverias aproveitar os recursos que oferece C?

    #include <stdio.h>
    #include <ctype.h>
    
    void flush_in() {
        int ch;
        
        while ( ( ch = fgetc ( stdin ) ) != EOF && ch != '\n' ) {}
    }
    
    int main(){
        char frase[100] = {0};
        int letraAsc2 = 0;
        int vogal = 0;
        int consoante = 0;
        int i;
        
        printf("Entre a frase ou nome: ");
        scanf("%99[^\n]", frase); //leemos maximo 99 letras deixando espaço para o ultimo caracter nulo.
        flush_in(); // Porem vc já se perguntou o que acontece si superamos esas 99 letras do scanf? Continuam no buffer, melhor livrarnos delas com flush_in ;)
        
        printf("\n\n");
        for (i=0; i < sizeof(frase); i++ ){
            letraAsc2 = tolower ( frase[i]); // transformamos as letras a minusculas, assim sempre sabemos que estamos trabalhando com minusculas sem se preucupar por maiusculas.
            if ( isalpha(letraAsc2) ){ // Si es una letra alfabetica....
                switch (letraAsc2) {
                    case 'a':
                    case 'e':
                    case 'i':
                    case 'o':
                    case 'u':
                        vogal++;
                        printf("Letra %c vogal\n", frase[i] );
                        break;
                    default:
                        consoante++;
                        printf("Letra %c consoante\n", frase[i] );
                        break;
                }
            }
        }
        //Tadahhh!!!
        printf("\n\nVogal=%d\nconsoante=%d", vogal, consoante);
        
        getchar();
        return 0;
    }
    
  18. 1º erro #define Sus 13,8 ....você não pode usar virgula, use o ponto: #define Sus 13.8

    2º erro float Taxa_Meta ( float também, char sexo, int idade, float altura, float peso ); não podemos usar acentos em nomes de variáveis.

    3º erro, printf ( "O valor de IMC é de %f", &IMC ); Si você quer imprimir o valor por que coloca o operador & adiante??? Nesse caso você esta imprimindo a direção de memoria não a variável em si. Tire esse & de adiante de IMC, e todas os outros printf igualmente, linhas 72 a 78.

    Si com isso não funcionar volte ao forum.

    Todos os floats retire as comas, o valor 9.6 não é correto, e sim 9.6. O operador coma não se usa em flotantes.

  19. quando não colocamos chaves{} en else, esse mismo else somente tem alcance de uma só instruçao, ou seja que si eu tenho

    ...}else

    x = pow(n1,2);
    fflush(stdin);
    printf("%.f\n\n", x);
    ele só alcança a esa linha que esta em verde. Em outras palavras o anterior é como si fosse:

    }else{

    x = pow(n1,2);
    }
    fflush(stdin);
    printf("%.f\n\n", x);

    Para agrupar todas as intruçoes(uma ou mais) baixo else devemos fazer:

    }else{

    x = pow(n1,2);
    fflush(stdin);
    printf("%.f\n\n", x);

    }

    Seu programa arrumado seria:

    #include <stdio.h>
    #include <stdlib.h>
    #include<math.h>
    
    int main() {
        float n1, x;
        
        printf ( "Digite um number:    " );
        scanf ( "%f", &n1 );
        printf ( "\n" );
        
        if ( n1 > 0 ) {
            x = sqrt ( n1 );
            fflush ( stdin );
            printf ( "%.f", x );
        } else {
            x = pow ( n1, 2 );
            fflush ( stdin );
            printf ( "%.f\n\n", x );
        }
        
        system ( "pause" );
        return 0;
        
    }
    
    

    E si ti interessa optimizar ele sem levar aos extremos:

    #include <stdio.h>
    #include<math.h>
    
    int main() {
        float n1;
        
        printf ( "Digite um number:    " );
        scanf ( "%f%*c", &n1 );
        
        if ( n1 > 0 ) {
            printf ( "\nRAIZ%.f", sqrt(n1) );
        } else{
            printf ( "\nPOTENCIA%.f\n\n", pow(n1, 2) );
        }
        
        getchar();
        return 0;
        
    }
    

    Levando ao extremo seria:

    #include <stdio.h>
    #include<math.h>
    
    int main() {
        float n1;
        
        printf ( "Digite um number:    " );
        scanf ( "%f%*c", &n1 );
        
        printf ( "%s: %.f", ( n1 > 0 ) ? "RAIZ" : "POTENCIA", ( n1 > 0 ) ? sqrt(n1) : pow(n1, 2) );
    
        getchar();
        return 0;
        
    }
    
×
×
  • Criar Novo...