hola, en principio puedes poner todas las funciones en el mismo script.
He echo lo que pensabas que deberia ser, no andabas muy descaminado, solo habia que comprobar que hacia diferentes a las funciones, y realizar una sola pasandole esa diferencia y adecuando la funcion para captarla. Ademas he eliminado variables que no son nesesarias.
Código:
<script type="text/javascript">
function multiplica(form,n){
var k
switch(n)
{
case 1:{k=4.1;break}//kglu
case 2:{k=9.3;break}//klip
case 3:{k=4.2;break}//kptes
}
form["res"+n].value=parseFloat(form["num"+n].value)*k
}
function suma(form,n){
form[n+"4"].value=
parseFloat(form[n+"1"].value)+
parseFloat(form[n+"2"].value)+
parseFloat(form[n+"3"].value)
}
</script>
Aqui el form es el mismo, salvo que se llama a una funcion generica pasandole la diferencia señalada, que en el caso de la multiplicacion es el nº de campo (1,2 o 3), y en el de la suma el tipo de campo (num o res).
Código HTML:
<form>
<TABLE BORDER=1 CELLPADDING=8>
<TR>
<TD></TD>
<TD>Gramos consumidos</TD>
<TD>KCalorías consumidas</TD>
</TR>
<tr>
<td>Hidratos de carbono</td>
<td><input name="num1" type="text" value="200" onBlur="multiplica(this.form,1)"/></td>
<td><input name="res1" type="text" value=""/></td>
</tr>
<tr>
<td>Lípidos</td>
<td><input name="num2" type="text" value="100" onBlur="multiplica(this.form,2)"/></td>
<TD><input name="res2" type="text" value=""/></TD>
</tr>
<tr>
<td>Proteínas</td>
<td><input name="num3" type="text" value="200" onBlur="multiplica(this.form,3)"/></td>
<td><input name="res3" type="text" value="" onBlur="suma(this.form,'num')"/></td>
</tr>
<tr>
<td>Total</td>
<td><input name="num4" type="text" value=""/></td>
<td><input name="res4" type="text" value="" onBlur="suma(this.form,'res')"/></td>
</tr>
</table>
</form>
Saludos.