Hilfe bei kommandozeilenparameter
-
Hallo,
ich hab ein kleines Problem mit der main Kommandozeile.
Hier erstmal der Code:int main(int argc, char *argv[]){ clock_t time1; clock_t time2; int n = atoi(argv[2]); double* A = new double[n]; int s = atoi(argv[3]); srand(s); for(int i=0; i<n; i++) A[i] = rand()*1000.0/RAND_MAX; time1=clock(); if (argv[1][0]=='m') mergesort(A,n); else if (argv[1][0]=='i') insertionsort(A,n); else if (argv[1][0]=='h') heap_sort(A,n); else if (argv[1][0]=='b') insertionsort2(A,n); time2=clock(); if (argv[4][0]=='p') for(int j=0;j<n;++j){ cout<<A[j]<<" "; } else if (argv[4][0]=='t') cout<<(time2-time1)/CLOCKS_PER_SEC<<endl; delete[] A; system("pause"); return 0; }
Ich möchte der main mit argv[1] übergeben, mit welchem sortieralgorithmus er sortieren soll(m=mergesort, i=insertionsort, b=insertion mit bin. Suche, h=heapsort), mit argv[2] die länge des arrays, mit argv[3] den random seed und mit argv[4] die ausgabe(p=sortiertes array, t=laufzeit).
Das Problem ist nun, dass wenn ich in der Konsole das programm mit
i 10000 15 t
aufrufe, es klappt, aber bei
m 10000 15 t
bzw.
h 10000 15 t
nicht klappt. Hingegen funktioniert
m 100000 15 t
, aber
i 100000 15 t
nicht.
Ich weiß echt nicht, was das Problem sein könnte.
Hier der Code von den Sortierverfahren, wenn benötigt...ich denke aber nicht, dass es hieran liegt, da diese richtig sortieren.#include <iostream> #include <cmath> #include <ctime> #include <cstdlib> using namespace std; //mergesort void merge ( double* a, double* b, double* c, int na, int nb) { int i=0,j =0; for ( int k =0;k<na+nb ;++ k) { if (i >=na ) c[k]=b[j ++]; else if (j >=nb ) c[k]=a[i ++]; else if (a[i]<=b[j]) c[k]=a[i ++]; else c[k]=b[j ++]; } } void mergesort ( double* c, int n) { int na=n/2; int nb=n-na; double* a=new double[na]; for ( int i =0;i<na ;++ i) a[i]=c[i]; double* b=new double[nb]; for ( int j =0;j<nb ;++ j) b[j]=c[j+na ]; if (na >1) mergesort (a,na); if (nb >1) mergesort (b,nb); merge (a,b,c,na,nb); delete[]a; delete[]b; } //binäre suche int _find ( double* a, int l, int r, double x) { if (l>r){ if (x>=a[r]) return r+1; else return l; } int m=(l+r) /2; if (x==a[m]) return m+1; else if (x<a[m]) return _find (a,l,m -1,x); else return _find (a,m+1,r,x); } //insertion sort ohne und mit binärer suche void insertionsort ( double* a, int n) { for ( int i =1;i<n ;++ i) { double x=a[i]; int j; for (j=i;j >0 && a[j -1] >x;--j) a[j]=a[j -1]; a[j]=x; } } void insertionsort2 ( double* a, int n) { for ( int i =1;i<n ;++ i) { double x=a[i]; int p=_find(a,0,i-1,x); for (int j=i;j>p;--j) a[j]=a[j -1]; a[p]=x; } } //heapsort int vater(int i){ return (i-1)/2; } int linkes_kind(int i){ return 2*i+1; } int rechtes_kind(int i){ return 2*i+2; } bool hat_kinder(double* H, int i, int n){ if(0<=linkes_kind(i) && linkes_kind(i)<n) return true; else return false; } int groesstes_kind(double* H, int i, int n){ int g=linkes_kind(i); if (rechtes_kind(i)<n && H[rechtes_kind(i)]>H[g]) g=rechtes_kind(i); return g; } void heapify(double* H,int i, int n){ int k=i; double x=H[k]; while (hat_kinder(H,k,n)){ int g=groesstes_kind(H,k,n); if (x<H[g]){ H[k]=H[g]; k=g; } else break; } H[k]=x; } void heap_erzeugen(double* H, int n){ int H_groesse=n; int i=vater(n-1); while (i>=0){ heapify(H,i,n); i=i-1; } } void heap_sort(double* H, int n){ double temp; heap_erzeugen(H,n); int i=n-1; int l=n; while (i>0){ temp=H[0]; H[0]=H[i]; H[i]=temp; i-=1; l-=1; heapify(H,0,l); } }
Ich hoffe ihr könnt mir helfen, auch wenns ein wenig viel ist.
-
Was klappt nicht und wie äußert sich das?
Nach dem Threadtitel meint man, die Übernahme der Parms schlägt fehl.
Die sollte aber klappen.
-
hmmm wow...als ich alle daten nochmal testweise eingeben wollte, um das hier zu posten, klappte es auf einmal....anscheinend habe ich wohl fehler bei der eingabe gemacht
sry für den post, aber scheint jetzt doch alles zu funktionieren