A segunda é fácil.
Como é que você multiplica algo por 8 usando apenas adições? Se o valor estiver em x, você pode fazer algo como:
x + x + x + x + x + x + x + x
A primeira é um pouco mais chata, mas você só precisa de um while.
Digamos que você tem o número 12. Para dividir isso por 2, você pode arranjar 2 variáveis, iniciar uma com o valor 12 e a outra com 0, e ir descontando 1 da primeira e acrescentando 1 na segunda variável, até que fiquem iguais (ou pelo menos a primeira ficar menor que a segunda). No caso 12:
x = 12, y = 0
x = 11, y = 1 (descontei 1 da primeira variável e acrescentei 1 à segunda variável)
x = 10, y = 2
…
x = 7, y = 5
x = 6, y = 6 --> aqui x <= y, e então pronto, você conseguiu determinar que a metade de 12 é 6.
No caso 5 (a metade de 5 é 2, e sobra 1, não?)
x = 5, y = 0
x = 4, y = 1
x = 3, y = 2
x = 2, y = 3 -> neste caso, x <= y , e você determinou que a metade de 5 é 2.