Problema informatica

C/C++ este un limbaj multi-paradigmă de nivel mediu, orientat pe obiecte, folosit pe scară largă în industria software datorită echilibrului dintre viteză şi complexitate. Dacă ai nelămuriri în legătură cu acest limbaj sau vrei să ne înveți ceva chiar tu, intră aici.

Problema informatica

Postby eric56 » 08 Jan 2012, 19:47

Se de n.
Formez o matrice patratica.
Se traseaza 2 diagonale cu 0 , gen

n=5

0 1 1 1 0
1 0 1 0 1
1 1 0 1 1
1 0 1 0 1
0 1 1 1 0

partea de sus a diagonalelor o completez cu 1
cea din josul diagonalelor o completez cu 2
iar restul cu 3

m-am gandit sa umplu matricea cu 3, sa trasez diagonalele, adica

  1. for (i=1;i<=n;i++)
  2. for (j=1;j<=n;j++)
  3. a[i][j]=3;
  4.  
  5. for (i=1;i<=n;i++)
  6. a[i][i]=0;
  7.  
  8. for (i=1;i<=n;i++)
  9. a[i][n-i+1]=0;


dar cum completez cele doua parti (sus si jos) ??????? :-??
0,0p / 0 votes
Respecta si vei fi respectat
User avatar
eric56
Bit
 
Joined: 19 Dec 2011
Status: 0

Re: Problema informatica

Postby andreiandreiq » 08 Jan 2012, 20:05

Salut,

E aceiasi problema care a propus-o Vicorico aici (click). Cum i-am zis si lui, uita-te un pic peste topicul acesta (click), chiar dacă e alt limbaj de programare e acelasi principiu.

In cazul in care nu reușești, spune-ne unde te incurci si o sa te ajutam.

Bafta
0,0p / 0 votes
Image
User avatar
andreiandreiq
Word
 
Joined: 30 Dec 2009
Status: 33.33

Re: Problema informatica

Postby eni4ever » 08 Jan 2012, 20:19

Deși sunt de acord cu andrei, văd că este o întrebare destul de frecventă de aceea voi propune următoarea soluție :
  1. for(y=0;y<dim;++y)
  2.  {
  3.   for(x=0;x<dim;++x)
  4.    if(x == y) mat[y][x] = 0;          /* umplem diagonala principala */
  5.    else if(x > y && x < dim - y - 1)  /* regiunea superioara a triunghiului */
  6.      mat[y][x] = 1;
  7.    else if(x < y && x > dim - y - 1)  /* regiunea inferioara a triunghiului */
  8.      mat[y][x] = 3
  9.    else mat[y][x] = 2;                /* restul de elemente */
  10.   mat[y][dim - y - 1] = 0;            /* diagonala secundara */
  11.  }

Totuși, te sfătuiesc (mai convingător de atât nu pot fi) să vizitezi topicul lui DarkByte pentru a înțelege esența.

Spor
0,0p / 0 votes
Image

"Rațiunea vine în umbre scurte numite suferințe." Victor Adăscăliței
"Bender: Anything less than immortality is a complete waste of time.
Zoidberg: Then suicide it is! Step into my office ..." Futurama S06E06
User avatar
eni4ever
DWord
 
Joined: 03 Jan 2010
Location: Timișoara
Status: 57.83

Re: Problema informatica

Postby eric56 » 08 Jan 2012, 20:47

Scuze ca nu m-am facut inteles. :D

Mie trebuia sa-mi afiseze

pt n=3

0 1 0
3 0 3
0 2 0

pt n=5

0 1 1 1 0
3 0 1 0 3
3 3 0 3 3
3 0 2 0 3
0 2 2 2 0

pt programul tau, eni4ever imi afiseaza

pt n =5

0 1 0 2 0
2 0 2 0 2
0 3 0 2 2
3 0 3 0 2
0 3 3 3 0

Am citit si tutorialul lui DarkByte dar am intampinat probleme in intelegerea pseudocodului din ultimele 2 coduri. ..
0,0p / 0 votes
Respecta si vei fi respectat
User avatar
eric56
Bit
 
Joined: 19 Dec 2011
Status: 0

Re: Problema informatica

Postby eni4ever » 08 Jan 2012, 21:16

Mă îndoiesc că acesta este codul meu, iar încărcarea corectă a lui 2 și 3 se rezolvă repede de îndată ce înțelegi limbajul.

Postează-ți soluția completă te rog.
0,0p / 0 votes
Image

"Rațiunea vine în umbre scurte numite suferințe." Victor Adăscăliței
"Bender: Anything less than immortality is a complete waste of time.
Zoidberg: Then suicide it is! Step into my office ..." Futurama S06E06
User avatar
eni4ever
DWord
 
Joined: 03 Jan 2010
Location: Timișoara
Status: 57.83

Re: Problema informatica

Postby eric56 » 08 Jan 2012, 21:19

  1. #include<stdio.h>
  2. int main()
  3. {
  4. freopen ("bacmtr10.in","r",stdin);
  5. freopen ("bacmtr10.out","w",stdout);
  6. long n,mat[101][101],i,j,cat,y,x,dim;
  7. scanf ("%ld",&dim);
  8. for(y=0;y<dim;++y)
  9.  {
  10.   for(x=0;x<dim;++x)
  11.    if(x == y)mat[y][x]=0;          
  12.    else if(x > y && x<dim-y-1)  
  13.      mat[y][x]=1;
  14.    else if(x<y&&x>dim-y-1)  
  15.      mat[y][x] = 3;
  16.    else mat[y][x] = 2;                
  17.   mat[y][dim-y-1]=0;            
  18.     }
  19. for (i=1;i<=n;i++){
  20.     for (j=1;j<=n;j++){
  21.         printf ("%ld ",mat[i][j]);}
  22.     printf ("\n");}
  23. return 0;
  24. }
Acum nu mai afiseaza nimic... (se blocheaza undeva)
0,0p / 0 votes
Respecta si vei fi respectat
User avatar
eric56
Bit
 
Joined: 19 Dec 2011
Status: 0

Re: Problema informatica

Postby eni4ever » 08 Jan 2012, 21:20

Cine este n-ul din afișare? Uită-te la secvența de afișare ... în special în regiunea de indexi. Eu folosesc baza 0, tu folosești 1.
0,0p / 0 votes
Image

"Rațiunea vine în umbre scurte numite suferințe." Victor Adăscăliței
"Bender: Anything less than immortality is a complete waste of time.
Zoidberg: Then suicide it is! Step into my office ..." Futurama S06E06
User avatar
eni4ever
DWord
 
Joined: 03 Jan 2010
Location: Timișoara
Status: 57.83

Re: Problema informatica

Postby eric56 » 08 Jan 2012, 21:25

eni4ever wrote:Cine este n-ul din afișare? Uită-te la secvența de afișare ... în special în regiunea de indexi. Eu folosesc baza 0, tu folosești 1.


Adica pozitia libera care o las in for si merg de la (contor=1 contor<=dim),iar tu (contor=0 contor<dim) sau altceva ?
0,0p / 0 votes
Respecta si vei fi respectat
User avatar
eric56
Bit
 
Joined: 19 Dec 2011
Status: 0

Re: Problema informatica

Postby eni4ever » 08 Jan 2012, 21:26

Încearcă cu foaie și pix și vezi dacă există vreo diferență!
0,0p / 0 votes
Image

"Rațiunea vine în umbre scurte numite suferințe." Victor Adăscăliței
"Bender: Anything less than immortality is a complete waste of time.
Zoidberg: Then suicide it is! Step into my office ..." Futurama S06E06
User avatar
eni4ever
DWord
 
Joined: 03 Jan 2010
Location: Timișoara
Status: 57.83

Re: Problema informatica

Postby eric56 » 08 Jan 2012, 22:27

Bine..

incerc acum

-- 08 Jan 2012, 21:01 --

nu am gasit nicio diferenta :-?

-- 08 Jan 2012, 21:27 --

GATA !!! AM GASIT !! PROBLEMA ESTE REZOLVATA !!! !!!!

SA POSTEZ SURSA ? eni ?
0,0p / 0 votes
Respecta si vei fi respectat
User avatar
eric56
Bit
 
Joined: 19 Dec 2011
Status: 0

Re: Problema informatica

Postby eni4ever » 08 Jan 2012, 22:39

Este și asta o obțiune, dar nu și răspunsul corect.
Ceea ce nu observi tu poate fi redus la :
  1. int v[2][2] = {{1,2},         /* accesibile prin v[0][0] și v[0][1]*/
  2.                {3,4}};        /* accesibile prin v[1][0] și v[1][1] */
  3. int y,x;
  4.  
  5. /* modificăm elementele din vector (din bază 0) */
  6. for(y = 0; y < 2; ++y)
  7.  for(x = 0; x < 2; ++x)
  8.   v[y][x] = 2;
  9. /* => v[0][0] = v[0][1] = v[1][0] = v[1][1] = 2 */
  10.  
  11. /* afișăm de la index 1 */
  12. for(y = 1; y <= 2; ++y)
  13.  for(x = 1; x <= 2; ++x)
  14.   printf("%d ", v[y][x]);
  15. /* se va afișa: v[1][1] v[1][2] v[2][1] v[2][2], dar în afară de v[1][1], nu există celelalte elemente : v[1][2] v[2][1] v[2][2] și, deci, se va afișa valori aleatoare pe secvența respectivă */
  16.  


Cel mai corect este să fii consecvent în indexare. Dacă începi de la 1, toată aplicația va accesa elementele de la 1, iar dacă începi de la 0, o ții pe 0. Eu te sfătuiesc să începi de la 0 pentru că altfel, compilatorul tot îți alocă elementele de index [0], chiar dacă tu le folosești doar de la index 1 de unde rezultă o regiune de memorie inutil alocată.

Încearcă să aplici asta în aplicația ta. Să vedem ce obții.

P.S: Pentru comparație, aici este codul folosit pentru a-ți deduce indexii :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int
  5. main(int argc, char *argv[])
  6. {
  7.    
  8.  if(argc != 2)
  9.  {
  10.      printf("Mod de folosire : nume_aplicatie <valoare_pentru_n>\n");
  11.      return 0;
  12.  }
  13.  
  14.  int dim = atoi(argv[1]);
  15.  int mat[dim][dim];
  16.  int y,x;
  17.  
  18.  for(y=0;y<dim;++y)
  19.  {
  20.   for(x=0;x<dim;++x)
  21.    if(x == y) mat[y][x] = 0;                   
  22.    else if(x > y && x < dim - y - 1) mat[y][x] = 1;
  23.    else if(x < y && x > dim - y - 1) mat[y][x] = 3;
  24.    else mat[y][x] = 2;                 
  25.   mat[y][dim - y - 1] = 0;     
  26.  }
  27.  
  28.  for(y=0;y<dim;++y)
  29.  {
  30.   for(x=0;x<dim;++x)
  31.    printf("%-2d ", mat[y][x]);
  32.   printf("\n");
  33.  }
  34.  
  35.  return 0;
  36. }


Urmărește-o, încearcă să o înțelegi și dacă nu reușești, întreabă.

Spor

-- 08 Jan 2012, 21:35 --

Felicitări! Da, te rog!
0,0p / 0 votes
Image

"Rațiunea vine în umbre scurte numite suferințe." Victor Adăscăliței
"Bender: Anything less than immortality is a complete waste of time.
Zoidberg: Then suicide it is! Step into my office ..." Futurama S06E06
User avatar
eni4ever
DWord
 
Joined: 03 Jan 2010
Location: Timișoara
Status: 57.83

Re: Problema informatica

Postby eric56 » 08 Jan 2012, 22:52

  1. #include<stdio.h>
  2. int main()
  3. {
  4. freopen ("loto.in","r",stdin);
  5. freopen ("loto.out","w",stdout);
  6. long n,mat[101][101],i,j,cat,y,x,dim;
  7. scanf ("%ld",&dim);
  8. for(y=0;y<dim;y++)
  9.  {
  10.   for(x=0;x<dim;x++)
  11.    if(x==y)
  12.        mat[y][x]=0;          
  13.    else if(x>y&&x<dim-y-1)  
  14.         mat[y][x]=1;
  15.    else if(x<y&&x>dim-y-1)  
  16.         mat[y][x]=2;
  17.    else mat[y][x]=3;                
  18.         mat[y][dim-y-1]=0;            
  19.     }
  20. for (i=0;i<dim;i++){
  21.     for (j=0;j<dim;j++){
  22.         printf ("%ld ",mat[i][j]);}
  23.     printf ("\n");}
  24. return 0;
  25. }


(EDIT) : Am mers cu 0 ;)
0,0p / 0 votes
Respecta si vei fi respectat
User avatar
eric56
Bit
 
Joined: 19 Dec 2011
Status: 0

Re: Problema informatica

Postby jolgau » 09 Jan 2012, 00:01

Am o intrebare :

Ce inseamna int main(int argc, char *argv[]) ?
0,0p / 0 votes
User avatar
jolgau
Bit
 
Joined: 11 Dec 2010
Status: 0

Re: Problema informatica

Postby DarkByte » 09 Jan 2012, 00:18

Aplicatiile (si comenzile interne) pot primi parametri. Un exemplu destul de cunoscut este comanda format
Ex. format C:

In cazul acesta "C:" este primul parametru (technically, al doilea, dar nu conteaza).

Aplicatiile C / C++ pot folosi parametri folosind argc si argv. argc (argument count) specifica numarul de parametri, iar argv (argument value) este un vector care tine parametrii in sine. Vectorul argv contine argc + 1 parametri (incepand de la 0 - dar pe pozitia 0 este numele executabilului).
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 140

Re: Problema informatica

Postby eni4ever » 09 Jan 2012, 02:53

Pe lângă cele 2 argumente (argc și argv), mai există și un al treilea cunoscut de linux (POSIX >= .1) și Windows și anume envp.
Astfel, este corectă și varianta ;
  1. int main(int argc, char *argv[], char *envp[])

envp va conține informații directe referitoare la variabilele de mediu precum PATH-ul furnizat aplicației. Spun directe pentru că, dacă nu este invocat, aceleași informații se pot obține din funcții de librărie (din stdlib.h).
Wikipedia are o pagină drăguță dedicată acestui topic.

Pentru o înțelegere mai bună, încearcă să compilezi și să analizezi următorul cod :
  1. #include <stdio.h>
  2.  
  3. int
  4. main(int argc, char *argv[], char *env[])
  5. {
  6.  int cnt;
  7.  
  8.  /* afisam argumentele */
  9.  printf("Am primit %d argument(e) : ", argc);
  10.  for(cnt = 0; cnt < argc; ++ cnt)
  11.     printf("[%d] \"%s\"\n", cnt, argv[cnt]);
  12.  
  13.  /* afisam mediul */
  14.  printf("În variabila de mediu cunosc : ");
  15.  cnt = 0;
  16.  while(NULL != env[cnt])
  17.  {
  18.     printf("[%d] \"%s\"\n", cnt, env[cnt]);
  19.     cnt ++;
  20.  }
  21.  
  22.  return 0;
  23. }


Pe mașina mea la o rulare fără parametrii am obținut :
enigma@eniLepton-F3E:~/Projects$ ./main
Am primit 1 argument(e) : [0] "./main"
În variabila de mediu cunosc : [0] "SSH_AGENT_PID=1351"
[1] "GIO_LAUNCHED_DESKTOP_FILE_PID=1963"
[2] "GPG_AGENT_INFO=/tmp/keyring-fCdTJU/gpg:0:1"
[3] "TERM=xterm"
[4] "SHELL=/bin/bash"
[5] "XDG_SESSION_COOKIE=c6a35c85eee355ead132e9b80000000a-1326043324.795914-816184531"
[6] "GNOME_KEYRING_CONTROL=/tmp/keyring-fCdTJU"
[7] "GTK_MODULES=canberra-gtk-module:canberra-gtk-module"
[...]
0,0p / 0 votes
Image

"Rațiunea vine în umbre scurte numite suferințe." Victor Adăscăliței
"Bender: Anything less than immortality is a complete waste of time.
Zoidberg: Then suicide it is! Step into my office ..." Futurama S06E06
User avatar
eni4ever
DWord
 
Joined: 03 Jan 2010
Location: Timișoara
Status: 57.83

Re: Problema informatica

Postby jolgau » 09 Jan 2012, 10:49

Multumesc, am inteles acum.
0,0p / 0 votes
User avatar
jolgau
Bit
 
Joined: 11 Dec 2010
Status: 0


Return to C / C++

Who is online

Users browsing this forum: No registered users and 0 guests