PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C-Sourcen portieren --> Syntax Errors



raoulduke
17.07.03, 08:22
Hi Jungs !

Habn kleines Problem, da ich absoluter
Dummy bin, was C angeht. Ich hab nen
Quellcode, in C geschrieben, der einst
für eine IBM Mainframe (z/OS - USS)
geschrieben wurde. An und für sich sollte
die Portierung kein Thema sein, gcc
gibt nur leider Syntaxfehler zurück und
ich kann damit leider kaum was anfangen.
Es sind um genau zu sein 4 Programme,
die CPU bzw. Speicherintensiv rechnen.
Ich poste euch mal die sourcen, vielleicht
kann mir ja jemand weiterhelfen !?
( 'gcc -o bench001 bench001.c' <--stimmt schon oder ? )

bench001.c
_______________________________________________
#include <stdio.h>

int main(int argc, char **argv)
ä
int i,j,N;
char Flag;

N=0;
Flag='E';

sscanf(argv??(1??),"%d",&N);
if(N>0)Flag='N';

if(Flag=='E') ä
printf("Usage: bench001 NÖn");
printf("N (integer) = number of iterationsÖn");
return 0;
ü;

j=1;
for(i=1;i<=N;i++) ä
j=j+i;
j=i*j;
j=j-i;
j=j % i;
j+=1;
ü;

return 0;
ü
_______________________________________________

bench002.c
_______________________________________________

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
ä
int i,j,N,B,C,S;
char Flag;
char *buffer,*heap;

N=0;
B=0;
S=0;
C=0;
Flag='E';

if(argc==5) ä
Flag='N';
sscanf(argv??(1??),"%d",&B);
if(B==0)Flag='E';
sscanf(argv??(2??),"%d",&C);
if(C==0)Flag='E';
sscanf(argv??(3??),"%d",&S);
if(S==0)Flag='E';
sscanf(argv??(4??),"%d",&N);
if(N==0)Flag='E';
ü;

if(Flag=='E') ä
printf("Usage: bench002 B C S NÖn");
printf("B (integer) = blocksizeÖn");
printf("C (integer) = number of blocksÖn");
printf("S (integer) = steppingÖn");
printf("N (integer) = number of iterationsÖn");
return 0;
ü;

buffer=(char *) malloc(B);
heap =(char *) malloc(B*C);

j=0;
for(i=1;i<=N;i++) ä
memcpy(&heap??(j*B??),buffer,B);
j+=S;
j=j%C;
ü;

free(buffer);
free(heap);

return 0;
ü
_______________________________________________

bench003.c
_______________________________________________
#include <stdio.h>

int main(int argc, char **argv)
ä
int i,j,N;
char Flag,ch;

N=0;
Flag='E';

sscanf(argv??(1??),"%c",&ch);
if(ch=='y')Flag='p';
if(ch=='Y')Flag='p';
if(ch=='n')Flag='n';
if(ch=='N')Flag='n';

sscanf(argv??(2??),"%d",&N);
if(N==0)Flag='E';

if(Flag=='E') ä
printf("Usage: bench003 p NÖn");
printf("p (y/n) = print result to stdoutÖn");
printf("N (integer) = sets limit for prime number search to NÖn");
return 0;
ü;

for(i=2;i<N;i++) ä
for(j=2;j<i;j++)
if(i%j==0) break;
if(i==j)
if(Flag=='p')
printf("%d ",i);
ü;

return 0;
ü
_______________________________________________

Bench004.c
_______________________________________________
#include <stdio.h>

typedef unsigned char byte;

const byte Mask??(8??)=ä0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x 80ü;

int main(int argc, char **argv)
ä
int i,j,N;
char Flag,ch;
byte *sieve;

N=0;
Flag='E';

sscanf(argv??(1??),"%c",&ch);
if(ch=='y')Flag='p';
if(ch=='Y')Flag='p';
if(ch=='n')Flag='n';
if(ch=='N')Flag='n';

sscanf(argv??(2??),"%d",&N);
if(N==0)Flag='E';

if(Flag=='E') ä
printf("Usage: bench004 p NÖn");
printf("p (y/n) = print result to stdoutÖn");
printf("N (integer) = sets limit for prime number search to NÖn");
return 0;
ü;

sieve=(byte *) malloc(N/8+1);
for(i=0;i<N/8+1;i++)sieve??(i??)=0;

for(i=2;i<N;i++) ä
if((sieve??(i/8??) & Mask??(i%8??))Ü=0)continue;
if(Flag=='p')printf("%d ",i);
for(j=i+i;j<N;j+=i)sieve??(j/8??)!=Mask??(j%8??);
ü;

free(sieve);

return 0;
ü
_______________________________________________

Vielen Dank schon mal vorab !
Duke

linuxhanz
17.07.03, 08:34
da musste hier posten www.mrunix.de (http://www.mrunix.de)

zander
17.07.03, 09:06
Bei der Übertragung haben sich einige Fehler eingeschlichen: ä,ü sollte {,} sein, ??(,??) ist wohl [,] und Ö ist wirklich \. bench001.c sieht dann z.B. so aus:



#include <stdio.h>

int main(int argc, char **argv)
{
int i,j,N;
char Flag;

N=0;
Flag='E';

sscanf(argv[1],"%d",&N);

if(N>0)Flag='N';

if(Flag=='E') {
printf("Usage: bench001 N\n");
printf("N (integer) = number of iterations\n");
return 0;
}

j=1;

for(i=1;i<=N;i++) {
j=j+i;
j=i*j;
j=j-i;
j=j % i;
j+=1;
}

return 0;
}


Beachte, daß bench001 abstürzen wird, wenn Du keinen Parameter übergibst.

raoulduke
17.07.03, 09:45
Cool, Danke !

Hat funktioniert, aber bei bench002 und bench004
scheints wohl nicht ganz so trivial zu sein !?

Weiß auch warum die Fehler drin sind, falsch
interpretiert beim ftp download (ascii)

Dank dir erstmal !

Duke.

zander
17.07.03, 10:21
Eigentlich schon, bench002.c:



#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
int i,j,N,B,C,S;
char Flag;
char *buffer,*heap;

N=0;
B=0;
S=0;
C=0;
Flag='E';

if(argc==5) {
Flag='N';
sscanf(argv[1],"%d",&B);
if(B==0)Flag='E';
sscanf(argv[2],"%d",&C);
if(C==0)Flag='E';
sscanf(argv[3],"%d",&S);
if(S==0)Flag='E';
sscanf(argv[4],"%d",&N);
if(N==0)Flag='E';
};

if(Flag=='E') {
printf("Usage: bench002 B C S N\n");
printf("B (integer) = blocksize\n");
printf("C (integer) = number of blocks\n");
printf("S (integer) = stepping\n");
printf("N (integer) = number of iterations\n");
return 0;
};

buffer=(char *) malloc(B);
heap =(char *) malloc(B*C);

j=0;

for(i=1;i<=N;i++) {
memcpy(&heap[j*B],buffer,B);
j+=S;
j=j%C;
};

free(buffer);
free(heap);

return 0;
}

raoulduke
17.07.03, 14:57
hast Recht, war mein Fehler !

groß Ü ist ein \
naja jetzt funzts, merci nochmal !

Duke.