Vinnaren i pepparkakshustävlingen!
2023-07-24, 14:11
  #13
Medlem
SvenHelsings avatar
Citat:
Ursprungligen postat av PissBuss
Det är ca. alltid svårt, eller så är det trivial kod av ringa omfång.

Snutten du visade är trivial kod av ringa omfång, man ser hela och kan följa referenserna nästan utan att flytta blicken. Det är också i princip lätt att konvertera den till en 'state machine' i ca. vilket annat högnivåspråk som helst, men inte speciellt trevligt i praktiken eftersom du har lagt in evigt loopande i den.
Jag vet att det är fullt möjligt att konvertera den, men jag misstänker att koden skulle se riktigt brutal ut
Citera
2023-07-24, 14:19
  #14
Medlem
PissBusss avatar
Citat:
Ursprungligen postat av SvenHelsing
Jag vet att det är fullt möjligt att konvertera den, men jag misstänker att koden skulle se riktigt brutal ut

Nej, inte speciellt. Det är få och enkla predikat, och få 'states'. Du kan läsa mer och pröva själv genom att kombinera namnet på ditt favoritspråk och termer som 'state machine', 'automata'.

Ute i det vilda är applikationer typiskt sett långt mer komplicerade än den snutten, bl.a. för att man försöker se till att eviga loopar inte kan uppstå och för att den verklighet man gör en modell av är jävligt grötig.
Citera
2023-07-24, 14:37
  #15
Medlem
SvenHelsings avatar
Citat:
Ursprungligen postat av PissBuss
Nej, inte speciellt. Det är få och enkla predikat, och få 'states'. Du kan läsa mer och pröva själv genom att kombinera namnet på ditt favoritspråk och termer som 'state machine', 'automata'.
Inte för att vara otrevlig, men jag känner lite "snacka går ju" över ditt resonemang. Har noll problem med att se en dfa som gör det där, men nu var det inte riktigt en sådan jag menade.

Citat:
Ute i det vilda är applikationer typiskt sett långt mer komplicerade än den snutten, bl.a. för att man försöker se till att eviga loopar inte kan uppstå och för att den verklighet man gör en modell av är jävligt grötig.
Jodå, jag vet. Jag jobbar som utvecklare.
Citera
2023-07-24, 14:58
  #16
Moderator
vhes avatar
Citat:
Ursprungligen postat av nerdnerd
GOTO ska man ju helst inte använda, men jag vet iaf en bank där det används systematiskt i deras COBOL-koder för att snabbt ta sig ur loopar när det blir generalknas.

Man blir förlåten om man döper om goto till throw eller raise, och kallar det hela för "exceptions". Då är det tydligen inte längre ondska ;-)
Citera
2023-07-24, 15:07
  #17
Moderator
vhes avatar
Nej, trött återpostande av Chat GPT-genererad kod undanbeder vi oss. Om tråden specifikt handlar om AI-genererad kod (vilket den här inte gör) kan utdrag vara OK, men inte bara sjok av oformaterad kod utan vidare analys.

Påminner även om kodtaggar. Läs https://www.flashback.org/announcement.php?f=42

/Moderator
Citera
2023-07-24, 15:42
  #18
Medlem
Aransentins avatar
En direktöversättning av koden till C hade sett ut något liknande: https://godbolt.org/z/GWbecs8dq

Att göra koden mer idiomatisk lämnar jag som en övning till läsaren.
Citera
2023-07-24, 21:38
  #19
Medlem
Citat:
Ursprungligen postat av Lund-NoGo-zone
Jo, problemet med GOTO är mycket riktigt att den som använder detta gör det av bekvämlighet och visar att han inte riktigt satt sig in i problemet med vad han ska lösa. Utan provar lite hipp som happ och DÄR fungerade koden! Vilket inte är ett bra sätt att koda.

Problemet är att om den som programmerar på det sättet bara dogmatiskt skippar goto så blir det antagligen samma röra. Man löser alltså inte det problemet genom att bara dogmatiskt förbjuda goto.

Dessutom finns det tillfällen där goto är att föredra och om man då dogmatiskt måste avstå från det så blir man tvungen att använda rätt krystade konstruktioner och då har man ju dogmen inte tjänat något vettigt syfte.

Citat:
Någon datatidning gjorde en kodanalys av apples första IOS. Tänkt dig 1 miljon GOTOs. man förstår varför de stora firmorna har 1000-tals programmerare. För att rätta de andra 1000 programmerarnas fel. IOS hade kunnat skrivas av 5 genier och blivit perfekt, men det fungerar inte så.

Skulle vilja ha källa på det. Vilken datatidning är det som har källkoden till första IOS?

Citat:
Ursprungligen postat av SvenHelsing
Faktiskt är "riktig" spagettikod relativt svår att åstadkomma utan goto.

Det är inte särledes svårt, det gäller bara att vara lite kreativ. Med for-switch kan få samma kodstruktur som med goto med den lilla detaljen att det blir än mer svårläst.
Citera
2023-07-24, 21:49
  #20
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av 53280
Jättegamla basic kod som jag hittade på någonstans på nätet. Hur skulle ni skriva om denna kod i C , så den gick att kompilera med GCC och köra på terminalen i Linux / Mac OS.

Kod:
5 REM Mandelbrot
10 X1=59:Y1=21
20 I1=-1:I2=1:R1=-2:R2=1
30 S1=(R2-R1)/X1:S2=(I2-I1)/Y1
40 FOR Y=0 TO Y1
50 I3=I1+S2*Y
60 FOR X=0 TO X1
70 R3=R1+S1*X:Z1=R3:Z2=I3
80 FOR N=0 TO 30
90 A=Z1*Z1:B=Z2*Z2
100 IF A+B>4 THEN GOTO 130
110 Z2=2*Z1*Z2+I3:Z1=A-B+R3
120 NEXT N
130 IF N=31 THEN PRINT " "; ELSE PRINT CHR$(62-N);
140 NEXT X
150 PRINT
160 NEXT Y
170 END
Känns som en utmärkt övning för ChatGPT.
Jag ser inte framför mig att det är svårt att skriva för hand i C heller.
Vad betyder kolon emellan t.ex. på rad 10, är det som semikolon i c?
Citera
2023-07-24, 22:13
  #21
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av dusugermer
Varsågod:
Bra! Tänk bara om du hade kod-taggat:
Kod:
#include <stdio.h>

int main() {
  
int X1 59Y1 21N;
  
double I1 = -1I2 1R1 = -2R2 1S1S2I3R3Z1Z2AB;

  
S1 = (R2 R1) / X1;
  
S2 = (I2 I1) / Y1;

  for (
int Y 0<= Y1Y++) {
    
I3 I1 S2 Y;
    for (
int X 0<= X1X++) {
      
R3 R1 S1 X;
      
Z1 R3;
      
Z2 I3;
      for (
0<= 30N++) {
        
Z1 Z1;
        
Z2 Z2;
        if (
4) break;
        
Z2 Z1 Z2 I3;
        
Z1 R3;
      }
      if (
== 31)
        
printf(" ");
      else
        
printf("%c"62 N);
    }
    
printf("\n");
  }
  return 
0;

Citera
2023-07-24, 22:15
  #22
Medlem
dusugermers avatar
Citat:
Ursprungligen postat av Enterprise
Tänk bara om du hade kod-taggat:
Kod:
#include <stdio.h>

int main() {
  
int X1 59Y1 21N;
  
double I1 = -1I2 1R1 = -2R2 1S1S2I3R3Z1Z2AB;

  
S1 = (R2 R1) / X1;
  
S2 = (I2 I1) / Y1;

  for (
int Y 0<= Y1Y++) {
    
I3 I1 S2 Y;
    for (
int X 0<= X1X++) {
      
R3 R1 S1 X;
      
Z1 R3;
      
Z2 I3;
      for (
0<= 30N++) {
        
Z1 Z1;
        
Z2 Z2;
        if (
4) break;
        
Z2 Z1 Z2 I3;
        
Z1 R3;
      }
      if (
== 31)
        
printf(" ");
      else
        
printf("%c"62 N);
    }
    
printf("\n");
  }
  return 
0;

Tackar. Insåg det för sent och orkade inte redigera.
Citera
vhes avatar

Moderatormeddelande

Postat av vhe 2023-07-24, 22:17
Moderator
Men för helvete. Använd kodtaggar när ni postar kod. Överträdelse kommer leda till Varning.

/Moderator
2023-07-24, 23:05
  #24
Medlem
Citat:
Ursprungligen postat av 53280
Jättegamla basic kod som jag hittade på någonstans på nätet. Hur skulle ni skriva om denna kod i C , så den gick att kompilera med GCC och köra på terminalen i Linux / Mac OS.

Kod:
5 REM Mandelbrot
10 X1=59:Y1=21
20 I1=-1:I2=1:R1=-2:R2=1
30 S1=(R2-R1)/X1:S2=(I2-I1)/Y1
40 FOR Y=0 TO Y1
50 I3=I1+S2*Y
60 FOR X=0 TO X1
70 R3=R1+S1*X:Z1=R3:Z2=I3
80 FOR N=0 TO 30
90 A=Z1*Z1:B=Z2*Z2
100 IF A+B>4 THEN GOTO 130
110 Z2=2*Z1*Z2+I3:Z1=A-B+R3
120 NEXT N
130 IF N=31 THEN PRINT " "; ELSE PRINT CHR$(62-N);
140 NEXT X
150 PRINT
160 NEXT Y
170 END

Varför chatgpt:ar du inte sådant? Får du ett bra instuderingsexempel i samma vända.
__________________
Senast redigerad av bosscs2 2023-07-24 kl. 23:09.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in