Toon posts:

C++ optellen

Pagina: 1
Acties:
  • 768 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb 2 strings in van 256 karakters hierin bevindt zich een getal. Nu wil ik deze optellen en in een nieuwe string zetten heeft iemand enig idee ??

Bvd , gekkenhuis

Verwijderd

Huiswerk aan het maken joh? Laat eerst maar zien wat je zelf al hebt, dan geven wij wel hints en tips wat je fout doet.

zie ook: [topic=162102/1/255]

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op zondag 16 september 2001 19:51 schreef gekkenhuis78 het volgende:
Ik heb 2 strings in van 256 karakters hierin bevindt zich een getal. Nu wil ik deze optellen en in een nieuwe string zetten heeft iemand enig idee ??
ja :+
oftwel zoals Yarvieh al zegt
kom eens met wat code
Bvd , gekkenhuis
http://gathering.tweakers.net/misc?action=faq&id=3#02
Wij tweakers doen elkaar permanent de groeten. Het is dus niet nodig om steeds ruimteverspillende "greetz [user]" of iets dergelijks onder je post te plakken. Als je perse zoiets wilt kun je daar je signature voor gebruiken (zie latere uitleg).

Doet iets met Cloud (MS/IBM)


  • darkrain
  • Registratie: Augustus 2001
  • Laatst online: 21:20

darkrain

Moderator Discord / General Chat

Geniet. Punt.

ditte is extreem makkelijk maar laat toch maar es zien wat je al hebt

Tweakers Discord


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Het is kwart over een en ik heb al een heel weekend geen C++ meer gezien, dus ik ga maar eens andermans' huiswerk maken... (one time exception to the rule >:) )
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <stdlib.h>

const char     c_String1[256] = "Het eerste getal is 666 en zo";
const char     c_String2[256] = "En 684 is het tweede getal";

int main()
{
char*    l_Pointer1 = c_String1;
char*    l_Pointer2 = c_String2;

while(*l_Pointer1 && *l_Pointer1 < '0' && *l_Pointer1 > '9')
  l_Pointer1++;
while(*l_Pointer2 && *l_Pointer2 < '0' && *l_Pointer2 > '9')
  l_Pointer2++;

if(!*l_Pointer1 || !*l_Pointer2)
  {
  printf("Minstens een van de strings is illegaal\n");
  return -1;
  }

printf("Resultaat: %d\n", atoi(l_Pointer1) + atoi(l_Pointer2));
return 0;
}

As usual 100% guaranteed not tested. Not even compiled. Etcetera.... :)

(btw. lijkt me sterk dat je docent dit pikt zonder uitleg te vragen dus ik zou het goed bestuderen voordat je het inlevert... :Y) )

Professionele website nodig?


Verwijderd

Curry's huiswerk service? *D

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op maandag 17 september 2001 01:23 schreef Yarvieh het volgende:
Curry's huiswerk service? *D
Ach ik zou als docent voor een stel C++ newbies voor bovenstaand programma een 1 geven tenzij er goede uitleg bij komt: en die geef ik dus lekker niet nanananana :P

Lijkt me leuk als een of andere n00b spontaan na 3 lessen C++ met een massale deref-verkrachting zoals dit aankomt, ik zou me als docent te pleuris lachen terwijl ik het voor z'n neus delete :D

Professionele website nodig?


Verwijderd

Grijnz hopen dat ie op een betere school zit dan ik heb gezeten, heb op de mts nog wel lui zien wegkomen met :
code:
1
2
3
4
5
6
7
8
void main()
{
int testwaarde=lees_testwaarde();
if (testwaarde==1)
  printf(goede antwoord voor test waarde 1);
if (testwaarde==2)
  printf(goede antwoord voor test waarde 2);
}

|:(

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 20:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op maandag 17 september 2001 01:22 schreef curry684 het volgende:

[.. knip ..]

printf("Minstens een van de strings is illegaal\n");

[.. knip ..]
oftewel: bel de IND :P

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op maandag 17 september 2001 02:44 schreef OiSyN het volgende:
oftewel: bel de IND :P
code:
1
2
3
printf("Een van de strings is illegaal, bel de FBI om te\n"
     "vragen of hij recent vliegcursussen in Florida\n"
     "heeft gevolgd en een Afghaans paspoort bezit.\n");

;)

Professionele website nodig?


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 19-09 17:21
Aangepaste curry versie (ook negatieve getallen en het resultaat wordt eerst nog in een string gezet):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <stdio.h>

unsigned char str2num(const char *s, long int *buf)
{
    register char  c;
    char       *ptr;
    char         negatief=0;

    ptr = (char *) s;

    if (!buf)
      return 1u;

str2num_loop:
    while ((c = *ptr) && c < '0' && c > '9' && c != '-')
      ptr++;

    if (c == '-' && (c = *(++ptr)) < '0' || c > '9')
    {
        negatief = 1;
      goto str2num_loop;
    }
    else if (!c)
      return 1u;

    *buf = 0;
    while((c = *ptr++) && c >= '0' && c <= '9')
      *buf = *buf * 10 + (c -'0');

    if (negatief)
      *buf *= -1;

    return 0u;
}



char s1[256]  = "hierin staat 321 als een getal";
char s2[256]  = "hierin staat 893 als een getal";
char out[256];

int main(void)
{
    long int sum, getal;

    if (str2num(s1, &getal))
    {
      puts("Geen getal in s1");
      return -1;
    }
    sum = getal;

    if (str2num(s2, &getal))
    {
      puts("Geen getal in s2");
      return -1;
    }
    sum += getal;

    sprintf(out, "De som is: %d", sum);

    puts(out);

    return 0;
}

* Infinitive is eerste jaars Algemene Informatica student en heeft nog geen programmeren gehad :( :)

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 23:15
Misschien gebruikt van algoritmes uit <algorithm> overwegen?
find(...) bijvoorbeeld.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

De threadstarter is weer eens lekker onduidelijk (en dat ie nog maar 8 posts heeft maakt dat niet goed).
Ik heb 2 strings in van 256 karakters hierin bevindt zich een getal.
Bedoel je dat er in die twee strings ergens getalletjes staan die samen een nummer vormen ? Of dat de beide strings reeksen getallen zijn die een nummer vormen ? Of nog iets anders ?

Verwijderd

Inderdaad is de vraagstelling nogal onduidelijk. Zoals ik het lees gaat het hier om het optellen van BigNum cijfers, stringlengte 256 is toch wat groot om gewone 32-bits integers in ascii formaat in op te slaan.

  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Wie is de eerste die ons gaat voorzien van een internationale strings-opteller die "driemiljoen achthonderd drie en twintig" en "five billion and three" bij elkaar op kan tellen?

Verwijderd

Dit is gewoon zielig.... |:(
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
  char *str1, *str2;
  char str3[256];
  int getal3;

  //maak str1/str2

  getal3 = atoi(str1)+atoi(str2);
  sprintf(str3, "%d", getal3);
  printf("str3: %s\n", str3);

  return 1;
}

<zucht>

Als je dat al niet kan |:(

  • hufkes
  • Registratie: Maart 2000
  • Laatst online: 26-08 18:43

hufkes

nee, daar staat niet hufter!

Jongens, jullie denken ook veel te moeilijk, de vraag was
C++ optellen
dus dat wordt gewoon
code:
1
2
3
4
int TelOp(int C)
{
 return C++;
}

;)

Onderstaande signature is al >20jr oud ***hoe dan***
---
Het internet is een veelbelovend medium
....dat maar heel weinig van zijn beloftes nakomt.
Wat weg is... raak je nooit meer kwijt :P


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Infinitive: * Infinitive is eerste jaars Algemene Informatica student en heeft nog geen programmeren gehad :( :)
Als ik jou zo bezig zie denk ik bovendien dat je IP niet echt een uidaging zult vinden :) . ff geduld dus nog :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Op maandag 17 september 2001 13:46 schreef Poohbear het volgende:
Wie is de eerste die ons gaat voorzien van een internationale strings-opteller die "driemiljoen achthonderd drie en twintig" en "five billion and three" bij elkaar op kan tellen?
:+
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <cstring>
#include <algorithm>
#include <iostream>

const char  A[]= "32579234903456123934595467233563448",
        B[]= "24301236912434604352434594255123781237";

void telop(char* result, const char* a, const char* b) {
  const char *ae, *be;
  char *r;
  { std::size_t al= std::strlen(a),
        bl= std::strlen(b);
    ae= a + al, be= b + bl;
    if(al > bl) {
    std::swap(a,b);
    std::swap(ae,be);
    r= result + al;
    } else r= result + bl;
  }
  *++r= '\0';
  int overdr= 0;
  while(ae != a) {
    int som= *--ae + *--be + overdr - ('0' << 1);
    *--r= som % 10 + '0';
    overdr= som / 10;
  }
  while(be != b && overdr) {
    int som= *--be + overdr - '0';
    *--r= som % 10 + '0';
    overdr= som / 10;
  }
  while(be != b) *--r= *--be;
  *--r= overdr + '0';
}

char resultaat[257]; // een char groter dan maximum ivm. overdracht

int main() {
  telop(resultaat,A,B);
  std::cout << A << " + " << B << " =" << std::endl
    << resultaat << std::endl;
  return 0;
}

Werkt alleen met positieve getallen en schrijft afentoe een lelijke '0' als eerste (het alternatief is de hele string te verschuiven als er geen overdracht is, waanzinnig inefficient).

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 17 september 2001 16:17 schreef mietje het volgende:
Werkt alleen met positieve getallen en schrijft afentoe een lelijke '0' als eerste (het alternatief is de hele string te verschuiven als er geen overdracht is, waanzinnig inefficient).
Je kan toch achteraf een substring pakken? :P
Zo inefficient is dat nou ook weer niet...

  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Op maandag 17 september 2001 16:17 schreef mietje het volgende:

[..]
code:
1
boel code

Werkt alleen met positieve getallen en schrijft afentoe een lelijke '0' als eerste (het alternatief is de hele string te verschuiven als er geen overdracht is, waanzinnig inefficient).
Ik bedoelde eigenlijk een opteller die getallen in natuurlijke taal kan verwerken...

  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 05-06 07:37
Op maandag 17 september 2001 14:46 schreef beelzebubu het volgende:
Dit is gewoon zielig.... |:(
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
  char *str1, *str2;
  char str3[256];
  int getal3;

  //maak str1/str2

  getal3 = atoi(str1)+atoi(str2);
  sprintf(str3, "%d", getal3);
  printf("str3: %s\n", str3);

  return 1;
}

<zucht>

Als je dat al niet kan |:(
Dat kan ik niet , is dat zo erg dan ?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 17 september 2001 16:20 schreef Poohbear het volgende:
Ik bedoelde eigenlijk een opteller die getallen in natuurlijke taal kan verwerken...
Ze bestaan al hoor :)

kweet niet waar, maar heb er wel es een gezien.

  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Op maandag 17 september 2001 16:21 schreef ACM het volgende:
Ze bestaan al hoor :)

kweet niet waar, maar heb er wel es een gezien.
Dat weet ik wel, heb er zelf ook wel eens 1 gebouwd (voor engels, tot en met 1 miljoen) Maar 't blijft een leuk projectje...

  • wouzer
  • Registratie: Maart 2000
  • Niet online
Op maandag 17 september 2001 10:14 schreef Infinitive het volgende:
code:
1
2
3
str2num_loop:
...
goto str2num_loop;
But seriously, dit is toch wel heel ernstig fout programmeren uh? C is geen basic, ffs...

Verwijderd

Op maandag 17 september 2001 13:46 schreef Poohbear het volgende:
Wie is de eerste die ons gaat voorzien van een internationale strings-opteller die "driemiljoen achthonderd drie en twintig" en "five billion and three" bij elkaar op kan tellen?
Dit is best grappig om eens te maken... alleen niet echt nuttig :) (Ik zou niet weten waarvoor ik het zou gebruiken (Script misschien ?))

  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Dit is best grappig om eens te maken... alleen niet echt nuttig :) (Ik zou niet weten waarvoor ik het zou gebruiken (Script misschien ?))
Heb het ooit gebruikt in een schrijfstijl-statistiek programma'tje (Dat maakte een profiel van iemands schrijfstijl aan de hand van woordlengte, zinslengte, interpunctie e.d., zodat je, mits je voldoende informatie had, de schrijver van een 'anonieme' tekst kon vinden). De uitgeschreven getallen in zulke teksten zorgden voor teveel 'ruis', dus die moest ik eruit filteren... ik zal van de week eens kijken of ik 'm nog ergens heb liggen.

Verwijderd

Op maandag 17 september 2001 16:19 schreef ACM het volgende:
Je kan toch achteraf een substring pakken? :P
Zo inefficient is dat nou ook weer niet...
Kijk eens naar de code ;) Ik schrijf nu de resultaat-digits rechtstreeks in de resultaatstring, en wel van achter naar voren. Daarvoor moet ik dus eerst die achterste positie berekenen (komt in pointer r). Als later blijkt dat het getal toch niet zo groot wordt (overdr == 0), moet ik dus het tot dan toe berekende resultaat een positie naar voren schuiven. Dat betekent nog een while loopje en maakt de implementatie van telop() altijd een stuk langzamer dan simpelweg een 0 ervoor te plakken om de lengte kloppend te maken :)

Verwijderd

Op maandag 17 september 2001 16:21 schreef razor-x het volgende:

[..]

Dat kan ik niet , is dat zo erg dan ?
:X

Dat is toch geen vraag meer |:(

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 17 september 2001 17:05 schreef beelzebubu het volgende:
:X

Dat is toch geen vraag meer |:(
Je mag het best wat beleefder brengen hoor.

Er zijn ook mensen die geen C kennen (sterker nog, TUDelft geeft er in principe niet echt les meer in, in de propedeuse van Technische Informatica)

Ik heb dit "Wat de topicstarter bedoelt" ook nooit gemaakt en tot dat moment "kan ik het dan ook niet" of wel?

Toevallig weet ik van mezelf dat het me wel zal lukken, maar dat zegt niet dat ik het nu kan.

Al is het alleen maar lang niet zo triviaal als in Java of php of perl ofzo om een variabele van het ene type om te zetten in een van een ander type (atoi enzo, maar wat doe je om er een double van te maken? geen atod).

Verwijderd

Op maandag 17 september 2001 17:20 schreef ACM het volgende:
Je mag het best wat beleefder brengen hoor.
Dit is een geval van de eerste de beste "hoe doe ik ..... in C/C++" website bezoeken.... Overla staat atoi() en vaak ook itoa() (de functie bestaat niet eens in ANSI C!!) uitgelegd.
Al is het alleen maar lang niet zo triviaal als in Java of php of perl ofzo om een variabele van het ene type om te zetten in een van een ander type (atoi enzo, maar wat doe je om er een double van te maken? geen atod).
atof(), want double is een (long) float :)

Verwijderd

Gekkenhuis87 laat nog maar weinig van zich horen...

Hij zal de opdracht wel mooi gecopyd hebben hier vandaan :(

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 17 september 2001 17:41 schreef beelzebubu het volgende:
Zie je wel dat je het kan? :)

Verwijderd

Op maandag 17 september 2001 18:14 schreef ACM het volgende:

[..]

Zie je wel dat je het kan? :)
:* O+

Is goed joh :)

  • zork
  • Registratie: September 2000
  • Laatst online: 04-08 12:43
Op maandag 17 september 2001 01:57 schreef curry684 het volgende:

[..]

Ach ik zou als docent voor een stel C++ newbies voor bovenstaand programma een 1 geven tenzij er goede uitleg bij komt: en die geef ik dus lekker niet nanananana :P

Lijkt me leuk als een of andere n00b spontaan na 3 lessen C++ met een massale deref-verkrachting zoals dit aankomt, ik zou me als docent te pleuris lachen terwijl ik het voor z'n neus delete :D
Leraar, elke dag anders >:) ;)

Wordt docent joh, kunnen we hier lachen :P

  • BurningSheep
  • Registratie: Januari 2000
  • Laatst online: 03-05 22:13
Op maandag 17 september 2001 16:41 schreef mietje het volgende:

[..]

Kijk eens naar de code ;) Ik schrijf nu de resultaat-digits rechtstreeks in de resultaatstring, en wel van achter naar voren. Daarvoor moet ik dus eerst die achterste positie berekenen (komt in pointer r). Als later blijkt dat het getal toch niet zo groot wordt (overdr == 0), moet ik dus het tot dan toe berekende resultaat een positie naar voren schuiven. Dat betekent nog een while loopje en maakt de implementatie van telop() altijd een stuk langzamer dan simpelweg een 0 ervoor te plakken om de lengte kloppend te maken :)
Gewoon die pointer ophogen totdat ie wijst naar een getal groter dan nul :7

Verwijderd

Op maandag 17 september 2001 19:45 schreef BurningSheep het volgende:

[..]

Gewoon die pointer ophogen totdat ie wijst naar een getal groter dan nul :7
Pointers ophogen lijkt me geen geweldig idee als je geheugenfouten wilt voorkomen.... ;)

Je bedoelt waarschijnlijk de waarde waar de pointer naartoe wijst ophogen? :P

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op maandag 17 september 2001 19:36 schreef zork het volgende:
Leraar, elke dag anders >:) ;)

Wordt docent joh, kunnen we hier lachen :P
Ja leuk, en de helft van m'n salaris en m'n auto inleveren, daaaaaaaag :D

Professionele website nodig?


Verwijderd

Op maandag 17 september 2001 20:40 schreef beelzebubu het volgende:
Pointers ophogen lijkt me geen geweldig idee als je geheugenfouten wilt voorkomen.... ;)

Je bedoelt waarschijnlijk de waarde waar de pointer naartoe wijst ophogen? :P
En dan nog. Ik werk met gewone char array's, ik kan niet garanderen dat er maar een pointer naar zo'n array wijst. De beste oplossing zou zijn de getallen achterstevoren op te slaan, maar dat was de vraag niet :)

  • Dommel
  • Registratie: Maart 2001
  • Laatst online: 17-09 17:00

Dommel

Professioneel Software Sloper

Ik denk dat ik wel weet welke opdracht dat het is. En zo ja is het inderdaad voor school. Zal waarschijnlijk de volgende opdracht zijn:
Practicum Opdracht 2, C
Embedded Systems 2
[...]
blabla van de docent over wat er allemaal op moet staan en wanneer inleveren een voldoende/onvoldoende oplevert :)
[...]
#define MAXSTRING 256

void Som(char *g1, *g2, *s)
// Pre: G1 en G2 bevatten ieder een getal van maximaal MAXSTRING-1 karakters + \0
// Post: s bevat de som van de getallen g1 en g2
En ja ik heb de opdracht ook gemaakt. Hij lukt mij helemaal op 1 ding na. Ik krijg een adresfout. Ik schrijf naar een of ander adres en dat mag niet van de pc :?

Code posten gaat nu niet aangezien ik met mijn stomme kop elke keer vergeet om da ding te mailen naar mezelf :).
Oftewel de code komt morgen :) :)

Het is in ieder geval de bedoeling dat het werkt mbv een functie die in de 1ste week is geschreven om de getallen in te lezen. Deze moet gevolgt worden door de functie som en dan moet het programma werken

Lego Taj Mahal te koop --> https://gathering.tweakers.net/forum/list_messages/2109838


Verwijderd

Op maandag 17 september 2001 20:48 schreef curry684 het volgende:

[..]

Ja leuk, en de helft van m'n salaris en m'n auto inleveren, daaaaaaaag :D
aaaaaaaaaaaaaaah

Ik wordt toch maar wel programmeur :X :X :X

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 19-09 17:21
But seriously, dit is toch wel heel ernstig fout programmeren uh? C is geen basic, ffs...
Hoe zo fout??
goto heb je toch niet voor niets? Je moet er juist gebruik van maken als je dan nuttig lijkt...

maar nu je het zegt, ik ben wel met basic begonnen :7

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op maandag 17 september 2001 21:41 schreef Infinitive het volgende:
Hoe zo fout??
goto heb je toch niet voor niets? Je moet er juist gebruik van maken als je dan nuttig lijkt...

maar nu je het zegt, ik ben wel met basic begonnen :7
ZUCHT, ik word een beetje moe van deze discussie. Kunnen we asjeblieft een stukje in de FAQ opnemen dat goto verboden is binnen C/C++ code op dit forum, daar we hier zijn om mensen goed te leren programmeren? :Z

Professionele website nodig?


Verwijderd

Op maandag 17 september 2001 21:48 schreef curry684 het volgende:

[..]

ZUCHT, ik word een beetje moe van deze discussie. Kunnen we asjeblieft een stukje in de FAQ opnemen dat goto verboden is binnen C/C++ code op dit forum, daar we hier zijn om mensen goed te leren programmeren? :Z
Zegguh, mag ik je alsjeblieft smeken jouw persoonlijke mening niet als feit te weerspiegelen? We hebben deze discussie te vaak gehad maar ik blijf erbij dat goto soms mag en zinnig is :7

Soms, zeg ik, want het wordt idd. (te?) vaak misbruikt....

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op maandag 17 september 2001 21:52 schreef beelzebubu het volgende:
Zegguh, mag ik je alsjeblieft smeken jouw persoonlijke mening niet als feit te weerspiegelen? We hebben deze discussie te vaak gehad maar ik blijf erbij dat goto soms mag en zinnig is :7
Je zei net in een ander topic dat je toch maar professioneel programmeur ipv leraar ging worden... dan raad ik je af op het sollicitatiegesprek een monoloog te houden over de aesthetische voordelen en schoonheid van het zinnige goto-gebruik. Bij mijn bedrijf wordt je linea recta de deur gewezen in ieder geval... :*

Professionele website nodig?


Verwijderd

Op maandag 17 september 2001 21:55 schreef curry684 het volgende:

[..]

Je zei net in een ander topic dat je toch maar professioneel programmeur ipv leraar ging worden... dan raad ik je af op het sollicitatiegesprek een monoloog te houden over de aesthetische voordelen en schoonheid van het zinnige goto-gebruik. Bij mijn bedrijf wordt je linea recta de deur gewezen in ieder geval... :*
niet ipv leraar, maar ipv medicijnontwikkelingsteamleider (jaja,ik studeer medicijnontwikkeling :D).

en bij unix bedrijven kan ik nog zoveel lelijke gotos gebruiken ("grep -r goto /usr/src/linux"), de krapte is zo groot dat ze me toch wel aannemen :P

Een CV-tje met linux kernel zooi enzo staat toch best goed :7

[edit]
Nu nog een nieuw toetsenbord met werkende spatiebalk kopen |:(

Verwijderd

Voor iedreen die het leuk vind om wat meer te lezen over netjes proggen en de argumenten voor en tegen het gebruik van GOTO in moderne talen (C++/Java enz enz) moet eens het boek 'Code Complete' van Steve McConnell lezen (HINT).

Ben zelf erg blij dat ik het boek heb gekocht...
Even een paar voorbeelden van Tegen:

1) Het maakt de source moeilijk te lezen en te debuggen.

2) Het gebruik van GOTO maakt het compilen van de source code trager en zorgt voor een mindere optimalisatie.

3) ff een quote:

In practice, the use of gotos leads to the violation of structured-programming principles. Even if gotos aren't confusing when used carefully, once gotos are introduced, they spread through the code like termites through a rotting house. If any gotos are allowed, the bad creep in with the good, so it's better not to allow any of them.
Nagoed lees het boek maar eens er staat nog veel meer leuks in...


Verwijderd

Wat is er trouwns met Topix (GoT) aan de hand ? is de server koffie aan het drinken ??

  • BurningSheep
  • Registratie: Januari 2000
  • Laatst online: 03-05 22:13
Op maandag 17 september 2001 20:40 schreef beelzebubu het volgende:

[..]

Pointers ophogen lijkt me geen geweldig idee als je geheugenfouten wilt voorkomen.... ;)

Je bedoelt waarschijnlijk de waarde waar de pointer naartoe wijst ophogen? :P
Nee, ik bedoel toch echt de pointer ophogen ;)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op maandag 17 september 2001 21:02 schreef Christus het volgende:
Practicum Opdracht 2, C
Embedded Systems 2
[...]
blabla van de docent over wat er allemaal op moet staan en wanneer inleveren een voldoende/onvoldoende oplevert
[...]
#define MAXSTRING 256
void Som(char *g1, *g2, *s)
// Pre: G1 en G2 bevatten ieder een getal van maximaal MAXSTRING-1 karakters + \0
// Post: s bevat de som van de getallen g1 en g2
Hmmm ik had de opdracht overschat... correcte oplossing:
code:
1
2
3
4
5
6
#include <stdio.h>
#include <stdlib.h>
void Som(char* g1, char* g2, char* g3)
{
_itoa(atoi(g1) + atoi(g2), g3, 36);
}

(tsjakkaaa, nog een onvoldoende!) :P

[edit]
Ik zal aardig zijn en een hint geven: CIJFEREN JONGENS, DAT HEBBEN JULLIE OP DE BASISSCHOOL NOG GELEERD!!! Gewoon achteraan beginnen, cijfertje optellen, al of niet 1 onthouden, en zo naar voren werken. Overigens kun je bij deze opdracht een overflow krijgen waarbij het resultaat niet past.

Professionele website nodig?


  • Dommel
  • Registratie: Maart 2001
  • Laatst online: 17-09 17:00

Dommel

Professioneel Software Sloper

Sorry voor de bump maar daar had ik al voor geaarschuwd

Wat curry684 zegt heb ik al geprobeerd.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#define MAXSTRING 255
void LeesGetal (char getal[])
{
  int i=1;
  while (((getal[0]=getchar())<'0') || (getal[0]>'9'));
  if (getal[0]=='0') while ((getal[0]==getchar()) == '0');
  if ((getal[1]>='1') && (getal[1]<='9')) getal[0]=getal[1];
  while ((getal[i]>=getchar()>='0')&&(getal[i+1]<='9'));
  getal[i]='\0';
}
void Som(char *g1, char *g2, char *s)
{
  int i,carry,lg1,lg2;
  char h[MAXSTRING];
  i=0;
  carry=0;
  lg1=0;
  lg2=0;
  while (*g1!='\0') {g1++;lg1++;} g1--;
  while (*g2!='\0') {g2++;lg2++;} g2--;
  while ((lg1 !=0) | (lg2 !=0)){
         h[i]=((carry+(*g1-'0')+(*g2-'0'))%10)+'0';
// in de regel hierboven wordt de adresfout gemeld en op elke computer opnieuw
// maar wel steeds een ander adres. Ik krijg het niet opgelost
      if (h[i]>=10) carry++;
      g1--;
      g2--;
    }
  if (lg1!=0) h[i]=(carry+(*g1+'0')+0)%10+'0';
  else h[i]=(carry+(*g2+'0')+0)%10+'0';
}
void main()
{
  char x[MAXSTRING];
  char y[MAXSTRING];
  char z[MAXSTRING];
  printf("Geef 1ste getal in: ");
  LeesGetal(x);
  printf("Geef 2de getal in: ");
  LeesGetal(y);
  printf("\n\n");
  Som(x,y,z);
  printf("%s + %s = %s\n",x,y,z);
  printf("De som van de getallen is %s\n",z);
  printf("\n\n");
  printf("druk op q en <ENTER> om af te sluiten");
  while (getchar()!='q');
}

Als iemand mij zou kunnen zeggen wat ik er fout doe dan zou ik heel erg geholpen zijn :)

Lego Taj Mahal te koop --> https://gathering.tweakers.net/forum/list_messages/2109838


Verwijderd

Quote uit dat boek van mgfun:
If any gotos are allowed, the bad creep in with the good, so it's better not to allow any of them.
Dat vind ik geen goed argument. Het komt er dus op neer dat ie zegt: sommige coders misbruiken deze feature, dus zouden ook de goede coders deze feature niet meer mogen gebruiken.

Wat een onzin :r.

Verder heb ik geen boek nodig om door te hebben dat een stortvloed aan goto's je code verknaait. 8-)

Verwijderd

Op dinsdag 18 september 2001 11:45 schreef Christus het volgende:
while ((lg1 !=0) | (lg2 !=0)){
Dit is wel een cruciale fout, je werkt alle bytes af totdat je een null-pointer tegenkomt, ipv. te stoppen bij het begin van de strings. Daarnaast is de or (|) in deze while fout, hoog je de index i in je code niet op en bereken je de overdracht (carry) fout.

Ik heb eerder een stukje code gepost dat je probleem correct oplost.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op dinsdag 18 september 2001 12:34 schreef Sneech het volgende:
Dat vind ik geen goed argument. Het komt er dus op neer dat ie zegt: sommige coders misbruiken deze feature, dus zouden ook de goede coders deze feature niet meer mogen gebruiken.
Dat zegt ie niet, hij zegt dat als een 'goede' programmeur zichzelf het gebruik van goto een keer redelijk correct toestaat je vanzelf de neiging krijgt om jezelf vaker een excuus te geven.

Vergelijk het met roken: OF je doet het (te) veel, OF je doet het niet. Bijna niemand slaagt er in consequent maximaal 3 sigaretten per dag te roken.

* curry684 is kettingroker trouwens maar heeft sinds C64 basic geen 'goto' meer aangeraakt ;)

Professionele website nodig?


Verwijderd

Op dinsdag 18 september 2001 18:40 schreef curry684 het volgende:

[..]

Dat zegt ie niet, hij zegt dat als een 'goede' programmeur zichzelf het gebruik van goto een keer redelijk correct toestaat je vanzelf de neiging krijgt om jezelf vaker een excuus te geven.
Daar heb ik nou geen last van. Ik kan voor mezelf prima vaststellen of ik goto geschikt vind voor een bepaalde toepassing of algoritme, zonder me ineens 'verleid' of zo te voelen allerlei andere dingen ineens ook met goto's te gaan doen.
Mensen doen alsof het een quick & dirty fix is, maar ik vind goto's helemaal niet zo handig..

  • Killemov
  • Registratie: Januari 2000
  • Laatst online: 11-09 10:38

Killemov

Ik zoek nog een mooi icooi =)

Geez, zoek eens op bignumber of verylargeinteger of integerstring of stringinteger oid. Hier zullen vast wel kant en klare classes voor zijn die bijna alle operaties hebben geimplementeerd.

Hey Curry ... nog wel eens iets gedaan met bcd's op MC680X0? Perfect om wat ruimte te besparen voor dit soort grappen.

Ennuh ... goto == smerig. Ik zal het zelf NOOIT gebruiken in C/C++. Ik denk ook dat je dit met een beetje nadenken/structureren kunt vermijden. Kan iemand een voorbeeld van het gebruik van goto fantaseren waarbij het gebruik van deze goto absoluut noodzakelijk is? (Lijkt me een sterk staaltje fantaseerwerk ...)

Hey ... maar dan heb je ook wat!


Verwijderd

Op dinsdag 18 september 2001 12:34 schreef Sneech het volgende:

Verder heb ik geen boek nodig om door te hebben dat een stortvloed aan goto's je code verknaait. 8-)
Ja daar heb je idd geen boek voor nodig, maar toch raad ik je aan om eens een 'zo'n' boek te lenen/kopen je code gaat er stukken op vooruit. Vooral met debuggen is dit super handig hoe vaak ik geen oude lappen code lees van me zelf waar ik geen hol meer van snap omdat het 1 brei is.

Ow vergis je niet... ik schrijf nog steeds bagger code (He Curry :))

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op woensdag 19 september 2001 12:57 schreef Killemov het volgende:
Hey Curry ... nog wel eens iets gedaan met bcd's op MC680X0? Perfect om wat ruimte te besparen voor dit soort grappen.
Uhhh staat me iets van bij (heb hier op m'n werk de 68000-bijbel niet bij de hand ;) ), was dat niet iets van Add/Subtract Binary Coded Decimal (ABCD/SBCD) of zo? Was geloof ik wel erg handig en retesnel ja 8-)

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op woensdag 19 september 2001 13:15 schreef mgfun het volgende:
Ow vergis je niet... ik schrijf nog steeds bagger code (He Curry :))
Ik zie in je sig iets staan over dyslexie, da's altijd een politiek correct en sociaal geaccepteerd excuus om spaghetticode te schrijven toch? :P

Professionele website nodig?


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 19-09 17:21
goto's zijn wel handig als je geen try/catches gebruikt (bijvoorbeeld omdat je geen c++ maar c gebruikt).

In principe moet verder elke constructie met goto te vervangen zijn door bijvoorbeeld
for(;;), while(1), do {} while() in combinatie met breaks en continues. In c++ heb je het dan nog wat makkelijker door try{}, catch{} en bijvoorbeeld het inlinen van kleine functies.

Wat ook in C (voor bijvoorbeeld console applicaties/daemons) wil voorkomen is een setjmp() in combinatie met een longjmp(). Dit wordt overigens voor c++ sterk afgeraden, maar voor signal handling, of error afhandling wil het nog wel eens handig zijn.

Je hoeft goto dus eigenlijk niet te gebruiken... maar zo af en toe (als je te lui bent om je constructie aan te passen)...

Misschien interessant: download de php-source-code en tel het aantal goto's... dan heb je wel een 256 byte string nodig om het getal in op te slaan :P

Tot slot, wat is hier duidelijker:
code:
1
2
3
4
5
6
7
// normaal gesproken maar 1 loop
for(;;)
{
    if (uitzonderlijk geval)
      continue;
    break;
}

of:
code:
1
2
3
4
label:

if (uitzonderlijk geval)
    goto label;

Bespaart je weer een aantal accolades.

Om de gemoederen hier op GoT wat te bedaren zal ik in het vervolg:
code:
1
2
3
4
5
label:

 ....

__asm jmp label

schrijven >:)

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op woensdag 19 september 2001 21:23 schreef Infinitive het volgende:
code:
1
2
3
label:
 ....
__asm jmp label
Allemaal hulde aan Infinitive, de uitvinder van 'De Politiek Correcte Goto'

:D

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 20:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op woensdag 19 september 2001 21:23 schreef Infinitive het volgende:
goto's zijn wel handig als je geen try/catches gebruikt (bijvoorbeeld omdat je geen c++ maar c gebruikt).

Tot slot, wat is hier duidelijker:
code:
1
2
3
4
5
6
// normaal gesproken maar 1 loop
for(;;)
{
    if (uitzonderlijk geval)
      continue;
}

of:
code:
1
2
3
4
label:

if (uitzonderlijk geval)
    goto label;
uhm... ik weet niet of je het door hebt, maar die 2 statements doen niet hetzelfde :)
de for lus zal namelijk nooit eindigen, tenzij je er nog ergens een break tussen propt. Maar dan nog is ie anders, tenzij die break ELKE keer wordt uitgevoerd...

maar dan kun je dus beter
code:
1
2
3
4
do
{
    ...
} while (uitzonderlijk geval);

doen :)

.edit: het enige goede voorbeeld van goto dat ik me kan bedenken (en wat ik ook wel eens gebruik), is als je uit een geneste loop wilt springen (dus 1 break voldoet niet) :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 19-09 17:21
uhm... ik weet niet of je het door hebt, maar die 2 statements doen niet hetzelfde :)
de for lus zal namelijk nooit eindigen, tenzij je er nog ergens een break tussen propt. Maar dan nog is ie anders, tenzij die break ELKE keer wordt uitgevoerd...
Oeps. Break vergeten. :)

Maar je ziet zo wel dat er veel manieren zijn om hetzelfde te doen. Maar de do {} while() is idd mooier, maar je hebt dan wel weer een stel {} erbij.

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]

Pagina: 1