Solucion de una practica de computadores.

X

Pues en computadores(ing. telecomunicaciones) estamos haciendo una practica llamada "bits.c" el profesor la ha cogido de otras universidades, asique quiza podais ayudarme, la practica es esta:
http://www.cs.rochester.edu/u/scott/252/assignments/A1.shtml

Es de una universidad guiri.

Se trata de hacer mini programitas en C usando solo las operaciones que te dicen. Bueno segun me han dixo las soluciones rulan por inet he estado buscandolas por 1000 buscadores y nada, haver si alguien de aqui sabe donde encontrarla....

-

aki no te pueden ayudar.

Dod-Evers

Nueva variante de "a ver"!!!-----> haver.

Leyendo la práctica... Leída

La clave está en diferenciar los operadores lógicos (entre booleanos) y los operadores de bits, con eso ya... tienes bastante ganado. Luego está el hecho en el que te digan que sólo puedes generar el AND con negación y no se qué, pues a DeMorgan... y pasito a pasito con todo. Tampoco es muy dificil que digamos, xD

PD: Moderador! Al foro de DEV!

X

Bueno, no busco que nadie me la haga y mas a estas horas, solo que me digan si saben donde esta la solucion, el enunciado de mi uni es este:

/*

  • CS:APP datalab
  • Copyright (c) 2002, R. Bryant and D. O'Hallaron, All rights reserved.
    *
  • Traducció al català: Ignasi Furió
    *
  • Fonaments de computadors
  • Pràctica 1: Manipulació de bits
    *
  • bits.c - Fitxer font amb les vostres solucions.
  • Aquest és el fitxer que heu d'entregar al professor responsable.
    *
  • ALERTA: No heu d'incloure el fitxer de capçaleres <stdio.h>; pot confondre al
  • compilador dlc. Així i tot podeu usar printf per a tasques de depuració sense
  • incloure <stdio.h>, malgrat que pot provocar alertes del compilador.
  • Habitualment convé fer cas dels missatges d'alerta del compilador, però en aquesta
  • ocasió vos ho podeu estalviar.
    */

#include "btest.h"
#include <limits.h>

/*

  • Instruccions pels estudiants:
    *
  • Fase 1: Ompliu l'estructura següent amb la vostra identificació.
    /
    team_struct team =
    {
    /
    Nom de grup:"43204933_43194225", /
    "grup1",
    /
    Nom de l'estudiant 1: Substituïu-lo amb el nom complet del primer component /
    "Xavier Femenias Segui",
    /
    Login ID 1: Substituïu-lo pel "DNI" del primer component /
    "43204933",
    /
    Els següents camps, sols es modifiquen si el grup és de dos components /
    /
    Nom de l'estudiant 2: Substituïu-lo amb el nom complet del segon component /
    "Gerard Martinez Amer",
    /
    Login ID 2: Substituïu-lo pel "DNI" del segon component */
    "43194225"
    };

#if 0
/*

  • Fase 2: Llegiu atentament les següents instruccions.
    */

Com a solució de la pràctica heu d''entregar aquest fitxer després
d''editar el conjunt de funcions que apareix a continuació.

NORMES DE CODIFICACIÓ:

Substituïu la línia de "return" de cada funció per una o més línies
de codi C que la implementin. El vostre codi ha de complir les següents
normes d''estil:

int Funct(arg1, arg2, ...) {
/* breu descripció del funcionament de la vostra implementació */
int var1 = Expr1;
...
int varM = ExprM;

varJ = ExprJ;
...
varN = ExprN;
return ExprR;
}

Cada "Expr" és una expressió on SOLS s''usa el següent:

  1. Constants enteres entre 0 i 255 (0xFF), ambdós inclosos. No podeu codi C que
    usar constants grans com, per exemple, 0xffffffff.
  2. Arguments de les funcions i variables locals (no variables globals).
  3. Operadors unaris sobre enters ! ~
  4. Operadors binaris sobre enters & ^ | + << >>

En algun dels problemes les restriccions poden ser majors.
Cada "Expr" pot estar formada per múltiples operadors. No hi ha la restricció
d''un únic operador per línia.

Està terminantment prohibit:

  1. Usar construccions de control com if, do, while, for, switch, etc.
  2. Definir o usar macros.
  3. Definir qualsevol funció addicional en aquest fitxer.
  4. Cridar qualsevol funció.
  5. Usar qualsevol altre operador, com a &&, ||, -, or ?:
  6. Usar qualsevol forma de "casting" (modificació del tipus d''una variable).

Podeu assumir que la vostra màquina:

  1. Usa complement a dos de 32 bits per representar enters.
  2. Realitza els desplaçaments a la dreta de forma aritmètica.
  3. El seu comportament és imprevisible si es desplaça un enter més que la
    mida d''una paraula (word)

EXEMPLES D''ESTIL DE CODIFICACIÓ ACCEPTABLE:
/*

  • pow2plus1 - retorna 2x + 1, on 0 <= x <= 31
    /
    int pow2plus1(int x) {
    /
    explota els desplaçaments per calcular potències de 2 */
    return (1 << x) + 1;
    }

/*

  • pow2plus4 - retorna 2x + 4, on 0 <= x <= 31
    /
    int pow2plus4(int x) {
    /
    explota els desplaçaments per calcular potències de 2 */
    int resultat = (1 << x);
    resultat += 4;
    return resultat;
    }

NOTES:

  1. Usau el compilador dlc (data lab checker), descrit en l''enunciat per validar
    la legalitat de les vostres solucions.
  2. Cada funció té un nombre màxim d''operadors (! ~ & ^ | + << >>)
    que poden usar-se en la seva implementació. Aquest nombre màxim és
    comprovat per dlc. Considerau que "=" no compta, per tant, podeu
    usar tantes assignacions com calgui sense perjudici.
  3. Usau el test btest per comprovar la correcció de les vostres solucions.
  4. El nombre màxim d''operacions per funció apareix en el comentari de capçalera
    de cada una. Si aparèixen inconsistències entre el que s''indica aquí i en
    el guió de pràctiques, la d''aquest fitxer és la bona.
    #endif

/*

  • Fase 3: Modificau les següents funcions d'acord amb les normes de codificació.
    *
  • IMPORTANT. PER TAL D'EVITAR SORPRESES EN L'AVALUACIÓ:
  • 1. Usau el compilador dlc per comprovar que les solucions compleixen les
  • regles de codificació.
  • 2. Usau el test btest per comprovar que les vostres solucions provoquen les
  • respostes esperades. Alerta amb els casos propers a Tmin i Tmax.
    */

/*

  • bitNor - x|y usant sols ~ i &
  • Exemple: bitNor(0x6, 0x5) = 0xFFFFFFF8
  • Ops. legals: ~ &
  • Max ops: 8
  • Dificultat: 1
    */
    int bitNor(int x, int y) {
    return x&y;
    }

/*

  • isZero - retorna 1 si x == 0, i 0 altrament
  • Exemples: isZero(5) = 0, isZero(0) = 1
  • Ops. legals: ! ~ & ^ | + << >>
  • Max ops: 2
  • Dificultat: 1
    */
    int isZero(int x) {

return !x;

}
/*

  • minusOne - retorna el valor -1
  • Ops. legals: ! ~ & ^ | + << >>
  • Max ops: 2
  • Dificultat: 1
    /
    int minusOne(void) {
    return -1;
    }
    /
  • copyLSB - deixa tots els bits com el menys significatiu (LSB) de x
  • Exemple: copyLSB(5) = 0xFFFFFFFF, copyLSB(6) = 0x00000000
  • Ops. legals: ! ~ & ^ | + << >>
  • Max ops: 5
  • Dificultat: 2
    /
    int copyLSB(int x) {
    return 2;
    }
    /
  • divpwr2 - Calcula x/(2n), amb 0 <= n <= 30
  • i arrodonint a zero
  • Exemples: divpwr2(15,1) = 7, divpwr2(-33,4) = -2
  • Ops. legals: ! ~ & ^ | + << >>
  • Max ops: 15
  • Dificultat: 2
    /
    int divpwr2(int x, int n) {
    return 2;
    }
    /
  • getByte - Extreu el byte n de la paraula x
  • Bytes numerats des de 0 (LSB) a 3 (MSB)
  • Exemples: getByte(0x12345678,1) = 0x56
  • Ops. legals: ! ~ & ^ | + << >>
  • Max ops: 6
  • Dificultat: 2
    /
    int getByte(int x, int n) {
    return 2;
    }
    /
  • conditional - igual que x ? y : z
  • Exemple: conditional(2,4,5) = 4
  • Ops. legals: ! ~ & ^ | + << >>
  • Max ops: 16
  • Dificultat: 3
    /
    int conditional(int x, int y, int z) {
    return 2;
    }
    /
  • isLessOrEqual - si x <= y retorna 1, si no retorna 0
  • Exemple: isLessOrEqual(4,5) = 1.
  • Ops. legals: ! ~ & ^ | + << >>
  • Max ops: 24
  • Dificultat: 3
    /
    int isLessOrEqual(int x, int y) {
    return 2;
    }
    /
  • isNegative - retorna 1 si x < 0, retorna 0 altrament
  • Exemple: isNegative(-1) = 1.
  • Ops. legals: ! ~ & ^ | + << >>
  • Max ops: 6
  • Dificultat: 3
    /
    int isNegative(int x) {
    return 2;
    }
    /
  • multFiveEights - multiplica per 5/8 arredonint a 0.
  • Exemples: multFiveEights(77) = 48
  • multFiveEights(-22) = -13
  • Pots suposar que |x| < (1 << 29)
  • Ops. legals: ! ~ & ^ | + << >>
  • Max ops: 12
  • Dificultat: 3
    /
    int multFiveEights(int x) {
    return 2;
    }
    /
  • reverseBytes - inverteix l'ordre dels bytes de x
  • Exemple: reverseBytes(0x01020304) = 0x04030201
  • Ops. legals: ! ~ & ^ | + << >>
  • Max ops: 25
  • Dificultat: 3
    /
    int reverseBytes(int x) {
    return 2;
    }
    /
  • log2 - retorna part_entera(log base 2 de x), on x > 0
  • Exemple: log2(16) = 4
  • Ops. legals: ! ~ & ^ | + << >>
  • Max ops: 90
  • Dificultat: 4
    /
    int log2(int x) {
    return 2;
    }
    /
  • logicalNeg - implementa l'operador !, usant tots els
  • operadors legals excepte !
  • Exemples: logicalNeg(3) = 0, logicalNeg(0) = 1
  • Ops. legals: ~ & ^ | + << >>
  • Max ops: 12
  • Dificultat: 4
    /
    int logicalNeg(int x) {
    return 2;
    }
    /
  • satAdd - suma dos nombres, però si provoca un overflow positiu returna
  • el valor màxim possible i, si l'overflow és negatiu retorna el
  • valor positiu mínim possible.
  • Exemples: satAdd(0x40000000,0x40000000) = 0x7fffffff
  • satAdd(0x80000000,0xffffffff) = 0x80000000
  • Ops. legals: ! ~ & ^ | + << >>
  • Max ops: 30
  • Dificultat: 4
    /
    int satAdd(int x, int y) {
    return 2;
    }
    /
  • tc2sm - Converteix de complement a 2 a signe-magnitud
  • on el MSB és el bit de signe
  • Pots suposar que x > TMin
  • Exemple: tc2sm(-5) = 0x80000005.
  • Ops. legals: ! ~ & ^ | + << >>
  • Max ops: 15
  • Dificultat: 4
    */
    int tc2sm(int x) {
    return 2;
    }
Dod-Evers

Prefería el enunciado en inglés... xD

overking

wow

X

Sigo buscando y estoy viendo que hay muchisimas universidades con la misma practica, la solucion ha de estar por inet por cojones....

Kylian

Bajate el thinking in c (es gratis) y mirate lo que necesites. Porque si esta la sacas por inet la siguiente no será tan facil.

http://mindview.net/Books

javithelong

Putos teleñecos, no teneis ni puta idea de programar, y luego os las dasis de pro's

Busca, busca por internet, que alguien haga tu trabajo, no te molestes en currartelo tu, pa que

DArgo

#9 tienes toda la razon. Yo estando en 4º de la superior de informatica, me viene una tia el otro dia vacilando de que ellos saben programar de la ostia. Y estudia la misma carrera que #1 xDD

Usuarios habituales

  • DArgo
  • javithelong
  • Kylian
  • Xavz
  • overking
  • Dod-Evers
  • -_SlaY3r_-