1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Urgente, Matlab

Discussão em 'Programação' iniciada por peters_b, 11 de Dezembro de 2007. (Respostas: 20; Visualizações: 1364)

  1. peters_b

    peters_b Power Member

    W=input ('Introduza o número de paredes, W: ')
    while(W~=0)
    if (W>0) & (W<=4)
    for I=1:W
    A(I)=input (
    'Introduza a área da parede, A(I): ')
    n(I)=input (
    'Introduza o número de camadas da parede, n(I): ')
    end
    end
    W=input ('Introduza valor correcto para o número de paredes, W: ')
    end

    Tenho exa parte do programa e pretendo k ao pedir o "A" e o "n",o I varie conforme os diferentes W's,ou seja,se colocar W=2 dps vai pedir A(1) e A(2) e a msm coisa para o "n",nao sei se me fiz entender.:confused:

    Quem me puder ajudar agradeço,é URGENTE.;)

    cumps
     
  2. TheRieper

    TheRieper Power Member

    Linguagem pretendida? duvidas concretas? não esperes que alguém te faça o tpc, porque ninguém o fará, no entanto, esclarecemos dúvidas e ajuda-mos no que for preciso
     
  3. HecKel

    HecKel The WORM

    TheRieper, a linguagem está indicada no titulo da thread. As dúvidas também estão lá colocadas.
     
  4. texoxo

    texoxo Power Member

    Sinceramente nao estou a perceber a tua duvida! Penso que o queres ja esta implementado! O I ja esta a variar ate W no ciclo for
    Explica-te melhor
     
  5. peters_b

    peters_b Power Member

    Faxo das minhas palavras as do HecKel.;)
    Se foxe para me fazerem o trabalho eu tinha posto o trabalho aqui todo e acredita k ixo comparado com o trabalho n é nada,mas se tiveres interessado em ver o trabalho eu dps coloco-o aki.

    http://img135.imageshack.us/img135/7188/iplr0.jpg

    Eu n pexo a ngm pa me fazer o trabalho pk n funciono axim,se bem k era o melhor k eu fazia pk o prof n sabe explicar akilo.

    cumps
     
  6. Baderous

    Baderous Banido

    Após pensar um pouco sobre o problema, perguntei-me se o que tu querias era um output do género:

    Se sim, o que tens de fazer é isto (não sei MatLab mas vê se consegues perceber):

    Código:
    W=input ('Introduza o número de paredes, W: ')
    while(W<=0 || W>4)  [color=red]//enquanto o W for menor ou igual a 0 ou maior que 4[/color]
        W=input ('Introduza valor correcto para o número de paredes, W: ')
    end
    for I=1:W
        A(I)=input ('Introduza a área da parede, A(I): ')
        n(I)=input ('Introduza o número de camadas da parede, n(I): ')
    end
    O problema é que acho que estavas a fazer ali um ciclo infinito com o while(W~=0).
     
  7. peters_b

    peters_b Power Member

    Brigadão. Resoveu um problema k estava a aparecer mas a minha duvida era aparecer isto:
    Introduza a area da parede 1: 23
    Introduza o numero de camadas da parede 1: 3
    e que continua a não aparecer mas obrigado na msm,deu pa resolver um problema.;)

    cumps
     
  8. Baderous

    Baderous Banido

    Para isso tens que mandar para o output os valores que inseres. Em C ficaria:

    Código:
    printf("Introduza a area da parede [COLOR=Red]%d[/COLOR]:",[COLOR=Red]i[/COLOR]);
    onde o %d era associado ao i (o i é uma variável que recebe o nº da parede sobre a qual o programa está a iterar).

    Fica aqui o código em C se quiseres ver:

    Código:
    #include <stdio.h>
    
    int main() {
        int i,w,a,n;
        printf("Introduza o numero de paredes:");
        scanf("%d",&w);
        while (w<=0 || w>4) {
                 printf("Introduza o valor correcto para o numero de paredes:");
                 scanf("%d",&w);
          }
          
        for (i=1;i<=w;i++) {
            printf("Introduza a area da parede %d:",i);
            scanf("%d",&a);
            printf("Introduza o numero de camadas da parede %d:",i);
            scanf("%d",&n);
            printf("\t\tPAREDE %d\n\t\t\tAREA: %d\n\t\t\tNUMERO DE CAMADAS: %d\n\n",i,a,n);
            }
        
        getchar();getchar();
        return 0;
    }
     
  9. peters_b

    peters_b Power Member

    É o primeiro ano k estou a ter programação,entrei agora pa faculdade,portanto o k percebo é so do matlab e msm axim é pouco.
    Axo k o "printf" em C corresponde ao "disp" no matlab,ou seja, é um output,e se eu fizer;

    while(W<=0 || W>4)
    W=input (
    'Introduza valor correcto para o número de paredes, W: ');
    end
    for
    I=1:W
    A(I)=input (
    'Introduza a área da parede, A(I): ');
    disp ('I')
    n(I)=input (
    'Introduza o número de camadas da parede, n(I): ');
    ...
    o matlab apresenta o valor de I correcto,no casso de W=2,primeiro aparece I=1 e dps I=2 k é +/- o k eu pretendo,a diferença é k eu pretendo k ixo apareça no A(I) e dps no n(I).
    Eu amanhã vou perguntar ao prof a ver o k ele diz.

    Obrigado na msm.
    Já agora,para quem tem mais experiencia nisto e viu o trabalho,o k axou do grau de dificuldade?

    cumps
     
  10. Baderous

    Baderous Banido

    Experimenta assim:

    Código:
    sprintf('Introduza o número de paredes: ')
    sscanf(W,'%d')
    while(W<=0 || W>4)
        sprintf('Introduza o valor correcto para o numero de paredes: ')
        sscanf(W,'%d')
    end
    for I=1:W
        sprintf('Introduza a área da parede %d: ',I)
        sscanf(A,'%d')
        sprintf('Introduza o numero de camadas da parede %d: 'I)
        sscanf(N,'%d')
        sprintf('\t\tPAREDE %d\n\t\t\tAREA: %d\n\t\t\tNUMERO DE CAMADAS: %d\n\n',I,A,N)
    end
    Utilizei as funções sprintf e sscanf em vez de input e disp.
     
  11. peters_b

    peters_b Power Member

    Yah se eu fizer axim aparece o valor do "I" mas na linha seguinte e eu keria k aparecesse na linha do input km texto.Eu amanha ja pergunto ao prof e dps digo kal a soluçao.
    Código:
    [FONT=Courier New][SIZE=2][COLOR=#0000ff]for[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#000000] I=1:W[/COLOR][/SIZE][/FONT]
    disp(I)
    [FONT=Courier New][SIZE=2]A(I)=input ([/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza a área da parede, A(I): '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2])
    n(I)=input ([/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza o número de camadas da parede, n(I): '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2])
    [/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]   for[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2] I=1:n
               L(I)=input ([/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza a largura de cada camada da parede, L(I): '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2])
               K(I)=input ([/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza o valor da condutibilidade térmica de cada camada, K(I): '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2])
    [/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]   end
    end[COLOR=white]
    [/COLOR]
    Aquele disp deveria aparecer na zona a roxo,mas o matlab n permite 2 ordens na msm linha.E agora tb me está a aparecer outro erro pk do n,enfim so problemas e mais problemas.

    Muito obrigado pela ajuda k têm prestado,em especial ao Baderous que tem andado empenhado nisto,mt obrigado.;)

    cumps
    [/COLOR][/SIZE][/FONT]
     
  12. c1t1z3n

    c1t1z3n Power Member

    o programa a meu ver parece funcionar bem, nao percebo muito bem o que queres que o disp(I) faça...

    (ja li e re-li o topico, e fiquei na mesma :D)

    qual é o problema que isso apresenta?
     
    Última edição: 11 de Dezembro de 2007
  13. peters_b

    peters_b Power Member

    Código:
    [FONT=Courier New][SIZE=2]W=input ([/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza o número de paredes, W: '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]);[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]while[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#000000](W<=0 || W>4) [/COLOR][/SIZE][/FONT]
    [SIZE=2][FONT=Courier New]W=input ([/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza valor correcto para o número de paredes, W: '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]);[/SIZE][/FONT]
    [FONT=Courier New][SIZE=2][COLOR=#0000ff]end[/COLOR][/SIZE][/FONT]
    [SIZE=2][FONT=Courier New][COLOR=#0000ff]for[/COLOR][/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#000000] I=1:W[/COLOR][/SIZE][/FONT]
    [SIZE=2][FONT=Courier New]   A(I)=input (strcat([/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza a área da parede, A('[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2],num2str(I),[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'): '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]));[/SIZE][/FONT]
    [SIZE=2][FONT=Courier New]   n(I)=input (strcat([/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza o número de camadas da parede, n('[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2],num2str(I),[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'): '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]));[/SIZE][/FONT]
    [FONT=Courier New][SIZE=2][COLOR=#0000ff]      for[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2] c=1:n[/SIZE][/FONT]
    [SIZE=2][FONT=Courier New]          L(c)=input (strcat([/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza a largura(L) da camada n('[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2],num2str(c),[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]') da parede W('[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2],num2str(I),[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'), L: '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]));[/SIZE][/FONT]
    [SIZE=2][FONT=Courier New]          K(c)=input (strcat([/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza o valor da condutibilidade térmica(K) da camada n('[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2],num2str(c),[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]') da parede W('[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2],num2str(I),[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'), K: '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]));[/SIZE][/FONT]
    [FONT=Courier New][SIZE=2][COLOR=#0000ff]      end[/COLOR][/SIZE][/FONT]
    [SIZE=2][FONT=Courier New][COLOR=#0000ff]end[/COLOR][/FONT][/SIZE]

    Está ai o k pretendo e um pouco mais completo,kem tiver matlab pode correr o programa.Mas agora tenho o problema do "n" k apenas assume o 1ºvalor k o utilizador define, assim quando temos 2 paredes e elas têm "n"(camadas) diferentes so vai pedir o "L" e o "K", "n" vezes.
    Ex: W=2
    A(1)=21
    n(1)=1
    L(1)=22
    K(1)=35;
    A(2)=22
    n(2)=2
    L(2)=24
    K(2)=23
    faz isto mas devia ainda pedir outro L(2)=? e outro K(2)=?, pk a 2ªparede tem 2 camadas(n).

    Fiz os possiveis por me fazer entender.:D

    cumps
     
  14. Baderous

    Baderous Banido

    O que tu queres dizer é que o 'c' devia começar sempre com o valor 1 sempre que começasse o ciclo interior. Ou seja era esperado algo do género:

    Ex: W=2
    A(1)=21
    n(1)=1
    L(1)=22
    K(1)=35;
    A(2)=22
    n(2)=2
    L(1)=12
    K(1)=15

    L(2)=24
    K(2)=23

    O que está a vermelho é o que não está a aparecer certo?
    Só que não encontro erros no código. Será por estares a usar o 'c' e o 'n' em minúscula?
    A mim (feito em C tal e qual como o teu está) deu-me tudo bem...
     
  15. peters_b

    peters_b Power Member

    O 'c' só lá está para aparecer os números correctos no texto a apresentar mas experimentei trocar e não resultou.
    Se no primeiro 'n' colocarms '1' e no segundo 'n' colocarms '2' ele so apresenta uma vez o 'L' e o 'K' em vez de apresentar 2 vezes,o k eu penso é k ele definiu o n=1 e n o altera quando escolhems n=2.
    Mas amanha tiro esta duvida com o prof.
    Isto já me está a dar a volta à cabeça.

    cumps
     
  16. c1t1z3n

    c1t1z3n Power Member

    aha ja descobri...:D:

    o teu "numero de camadas" n(I) é um vector, ou seja:
    se a parede 1 tem 2 camadas: I=1 e n(I)=2
    se a parede 2 tem 3 camadas: I=2 e n(I)=3
    ficas com n = [2,3]

    ao fazeres: for c=1:n o matlab vai fazer (por omissão): c=1:n(1)

    por isso, e uma vez que o 2º for se encontra dentro do primeiro pode fazer for c=1:n(I), que te vai buscar o valor correcto:

    fica então:
    Código:
     W=input ('Introduza o número de paredes, W: ');while(W<=0 || W>4) 
    W=input ('Introduza valor correcto para o número de paredes, W: ');
    end
    for I=1:W
       A(I)=input (strcat('Introduza a área da parede, A(',num2str(I),'): '));
       n(I)=input (strcat('Introduza o número de camadas da parede, n(',num2str(I),'): '));
          for c=1:n(I)
              disp(c)
              L(c)=input (strcat('Introduza a largura(L) da camada n(',num2str(c),') da parede W(',num2str(I),'), L: '));
              K(c)=input (strcat('Introduza o valor da condutibilidade térmica(K) da camada n(',num2str(c),') da parede W(',num2str(I),'), K: '));
          end
    end 
     
    Última edição: 12 de Dezembro de 2007
  17. peters_b

    peters_b Power Member

    Era msm isso,apenas (I) e fazia o k eu keria, impresionante...loool
    Muito obrigado.;)

    cumps
     
  18. peters_b

    peters_b Power Member

    Espero k seja a minha ultima dúvida...
    Código:
    [FONT=Courier New][SIZE=2]
    T1=input ([/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza valor da temperatura do ar interior, T1: '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]);
    T2=input ([/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza valor da temperatura do ambiente exterior, T2: '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]);
    W=input ([/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza o número de paredes, W: '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]);
    [/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]while[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#000000](W<=0 | W>4) [/COLOR]
    W=input ([/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza valor correcto para o número de paredes, W: '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]);
    [/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]end
    for[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#000000] I=1:W[/COLOR]
            A(I)=input (strcat([/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza a área da parede, A('[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2],num2str(I),[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'): '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]));
            n(I)=input (strcat([/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza o número de camadas da parede, n('[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2],num2str(I),[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'): '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]));
    [/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]     while[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2](n<1 | n>3)
                  n(I)=input (strcat([/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza um valor correcto para o número de camadas da parede, n('[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2],num2str(I),[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'): '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]));
    [/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]     end
    [/COLOR][/SIZE][/FONT][FONT=Courier New][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]     for[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2] c=1:n(I)
                 L(c)=input (strcat([/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza a largura(L) da camada n('[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2],num2str(c),[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]') da parede W('[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2],num2str(I),[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'), L: '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]));
                 K(c)=input (strcat([/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza o valor da condutibilidade térmica(K) da camada n('[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2],num2str(c),[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]') da parede W('[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2],num2str(I),[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'), K: '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]));
    [/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]     end
    end[COLOR=white]
    [/COLOR]
    A questão está quando eu introduzo um valor não válido para o 'n' ele apresenta a mensagem a pedir ao utilizador para introduzir um valor correcto mas apenas apresenta no primeiro n,ou seja se tiverms 2 paredes(W) tms d ter 2 'n's mas o prog so diz exa msg para o primeiro 'n' e se introduzirms um valor não valido para o 2º'n' ele deixa passar e n dá erro.
    Alguém sabe como resolver isto?

    Obrigado e pexo desculpa estar a chatear-vos otra vez.

    cumps
    [/COLOR][/SIZE][/FONT]
     
  19. c1t1z3n

    c1t1z3n Power Member

    trata-se do mesmo erro por causa do 'n' ser um vector

    se puseres:

    Código:
    [FONT=Courier New][SIZE=2]while (n(I)<1 | n(I)>3)
    n(I)=input (strcat([/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'Introduza um valor correcto para o número de camadas da parede, n('[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2],num2str(I),[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#a020f0]'): '[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]));[/SIZE][/FONT]
    em principio terás o problema resolvido ;)
     
  20. peters_b

    peters_b Power Member

    Obrigado pela ajuda que me deram.O trabalho ja foi entregue vms la a ver o k vai ser.

    Obrigado;)

    cumps
     

Partilhar esta Página