Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

nennas

dev c++

Mensagens Recomendadas

nennas

Eu estou a começar a em C e atrves dos post daqui descobri que umas da melhores ferramentas para trabalhar em c era o dev c++. Porém agora tenho um pequeno problema que é assim , eu começei com aqueles programa "hello world" somar variaveis ler variaveis e imprimilas no ecra. Só que agora quando ja estou a usar dois ciclos for e uma matrix, ele a compilar não dá erros so que quando vai a abrir a linha de comandos diz-me apareçe uma mensgem do windows a dizer que o progrma deixou de funcionar e feicha-me a linha de comandos sendo assim imposivel saber se o progama esta a fazer o que quero ou não. Eu tenho o seven será que alguem de voçes me pode ajudar.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nennas

[code  #include <stdio.h>
    int main()   
    {   
         int i,d, a,a1,num,x;
         int  tab[4] [num] ;  
        /*o a instante inicial do roubo , a1 instante final do roubo, num é o numero de seções a ser analisado*/
        scanf("%d",&a);
        scanf("%d",&a1);
        scanf("%d",&num);
   for(i=1;i<=num;i++)
    {
                     for(d=1;d<=3;d++)
                     scanf("%d",&tab[d][i]);
    }   
    return 0;
         getchar();
    }
       ]

Esta aqui é um codigo simples

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KiNgPiTo

Em 1º lugar, estás a declarar uma matriz cujo tamanho é [4][num], sem que num tenha um valor ainda...

Em 2º lugar, os arrays começam com

[0][0]

, logo é boa pratica teres os fors tambem a começarem em 0 e a terminares em d<4..

E tens um getchar() depois do return, onde a função termina...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nennas

Já agora obrigado se mudar o num para um numero ele ja não me encrava.

Já esta resolvido agradeço a todos que me ajudaram.

mas ja agora so mais uma coisinha.

  #include <stdio.h>
    int main()   
    {   
         int i,d, a,a1,num,x;
          
        /*o a instante inicial do roubo , a1 instante final do roubo, num é o numero de seções a ser analisado*/
        scanf("%d",&a);
        scanf("%d",&a1);
        scanf("%d",&num);
   int  tab[num] [2] ; 
   
   for(i=0;i<num;i++)
    {
    
                     for(d=0;d<=2;d++)
                     scanf("%d",&tab[i][d]);
    }   
    
    
      for(i=0;i<num;i++)
    {
    
                     for(d=0;d<=2;d++)
                     {
                      printf("na posicao %d e %d o numero e %d\n",i,d,tab[i][d]);
  
    }   
}
    
   scanf("%d",&a);
    return 0;
         
    }
       

Supostamente o programa devia estar a a prencher vema a matrix mas se eu meter que qero duas linha e meter assim por exemplo.

12 23 24

12 45 46

ele mostra-me assim

12 23 12

12 45 46

Em que o primeiro 12 devia ser u 24.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pinguim

#include <stdio.h>

int main()   
{   
int i,d, a,a1,num,x;	/*não há erro aqui, mas em que ponto estas a usar a variavel x?*/

scanf("%d",&a);
scanf("%d",&a1);
scanf("%d",&num);

int tab[num][2];	/*Não só não podes declarar aqui uma variavel como tambem tens de usar um valor definido. Como já te explicaram, 'num' não tem nenhum valor ainda e como tal eh impossivel criar essa matriz*/

for(i=0;i<num;i++)
{
	for(d=0;d<=2;d++)
		scanf("%d",&tab[i][d]);
}
       
for(i=0;i<num;i++)
{
	for(d=0;d<=2;d++)
		printf("na posicao %d e %d o numero e %d\n",i,d,tab[i][d]);
}

return 0;

scanf("%d",&a);	/*Este scanf() está a ser feito depois do return 0 (que termina o teu programa). Logo nunca vai ser executado, não fazendo sentido estar aqui. E qual eh o objectivo deste ultimo scanf()? terminar o programa depois de ser premida uma tecla, eh isso?*/
}

Isto é o teu programa, mais organizado...

Comentei alguns erros básicos soh para teres uma pequena noção

Já agora, qual eh o objectivo do teu programa?

Espero poder ajudar. Tenta expor o teu problema melhor, primeiro


"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pinguim

Em relação ao Dev c++ tambem desconheço, e se alguem poder esclarecer essa duvida esteja ah vontade, que eu aproveitaria tambem :D


"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nennas

Se calhar é um pouco demais para min mas ja estava a fazer um progrma do topas, e ja o consegui fazer só me falata mesmo o promenor que é como é que vou dizer o numero de linhas da matriz se é o utilizador que me dá esse valor alguma ideia para fazer isso. Já agora eu estou mito habituado a programar em vb.net e la eu posso declarar uma variavel quase onde quero mas aqui no C não é evm assim não é?.

Não a posso declara depois de o utilizador me der o valor de num?

  #include <stdio.h>
    int main()   
    {   
         int i,d, a,a1,num,x,y;
  int  tab[5] [3] ; 
   int vect[5];
        

/*o a instante inicial do roubo , a1 instante final do roubo, num é o numero de seções a ser analisado*/
        scanf("%d",&a);
        scanf("%d",&a1);
        scanf("%d",&num);
   for(i=0;i<num;i++)
    {
                     for(d=0;d<3;d++)
                     scanf("%d",&tab[i][d]);
    }   
    
    y=0;
    for (d=0;d<num;d++)
    if ((tab[d][1] < a1 ) && ((tab[d][2]) > a))

{
  y++;
vect[y-1]=tab[d][0];

}
for(d=0;d<y-1;d++)
  for (i=d+1;i<y;i++)
      if (vect[d] == vect[i])
      y--;
printf("%d\n ",y);     
   scanf("%d",&a);
    return 0;    
    }
       

Prontos o codigo esta a dar so que eu inventei um pouco pq aquele onde esta 5 eu nao sei aquele valor pois é o utilizador que me o dá como e que posso resolver isso será que alguem me pode ajudar pf?

Muito obrigado por toda a ossa ajudada prestada ate agora.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pinguim

qual eh o objectivo do teu programa? :/

para fazeres isso, tens de alocar memoria... se não tens conhecimentos para isso, eh um pouco dificil estar-te a ensinar a faze-lo...

Seja como for, de novo, expõe melhor a tua situação, talvez haja outra maneira...


"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nennas

O meu problema era o do topas de Problema de 2006 o A . Já agora ja sei mais ou menos como resolver o problema em vez de por os dados na matrix trata-los logo isto é ver logo se é suspeito ou não.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pinguim

... Eu so quero saber o que queres que o teu programa faça e em que contexto, para podermos ver o melhor algoritmo

Eu nem sei o contexto do teu problema, ainda n consegui perceber sequer o problema que te foi colocado

Ou isso ou estou mesmo lento hoje, mas não te consigo ajudar sem saber em que ajudar


"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pinguim

Já agora ja sei mais ou menos como resolver o problema em vez de por os dados na matrix trata-los logo isto é ver logo se é suspeito ou não.

"Trata-los logo, isto é ver logo se é suspeito (!?) ou não"?


"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nennas

Primeiro ninguém me deu o código, estou a tentar aprender c e resolvi tentar experimentar alguns exercícios do topas.

O objectivo de exercício é assim.

Uma empresa de software sofreu um ataque informático, e suspeita dos funcionarios. A único que dado que tem é a hora do ataque em minutos (200 345). Na primeira linha do imput da o momento inicial do ataque e o momento final do ataque, na segunda linha o numero de secções a considerar, nas restantes n linhas aparecem as respectivas secções dos funcionarios. Em cada linha tem o numero do funcionario o instante final e o instante final da sua secção.No output deve aparecer o numero de suspeitos.

exemplo

Input

2574 3390

6

10 1760 2330

2 1761 2574

13 2341 2522

10 3377 4885

3 3393 7811

1 4173 4814

Output

1

Ja pos ai entao o problema.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pinguim

o que define um suspeito eh se o intervalo de tempo em que aconteceu o ataque esta incluido COMPLETAMENTE no tempo de secção de um funcionario

ou seja

if (secção.tempo_inicial<=ataque.tempo_inical) && (secção.tempo_final>=ataque.tempo_final)

    num_suspeitos ++;

basicamente é isso que define um suspeito

fora isso, o teu problema era so criar um array com o numero de posições consoante o numero de secções especificadas pelo utilizador...

eh esse o teu problema não eh?

já agora... eles não especificam limites no teu programa, do genero

"eh garantido que o numero de secções não eh menor que 1 nem maior que 1000" (por exemplo)?


"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pinguim

Caso não digam que existe essa limitação, e se tu não tens conhecimentos em como alocar memoria, cria um array simplesmente com limites...

Entendo que te limita o programa, mas se não tens conhecimentos o maximo que podes fazer eh isso... 1000 posições no array mais que te chegam, n tou a ver haver tantas secções... como tb em termos de memoria o teu programa não ocupa quaze nada, tb n tem mal :thumbsup:


"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nennas

so diz que a empresa não tem mais de 100 funcionarios. So que um funcionario pode ter mais que uma secção, mas isto tambem não e nenhum concurso por isso posso aldrabar um pouco e por array com 100 posições obrigado pela ajuda . Hoje ja não fasso mas depois vou compor o meu codigo e por ai a resolução e se puderes dispor so um pouco do teu tempo dizes o que achas.

Obrigado a todos pela a vossa ajuda.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pinguim

ah vontade...

tenta sempre resolver o problema que te propõem da melhor maneira, com o conhecimento que tens...

neste caso o unico conhecimento que tens eh arrays, não tens conceitos de memoria dinâmica, portanto simplifica e usa apenas aquilo que sabes :thumbsup:


"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rafn

ah vontade...

tenta sempre resolver o problema que te propõem da melhor maneira, com o conhecimento que tens...

neste caso o unico conhecimento que tens eh arrays, não tens conceitos de memoria dinâmica, portanto simplifica e usa apenas aquilo que sabes :thumbsup:

Boas, eu percebo o intuito de fazeres exercícios para aprenderes e melhorares programação em C mas esse tipo de exercício é sem dúvida nenhuma, tal como ja disseram, feito com uma estrutura de dados e trabalhar com alocação de memória, mallocs, callocs, whatever... devias aproveitar esses exercícios para exercitar ou começares a aprender sobre essas matérias, porque optimizam muito o programa em comparação ao método array.

Em relação ao teu código devido ás normas C89, tens de definir logo o tamanho do array no inicio, é uma solução, por exemplo limitar o número de sessões do programa, a 100 (visto serem 100 funcionários) ou 200 (para caso os funcionários tenham feito login duas vezes), etc...

Aconselhava-te a usar isto ao teu código:

#include <stdio.h>
#include <stdlib.h>
#define MAX_SESSION 100

int main()   
{   
    int i,d, a,a1,num,x,y;
    int  tab[MAX_SESSION] [3]; 

    /* Resto do código */
    
    scanf("%d", &i);
    return 0;
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nennas

Prontos aqui esta o programa a correr sem precisar do malloc.

#include <stdio.h>
    int main()   
    {   
       int d, i,a,a1,num,x,y,cli,temp1,temp2;
       int vect[100];
      
        scanf("%d",&a);
        scanf("%d",&a1);
        scanf("%d",&num); 
        d=1;
        y=0;
        while (d<=num)
             { 
                 scanf("%d",&cli);
                 scanf("%d",&temp1);
                 scanf("%d",&temp2);
                 if ((temp1 < a1 ) && (temp2 > a))
                     {
                        y++;
                        vect[y-1]=cli;
                     }
    
                 d++;
             }
        for(d=0;d<y-1;d++)
           for (i=d+1;i<y;i++)
               if (vect[d] == vect[i])
                     y--;
        printf("%d\n ",y);     
        scanf("%d",&a);
        return 0;    
    }

(um apart, como fazem para o vosso código ficar as cores)

Prontos consegui por o código a funcionar sem precisar do malloc, contudo noutros programas posso não encontrar solução assim tão fácil por isso se houver algum tópico ou conhecerem um bom tutorial sobre malloc agradecia muito.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Para pôr o código às cores vais à caixa que diz "Inserir Código" e escolhes a linguagem que queres, depois é só copiares o código para dentro das tags.

Quanto a alocação dinâmica tenho de te fazer uma pergunta, já trabalhas com ponteiros?


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nennas

Como disse antes estou a aprender do zero, já agora para que serve ponteiros. Se houver algum tópico sobre isso ou assim se me pudesses encaminhar.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Sem saberes trabalhar com ponteiros é muito difícil perceberes alocação dinâmica. O que eu te recomendo, se estás a começar do 0, é a adquirir um livro para ires lendo.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pinguim

concordo com o localhost...

só depois de já teres lido sobre ponteiros e de começares a trabalhar com a memoria directamente em vez de so com os valores das variaveis eq podes começar a entender isso...

procura sobre ponteiros... sabendo o que são ponteiros e para que servem, então aí é facil explicar...

no entanto, deve haver aí carradas de posts com exemplos de ponteiros e ate alocação dinamica... é so procurar


"Rather than continuing to seek the truth, simply let go of your views" - David RossC, C++, C#, Pascal

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.