› Foros › Off-Topic › Miscelánea
/* Cal introduir el número "x" i "y" en el format següent: */
/* Per a x=20 hem de posar x=20.00 */
/* Per a y=25 hem de posar y=25.00 */
/* Aquest algorisme té limitacions: */
/* - Només es poden tractar valors de 3 xífres com a màxim */
algoritme Mostrar_Sufix
*
var
x = enter
y = enter
num_char = enter
posicio = enter
posicio2 = enter
ax = enter
bx = enter
cx = enter
ay = enter
by = enter
cy = enter
fivar
inici
Llegir(car) /*comencem a comptar el número de carácters */
num_char <-- 1
mentre ¬(x='.') V ¬(y='.')
num_char+1
fimentre si (x='.') V (y='.') aleshores
posició <-- (num_char - (num_char - 1))
fisi
posicio2 <-- posicio /* copiem les variables per tal de tracter x i y per separat en el següent punt */
mentre ¬(x='.') /* Copiem el valors de cada caràcter de la xifra a una variable */
ax <-- Llegir(car)
posicio + 1
bx <-- Llegir(car)
posicio + 1
cx <-- Llegir(car)
fimentres
mentre ¬(y='.')
ay <-- Llegir(car)
posicio2 + 1
by <-- Llegir(car)
posicio2 + 1
cy <-- Llegir(car)
fimentres /* Donem els resultats */
si ax=ay V bx=by V cx=cy V x>y aleshores
Escriure( Y es sufix de X)
si_no
Escriure(Y no es sufix de X)
fisi
si ax=ay V bx=by V cx=cy V xEscriure( X es sufix de Y)
si_no
Escriure(X no es sufix de Y)
fisi
fi
Usando el editor avanzado: Estilos - Código.yauros escribió:el de los sufijos yo lo haria de la siguiente forma (a modo de funcion)while ((x>0) && (y>0)) {
if ((x mod 10) != (y mod 10))
return false
else {
x = x/10
y = y/10
} //else
} // while
return true
PD: como puedo ponerlo para que me salga el texto anidado?
RubénGM escribió:Usando el editor avanzado: Estilos - Código.
PD: Esos dos return... no sería más majo una booleana?
bpSz escribió:yauros, tú ejemplo es usando funciones que (en teoria) aun no podemos usar. Tiene que ser algo a un nivel más sencillo
Sí, más o menos... mod lo que hace es devolver el "residuo" de una división (viene a ser lo primero que me enseñaron en pseudocódigo, prácticamente o.O)bpSz escribió:RubenGM, tu método consistiría en ir multiplicando y dividiendo cada número x 10 (x100, x1000, etc) hasta que cada número estubiera en su casilla correcta (invertida), no?
merci por las respuestas
yauros escribió: sin funciones es exactamente igual, tan solo en vez de devolver true, indica de alguna forma por pantalla o como indique el ejercicio que un numero es sufijo del otro
var
x=enter
y=enter
fivar
inici
mentres ((x>0) /\ (y>0))
si ((x mod 10) != (y mod 10)) aleshores
Escriure(X no es sufixe de y)
fisi
si ((x mod 10) = (y mod 10)) /\ (x>y) /\ (y*10= x) aleshores
Escriure(X es sufixe de y)
fisi
fimentres
fi
RubénGM escribió:¿Dónde estás estudiando, por curiosidad?![]()
algorisme Invertir_Numero
var
x = enter
posicio = enter
fivar
inici
posicio <- 1
Llegir(posició)
mentres (x>0)
si (x>0) aleshores a<- x mod 10
fisi
posicio = posicio + 1
si (x>0) aleshores b<- x mod 100
fisi
posicio = posicio + 1
si (x>0) aleshores c<- x mod 1000
fisi
posicio = posicio + 1
si (x>0) aleshores d<- x mod 10000
fisi
fimentres
Escriure(a*1000+b*100+c*10+d*1)
fi
// num es el numero que quieres invertir
// res el num invertido
x = num
mult = 1
while (x DIV 10!=0)
mult = mult * 10
x = x DIV 10
res = 0
while (num!=0)
res = res + mult*(num MOD 10)
mult = mult DIV 10
num = num DIV 10
A base de 'if's no puedes solucionarlo, necesitas un bucle (while/mientras).bpSz escribió:wenas, con el metodo de RubenGM, tengo un problema, os pego el pseudocódigo:
El problema es que no se me ocurre como hacer parar el bucle en determinado numero de caracteres.. porque tal y como lo tengo solo puedo invertir números de hasta 5 cífras... :S si quisiera invertir cualquier cantidad, como podría hacerlo?
[SPOILER][size=80]#include <stdio.h>
#include <stdlib.h>
int inversa(int numerito); {
int retorno=0;
while (numerito>0) {
retorno=retorno*10+numerito%10;
numerito=numerito/10;
}
return retorno;
}
int main(int argc, char *argv[]) {
printf("%d",inversa(atoi(argv[1])));
}[/SIZE][/SPOILER]
[SPOILER][size=80]#include <stdio.h>
#include <stdlib.h>
bool esSufijo(int numerito, int numerazo) {
bool iguales=true;
while (iguales && numerito!=0 && numerazo !=0) {
iguales=((numerito%10)==(numerazo%10));
if (iguales) {
numerito=numerito/10;
numerazo=numerazo/10;
}
}
return ((numerito==0)||(numerazo==0));
}
int main(int argc, char *argv[]) {
if (esSufijo(atoi(argv[1]),atoi(argv[2]))) printf("Si\n");
else printf("No\n");
}[/SIZE][/SPOILER]