Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » #define

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
02.07.2004, 21:45 Uhr
~Sloth
Gast


Also folgendes Problem, ich muss n prog machen, dass primzahlen ausgibt. Alles schön und gut - funtzt soweit!!!
Aber ich dachte wenn ich jetzt bei define n größeren Wert eintrage würde er auch weiter ausgeben - tut er aber nicht :(. Hab ich beim define was falsch???


C++:
#include "stdafx.h"
#define anz 100

void main(int argc, char* argv[])
{
    char prim[anz];
    int k=0;
    for(int f=0;f<anz;f++)
        prim[f] = 'Y';

    prim[0] = 'N';
    
    for(int i=0;i<anz;)
        prim[i+=2]='N';
    
    for(int j = 3; j<anz;j++)
    {    
        k=0;
        if(prim[j] =='Y')
            for( k = j; k<anz;)
                prim[k+=j] = 'N';
    }
    
    for(k=1; k<anz;k++)
        printf("%i = %c\n", k, prim[k]);
}


Dieser Post wurde am 02.07.2004 um 21:50 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.07.2004, 21:53 Uhr
Pablo
Supertux
(Operator)


1. Die main Funktion soll mit int deklariert werden und nicht mit void (hast schließlich in ANSI Forum gepostet)

Was genau passiert? Bleibt das Programm bei einer Zahl stehen, oder was?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.07.2004, 07:33 Uhr
Tommix



Hallo,
was ich auf den ersten Blick sagen würde:

C++:
    for(int i=0;i<anz; )
        prim[i+=2]='N';


und weiter unten noch mal ähnlich ist nicht ok. Du belegst unter Umständen mit prim[ i+2 ] eine Variable ausserhalb des deklarierten Bereiches, da ja bereits i <= anz und somit i+2 > anz möglich ist. Das hat mit der Größe von anz gar nichts zu tun. Bei mir stürzt das programm bereits in der geposteten Form ab (ich soll mich an den Hersteller wenden )

Gruss Tommix

Dieser Post wurde am 03.07.2004 um 07:33 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.07.2004, 09:08 Uhr
RedEagle



mal ne frage am rande: gibt es einen unterschied zwischen "#define var 5" und "const int var = 5"????
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.07.2004, 11:44 Uhr
~canvasmaler
Gast


Das #define wird vom Präprozessor (oder so) vor dem Compilieren in den definierten Token umgewandelt, das const int ist eine normale Konstante.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.07.2004, 11:52 Uhr
Spacelord
Hoffnungsloser Fall


Der Hauptunterschied ist das der Compiler für die const Variante eine Typüberprüfung durchführen kann.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
03.07.2004, 15:27 Uhr
stephanw
localhorst


Ja! Ohne den Fehler jetzt zu sehen, das ist eines der perfekten Beispiele, wo man Macros absolut sinnlos verwendet.

statt #define anz 100
schreibt man besser const int anz = 100; und erfreut sich daran, dass der Compiler einem evtl. Fehler besser anzeigt oder es zu weniger Fehlern kommt.


--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
03.07.2004, 15:42 Uhr
~Sloth
Gast


Also meint ihr das so :



C++:
#include "stdafx.h"


void main(int argc, char* argv[])
{
    const int anz=1000;
    char prim[anz];
    int k=0;
    for(int f=0;f<anz;f++)
        prim[f] = 'Y';

    prim[0] = 'N';
    
    for(int i=0;i+2<anz;)
        prim[i+=2]='N';
    
    for(int j = 3; j<anz;j++)
    {    
        k=0;
        if(prim[j] =='Y')
            for( k = j; k+j<anz;)
                prim[k+=j] = 'N';
    }
    
    for(k=1; k<10;k++)
        printf("%i  = %c\n", k, prim[k]);

    for(k=10; k<anz;k++)
        printf("%i = %c\n", k, prim[k]);



Dann hätte ich auch nur noch 2 kleine fragen, kann mir einer erklären wo der unterschied zwischen const int und int ist? Meine zweite Frage wäre dann ob jemand n funtzendes Prog hat, damit ich mal weiß ob meins die richtigen zahlen ausgibt.

Dieser Post wurde am 03.07.2004 um 18:18 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
03.07.2004, 15:44 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hab noch nicht reingeguckt aber das hier soll angeblich funzen
www.volkard.de/prime.rar
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
03.07.2004, 16:06 Uhr
0xdeadbeef
Gott
(Operator)


So würde ich das machen:

C++:
#include <stdio.h>
#include <string.h>

int main() {
  const size_t anz = 101;

  char primes[anz];
  size_t i, j;

  memset(primes, (int) 'Y', anz);
  primes[0] = primes[1] = 'N';

  for(i = 2; i < anz; ++i)
    for(j = 2 * i; j < anz; j += i)
      primes[j] = 'N';

  for(i = 1; i < anz; ++i)
    printf("%u: %c\n", (unsigned) i, primes[i]);

  return 0;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: