Σελίδα 1 από 1

Πρόβλημα στη εντολή rand() γλώσσα C

ΔημοσίευσηΔημοσιεύτηκε: 28 Απρ 2011, 15:03
από Monkey20
Καλησπέρα, θα μπορούσε κάποιος να μου εξηγήσει γιατί η rand() δε λειτουργεί άμα χρησιμοποιήσω τα q και w (q=n+1, w=m+1) ενώ άμα βάλω στη θέση τους n και m λειτουργεί το πρόγραμμα?
Μη δώσετε σημασία στις συναρτήσεις(δεν τισ έβαλα λόγο χώρου) το πρόγραμμα είναι ακομα υπο κατασκευή :geek:

Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>

void tamplo(int n, int m, int **pa);
void narkes(int n, int m, int **pa);

int main(int argc, char *argv[])
{
   int i,j,n,m,o,p,a,b,r1,r2,q,w;
   int **pa=NULL;
   printf("Dwste tis diastaseis tou paixnidiou n x m\n");
   printf("Prosoxh, to tamplo mporei na exei megethos to poly 24x30\n");
   scanf("%d%d", &n,&m);
   printf("Epilxte to epipedo duskolias tou paixnidiou\n");
   printf("Pathste 1 gia eukolo, 2 gia metro, 3 gia duskolo kai 4 gia akatorthoto\n");
   scanf("%d", &o);
   if(o==1)
   {
      p=m*n/8;
   }
   if(o==2)
   {
      p=m*n/7;
   }
   if(o==3)
   {
      p=m*n/6;
   }
   if(o==4)
   {
      p=m*n/5;
   }   
   pa=(int**)calloc(n, sizeof(int*)); //desmeush mnhmhs gia dimiourgia 2d pinaka
   for(i=0;i<n;i++)
   {
         pa[i]=(int*)calloc(m, sizeof(int));
   }
   tamplo(n,m,pa);
   printf("dwste tis syntetagmenes tou tetragwnou pou thelete na anoixete\n");
   scanf("%d%d", &a,&b);
   pa[a][b]=9;
   q=n+1;
   w=m+1;
   for(i=0;i<p;i++)
   {
       do
       {                     
           r1=rand()%q;
           r2=rand()%w;
       }while(r1==a && r2==b);
       pa[r1][r2]=1;//to 10 antiprosopevei tis narkes
   }
   tamplo(n,m,pa);   
   for(i=0;i<n;i++)
   {
       free(pa[i]);
   }
   free(pa);
   system("PAUSE");   
   return 0;
}

Re: Πρόβλημα στη εντολή rand() γλώσσα C

ΔημοσίευσηΔημοσιεύτηκε: 28 Απρ 2011, 15:05
από simosx
Είναι καλό να γράφεις το πρόγραμμα «σε στήλες» για να διαβάζεται καλύτερα.

Μπορείς να το κάνεις και τώρα, με το πρόγραμμα indent,
Κώδικας: Επιλογή όλων
sudo apt-get install indent

και μετά
Κώδικας: Επιλογή όλων
indent -tc /tmp/myprog.c


Έτσι, ο κώδικάς σου είναι

Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>

void tamplo (int n, int m, int **pa);
void narkes (int n, int m, int **pa);

int
main (int argc, char *argv[])
{
  int i, j, n, m, o, p, a, b, r1, r2, q, w;
  int **pa = NULL;
  printf ("Dwste tis diastaseis tou paixnidiou n x m\n");
  printf ("Prosoxh, to tamplo mporei na exei megethos to poly 24x30\n");
  scanf ("%d%d", &n, &m);
  printf ("Epilxte to epipedo duskolias tou paixnidiou\n");
  printf
    ("Pathste 1 gia eukolo, 2 gia metro, 3 gia duskolo kai 4 gia akatorthoto\n");
  scanf ("%d", &o);
  if (o == 1)
    {
      p = m * n / 8;
    }
  if (o == 2)
    {
      p = m * n / 7;
    }
  if (o == 3)
    {
      p = m * n / 6;
    }
  if (o == 4)
    {
      p = m * n / 5;
    }
  pa = (int **) calloc (n, sizeof (int *)); //desmeush mnhmhs gia dimiourgia 2d pinaka
  for (i = 0; i < n; i++)
    {
      pa[i] = (int *) calloc (m, sizeof (int));
    }
  tamplo (n, m, pa);
  printf ("dwste tis syntetagmenes tou tetragwnou pou thelete na anoixete\n");
  scanf ("%d%d", &a, &b);
  pa[a][b] = 9;
  q = n + 1;
  w = m + 1;
  for (i = 0; i < p; i++)
    {
      do
    {
      r1 = rand () % q;
      r2 = rand () % w;
    }
      while (r1 == a && r2 == b);
      pa[r1][r2] = 1;       //to 10 antiprosopevei tis narkes
    }
  tamplo (n, m, pa);
  for (i = 0; i < n; i++)
    {
      free (pa[i]);
    }
  free (pa);
  system ("PAUSE");
  return 0;
}


Η εντολή
Κώδικας: Επιλογή όλων
  system ("PAUSE");

που χρησιμοποιείς δε λειτουργεί σε Linux (είναι για Windows), οπότε μπορείς να την αφαιρέσεις.
Ή, να χρησιμοποιήσεις κάτι σαν
Κώδικας: Επιλογή όλων
#include <stdlib.h>

int main(void)
{
  system("read a");

  return 0;
}


που κάνει το ίδιο πράγμα.

Re: Πρόβλημα στη εντολή rand() γλώσσα C

ΔημοσίευσηΔημοσιεύτηκε: 28 Απρ 2011, 15:08
από Monkey20
Βασικά σε windows το τρέχω...βλέπεις κάποιο πρόβλημα στον τρόπο που χρησιμοποιώτη rand()?

Re: Πρόβλημα στη εντολή rand() γλώσσα C

ΔημοσίευσηΔημοσιεύτηκε: 28 Απρ 2011, 15:11
από simosx
Monkey20 έγραψε:Βασικά σε windows το τρέχω...βλέπεις κάποιο πρόβλημα στον τρόπο που χρησιμοποιώτη rand()?


Δε διάβασα τον κώδικα. Εδώ είμαστε φόρουμ για Ubuntu. Μπορείς να δοκιμάσεις τον προγραμματισμό σε Linux;

Re: Πρόβλημα στη εντολή rand() γλώσσα C

ΔημοσίευσηΔημοσιεύτηκε: 28 Απρ 2011, 15:13
από Monkey20
Οκ με συγχωρείς.