🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #18437

Re: Una ayuda please :), piruleta por medio.

#18437
From: *puntero_loco
Date: Mon, 06 Sep 1999 00:00
65 lines
3165 bytes
El Sun, 05 Sep 1999 20:17:15 +0200, CJR <cj.ramos@teleline.es> escribi�:
|Los programadores me han preguntado que hace esta funci�n.
|Una especie de apuesta, piruleta por recompensa.
|
|La cuesti�n est� en ver quien es el primero que sabe que hace esta
|funci�n :
|

|void send(int* to, int* from, int count)
|{
|        int n = (count+7)/8; // 1
|        switch(count%8) {    // 1
|        case 0: do { *to++ = *from++; // 2
|       case 7:         *to++ = *from++; 
|       case 6:         *to++ = *from++;
|       case 5:         *to++ = *from++;
|       case 4:         *to++ = *from++;
|       case 3:         *to++ = *from++;
|       case 2:         *to++ = *from++;
|       case 1:         *to++ = *from++;
|                } while (--n>0);
|        }
|}
|

1) Tomamos el resto de dividir count entre 8. Con este resto: Salga lo que
salga copiamos el contenido de la posici�n de memoria from en la direcci�n to.
Y esto lo hacemos mientras (while) n sea mayor que cero decrement�ndolo cada
vez. Por lo tanto solo copiamos aproximadamente 1/8 parte de count. 

2) Sin embargo lo del ^Z creo que es una vacilada, que el sabr� lo que hace
(con el editor que utilize), pero que no es parte del C, al menos que yo sepa.
Sin embargo, por la estructura del programa creo que lo que ese ^Z hace es que
salte a la siguiente linea y antes de interpretar lo que queda, con lo que el
programa sin chorraditas quedar�a:

void send(int* to, int* from, int count)
{
        int n = (count+7)/8; 
        switch(count%8) {    
        case 0: do { 
		*to++ = *from++; 
		} while (--n>0);
       case 7:         *to++ = *from++;
       case 6:         *to++ = *from++;
       case 5:         *to++ = *from++;
       case 4:         *to++ = *from++;
       case 3:         *to++ = *from++;
       case 2:         *to++ = *from++;
       case 1:         *to++ = *from++;              
        }
}

As� esta mas claro: Si el resto de count/8 es igual a cero entonces copia el
valor de (count+7)/8 posiciones de memoria con el tama�o de un entero de from
a to. Sino, s�lo copia una posici�n de memoria.

Me debes una piruleta.
-- 
 /-----------------------------\
|      *puntero_loco            |  
|     Debian 2.1 Slink          |
|  jajsNOSPAM@retemail.es       |
| http://personal5.iddeo.es/jajs|
 \-----------------------------/
Technical Details
Message-ID: <fkruq7.hb1.ln@127.0.0.1>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <37D2B3AB.CC6C91AF@teleline.es>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,ec38c86f5338aad7
X-Google-Attributes: gidf86c8,public
From: jajs@SPAMNOretemail.es (*puntero_loco)
Subject: Re: Una ayuda please :), piruleta por medio.
Date: 1999/09/06
Message-ID: <fkruq7.hb1.ln@127.0.0.1>
X-Deja-AN: 521819092
Distribution: es
Content-Transfer-Encoding: 8bit
References: <37D2B3AB.CC6C91AF@teleline.es>
Content-Type: text/plain; charset=iso-8859-1
X-Complaints-To: newsmanager@rediris.es
X-Trace: batcher.rediris.es 936648594 14083 62.81.102.129 (6 Sep 1999 20:09:54 GMT)
Organization: Tarifa plana para todos YA!
Mime-Version: 1.0
User-Agent: slrn/0.9.5.3 (UNIX)
NNTP-Posting-Date: 6 Sep 1999 20:09:54 GMT
Newsgroups: es.comp.os.linux.programacion