Ancora selection sort C++

  • Autore discussione Autore discussione MPG
  • Data d'inizio Data d'inizio
Pubblicità
Cosi' ??

Codice:
#include <iostream>
#include <ctime>
#include<cstdlib>

using namespace std;

int main()
{int i,j, dim;

srand(time(NULL));



const int n = 5;
int vet[dim];
int tmp;
for ( i = 0; i < dim; i++)
 {
vet[i]=rand();
   }
for ( i = 0; i < dim; i++)
    {
      for(j=i+1; j < dim; j++)
        {
          if(vet[j]<vet[i])
          {
            int tmp =vet[i];
            vet[i]=vet[j];
            vet[j]=tmp;
          }
         }
    }

[/CODE}
 
Cosi' ??

Codice:
#include <iostream>
#include <ctime>
#include<cstdlib>

using namespace std;

int main()
{int i,j, dim;

srand(time(NULL));



const int n = 5;
int vet[dim];
int tmp;
for ( i = 0; i < dim; i++)
{
vet[i]=rand();
   }
for ( i = 0; i < dim; i++)
    {
      for(j=i+1; j < dim; j++)
        {
          if(vet[j]<vet[i])
          {
            int tmp =vet[i];
            vet[i]=vet[j];
            vet[j]=tmp;
          }
         }
    }

[/CODE}
Aggiungi la stampa e guarda se va
 
Se aggiungo cosi?
Codice:
for (int i = 0; i <dim; i++);
    cout<<vett[i];
mi dice che "vett was not declared at this scope" and "expected primary expression before " ; "token"
 
E' cosi':

Codice:
#include <iostream>
#include <ctime>
#include<cstdlib>

using namespace std;

int main()
{int i,j, dim;


{
    srand(time(NULL));



const int n = 5;
int vet[dim];
int tmp;
for(int i=0;i<dim;i++)
{
    vet[i]=rand();
}

for (int i = 0; i < dim; i++)
{
      for(int j=i+1; j < dim; j++)
{
          if(vet[j]<vet[i])
{
            int tmp =vet[i];
            vet[i]=vet[j];
            vet[j]=tmp;
}
}
}
    for (int i = 0; i <dim; i++);
    cout<<vett[i];
}
}
 
E' cosi':

Codice:
#include <iostream>
#include <ctime>
#include<cstdlib>

using namespace std;

int main()
{int i,j, dim;


{
    srand(time(NULL));



const int n = 5;
int vet[dim];
int tmp;
for(int i=0;i<dim;i++)
{
    vet[i]=rand();
}

for (int i = 0; i < dim; i++)
{
      for(int j=i+1; j < dim; j++)
{
          if(vet[j]<vet[i])
{
            int tmp =vet[i];
            vet[i]=vet[j];
            vet[j]=tmp;
}
}
}
    for (int i = 0; i <dim; i++);
    cout<<vett[i];
}
}
Che casino di graffe. Appunto introduci uno scope inutile (che ti avevo detto di non mettere, rifare da 0) e dichiari vet dentro questo scope, uscendo prima della stampa eliminandolo dallo stack
 
Scusa ma come ti ho detto altre volte non sempre capisco quello che mi dici perchè sei ad un livello troppo piu' avanzato dle mio..
MI parli di scope... non so cosa intendi sinceramente..
E poi mi hai detto vedendo quello che ho scritto prima di provare a stampare e cosi' ho fatto... non ho fatto modifiche oltre le ultime 2 righe..
E' questo lo scope?
for(int i=0;i<dim;i++)
{
vet=rand();
}
 
Scusa ma come ti ho detto altre volte non sempre capisco quello che mi dici perchè sei ad un livello troppo piu' avanzato dle mio..
MI parli di scope... non so cosa intendi sinceramente..
E poi mi hai detto vedendo quello che ho scritto prima di provare a stampare e cosi' ho fatto... non ho fatto modifiche oltre le ultime 2 righe..
E' questo lo scope?
for(int i=0;i<dim;i++)
{
vet=rand();
}
Devi prendere un libro di programmazione e ripassare tutto, non puoi metterti a fare algoritmi se non sai che nel for ci vanno i punti e virgola invece delle virgole. . .
 
Scusa ma come ti ho detto altre volte non sempre capisco quello che mi dici perchè sei ad un livello troppo piu' avanzato dle mio..
MI parli di scope... non so cosa intendi sinceramente..
E poi mi hai detto vedendo quello che ho scritto prima di provare a stampare e cosi' ho fatto... non ho fatto modifiche oltre le ultime 2 righe..
E' questo lo scope?
for(int i=0;i<dim;i++)
{
vet=rand();
}
Lo scope è l’ambito di visibilità. Basta che fai una piccola ricerca su Google
C++:
{
    int a; //nello stack, a
    { //nuovo scope
        int b = a; //nello stack, b
    } //via dallo stack, b
    a = b; //non permesso, b non esiste più qui
} //via dallo stack, a
È quello che vai a fare tu per vet
C++:
int main()
{ //scope del main
    int i, j, temp;
    { //perché metti sta parentesi?!?
         const int n = 5;
         int vet[n];
         ...
    } // vet fa ciao ciao dallo stack
//stampa impossibile, vet è andato via.
}
Mettere 4959 parentesi non sembra tutto sto problema, ma poi in realtà sorge lo scope che ti fa fare casini. Usa lo scope quando vuoi variabili temporanee per salvare memoria sullo stack. In sintesi il livello maggiore di scope vede tutto ma i livelli inferiori non vedono le variabili dei maggiori
 
Devi prendere un libro di programmazione e ripassare tutto, non puoi metterti a fare algoritmi se non sai che nel for ci vanno i punti e virgola invece delle virgole. . .

E' ovvio che in un for ho messo la virgola per distrazione, nel for sopra vedi che avevo messo i ; insomma.......
 
Nemmeno cosi' va.... appare la videata nera ma poi mi dice che il programma ha smesso di funzionare.. e ricompare dopo qualche secondo la videata nera solo che l'execution time...

Codice:
#include <iostream>
#include <ctime>
#include<cstdlib>

using namespace std;

int main()
{int i,j, dim;

srand(time(NULL));

const int n = 5;
int vet[dim];
int tmp;
for(int i=0;i<dim;i++)

vet[i]=rand();


for (int i = 0; i < dim; i++)
{
      for(int j=i+1; j < dim; j++)
{
       if(vet[j]<vet[i])
{
        int tmp =vet[i];
        vet[i]=vet[j];
        vet[j]=tmp;
}
}
}
    for (int i = 0; i <dim; i++);

    cout<<vet[i];

}
 
Ultima modifica:
zk6d85.jpg
svrnsn.jpg



Che valore ha la variabile dim... ?
 
Fatto cosi' ma nulla..
Approfitto poi _Achille per chiederti in merito al discorso che mi hai detto:
0 -> n-1 va quanto 1 -> n
me lo puoi spiegare?
Vedi il fatto è che vengono date delle formule o pseudocofiche che siano e poi dobbiamo capirle a casa diventa complesso per chi non è una cima in informatica e ti arrovelli quando magari la spiegazione è semplice, ma è sempre semplice per chi ha l'intuizione come nei problemi di geometria, per cui scusami se a volte ti chiedo cose banali o spiegazioni per te ovvie, ma a questo punto se devo capire per migliorarmi voglio capire bene. E' come quando mi hai detto dello scope, prevedi che uno lo sappia...ma tu forse sei all'università o sei laureato per essere a questo livello...
La pseudocofica dell'allegato del selection sort era appunto
per i=1,2,........n ripeti
tu mi dici per quello di cui sopra
perchè non si mette
for (int i = 1; i < n; i++)
che mi pare sarebbe da mettere seguendo la pseudocodifica?


Codice:
#include <iostream>
#include <ctime>
#include<cstdlib>


using namespace std;


int main()

{int i, j;

srand(time(NULL));
const int n = 5;
int vet[n];
int tmp;
for(int i=0;i<n;i++)
vet[i]=rand();


for (int i = 0; i < n; i++)

{
      for(int j=i+1; j < n; j++)
{
       if(vet[j]<vet[i])
{

        int tmp =vet[i];
        vet[i]=vet[j];
        vet[j]=tmp;

}
}
}

    for (int i = 0; i <n; i++);
    cout<<vet[i];

}
 
Ultima modifica:
Fatto cosi' ma nulla..
Approfitto poi _Achille per chiederti in merito al discorso che mi hai detto:
0 -> n-1 va quanto 1 -> n
me lo puoi spiegare?

Se n=10, scorrere da 0 a 9 o scorrere da 1 a 10 è la stessa cosa, si tratta sempre di 10 elementi.

Vedi il fatto è che vengono date delle formule o pseudocofiche che siano e poi dobbiamo capirle a casa diventa complesso per chi non è una cima in informatica e ti arrovelli quando magari la spiegazione è semplice, ma è sempre semplice per chi ha l'intuizione come nei problemi di geometria, per cui scusami se a volte ti chiedo cose banali o spiegazioni per te ovvie, ma a questo punto se devo capire per migliorarmi voglio capire bene. E' come quando mi hai detto dello scope, prevedi che uno lo sappia...ma tu forse sei all'università o sei laureato per essere a questo livello...

Sarà al terzo o quarto anno di un ITIS...

Che libro di testo utilizzate per C++? Non posso credere non parlino di scope o di "contesto" o ancora "scopo", "ambito",....

La pseudocofica dell'allegato del selection sort era appunto
per i=1,2,........n ripeti
tu mi dici per quello di cui sopra
perchè non si mette
for (int i = 1; i < n; i++)
che mi pare sarebbe da mettere seguendo la pseudocodifica?

Devi entrare nell'ottica che la pseudocodifica non è la codifica; è qualcosa che si avvicina, serve solo per ragionare e per mostrare i passaggi logici. Come già detto anche nell'altro topic - con 70 post - gli array sono "0 based", ovvero partono da 0. La pseudocodifica è evidentemente "1-based", ma il ragionamento è sempre quello: ordinare n elementi.
Come avrai modo di vedere più avanti, ci sono pseudocodifiche che in una decina di righe espongono la risoluzione ad un problema... ma con del codice, specie in C/C++, ce ne vogliono magari il doppio. Si usano spesso semplificazioni usando il linguaggio naturale: ad esempio, nella pseudocodifica hai scritto "ripeti" e non "i++" o "i+1" o altro ancora.
Spero di essere stato chiaro.
 
Pubblicità
Pubblicità
Indietro
Top