elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con problema escolar, secuencia aritmetica
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con problema escolar, secuencia aritmetica  (Leído 3,164 veces)
l3mm

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Ayuda con problema escolar, secuencia aritmetica
« en: 28 Mayo 2020, 07:30 am »

Buen dia, antes que nada agradezco su atención, con la reciente pandemia no he tenido las clases de introducción a la programación, sin embargo el profesor ha dejado dos proyectos, el primero que describo acontinuacion es:



pude hacerlo de la siguiente forma:

Código:
//MITZI A
#include <stdio.h>
#include <math.h>

int main (void)
{
double S;

printf ("digita el numero de renglon que quieras obtener");
scanf ("%lf",&S);

if (S==1 || S== 12 || S== 123 || S==1234 || S==12345 || S==123456 || S==1234567 || S==12345678 ||  S==123456789 ){

if (S == 1)
{
printf("1*9+2=11");

return 0;
}

if (S == 12)
{
printf("1*9+2=11\n");
printf("12*9+=111\n");
return 0;
}

if (S == 123)
{
printf("1*9+2=11\n");
printf("12*9+3=111\n");
printf("123*9+4=1111\n");
return 0;
}

if (S == 1234)
{
printf("1*9+2=11\n");
printf("12*9+3=111\n");
printf("123*9+4=1111\n");
printf("1234*9+5=11111\n");

return 0;
}

if (S == 12345)
{
printf("1*9+2=11\n");
printf("12*9+3=111\n");
printf("123*9+4=1111\n");
printf("1234*9+5=11111\n");
printf("12345*9+6=111111\n");

return 0;
}

if (S == 123456)
{

printf("1*9+2=11\n");
printf("12*9+3=111\n");
printf("123*9+4=1111\n");
printf("1234*9+5=11111\n");
printf("12345*9+6=111111\n");
printf("123456*9+7=1111111\n");
return 0;
}

if (S == 1234567)
{
printf("1*9+2=11\n");
printf("12*9+3=111\n");
printf("123*9+4=1111\n");
printf("1234*9+5=11111\n");
printf("12345*9+6=111111\n");
printf("123456*9+7=1111111\n");
printf("1234567*9+8=11111111\n");
return 0;
}

if (S == 12345678)
{
printf("1*9+2=11\n");
printf("12*9+3=111\n");
printf("123*9+4=1111\n");
printf("1234*9+5=11111\n");
printf("12345*9+6=111111\n");
printf("123456*9+7=1111111\n");
printf("1234567*9+8=11111111\n");
printf("12345678*9+9=111111111\n");
return 0;
}

if (S == 123456789)
{
printf("1*9+2=11\n");
printf("12*9+3=111\n");
printf("123*9+4=1111\n");
printf("1234*9+5=11111\n");
printf("12345*9+6=111111\n");
printf("123456*9+7=1111111\n");
printf("1234567*9+8=11111111\n");
printf("12345678*9+9=111111111\n");
printf("123456789*9+10=1111111111\n");
return 0;
}
}
else
printf("por favor digite los numeros consecutivamente");
return 0;
}


 Pero ahora me pide hacerlo de una forma que la verdad no entiendo para nada, el problema dice:
"Instrucciones: Lea cuidadosamente el siguiente problema. Después, realice el análisis y diseñe el correspondiente algoritmo, tanto en pseudocódigo como en diagrama de flujo, así como sus respectivas pruebas de escritorio. 
Una vez realizado el diseño, se procederá a la implementación correspondiente del c problema en lenguaje C.
Para la segunda parte del proyecto, se debe hacer uso de un único arreglo y las funciones necesarias para cumplir lo siguiente:
Adapte el problema para que cada renglón generado sea almacenado caracter por caracter en la única cadena que se utilizará. Una vez almacenado en ella se deberá mostrar en pantalla el arreglo elemento a elemento. De esta manera, se deben mostrar cada uno de los renglones que se generen. 
Estudie el modelo y maneje las restricciones que sean necesarias.
Es opcional el considerar la cantidad de espacios en blanco que se dejan entre los caracteres de cada renglón"


solo he logrado hacer esto, basandome en textos de la web:

Código:
#include <stdio.h>
#include <math.h>
#include <iostream>
using namespace std;

int main (void)
{
int secuencia ;
do
{
cout << "Ingrese el numero del que desea saber la secuencia, los numeros deben ser secuenciales del 1 al 9 (ejemplo; 12345) \n" ;
cout << "Ingrese 0 para salir \n";
cin >> secuencia;

}
while(secuencia != 0);
return 0;
}


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Ayuda con problema escolar, secuencia aritmetica
« Respuesta #1 en: 28 Mayo 2020, 08:22 am »

Si es la primera vez que tocas la programación y este es el primer ejercicio que os ha mandado hacer, tiene toda la pinta de que tienes un profesor un poco duro  :rolleyes: pero bueno, no hay que desanimarse por eso. Con los profesores duros en con los que más se aprende, a base de sacarse las castañas del fuego.

El primer código que pones es, digamos... una locura  :xD.
No es algo malo pues es la forma de pensar de cualquier persona pero los programas crecen muy rápidamente y no se pueden tratar los casos uno por uno porque entonces los códigos serían interminables. Es por esto que te pide sacar la correspondencia entre una cosa y otra, es decir el patrón con el que puedes hacer un programa mucho más corto.

El patrón en este caso si te das cuenta es:
1. Número (que llamaremos A) con n cifras empezando en el que la cifra en la posición 0 (izquierda) es 1 y para cada posición i, la cifra es i+1.
2. (* 9 +), no tiene mayor misterio puesto que siempre es así.
3. Número (que llamaremos B) que se corresponde con n+1. Si n vale 5 en el último caso (12345), B valdrá n+1 = 6.
4. Cantidad de 1s (que llamaremos X). Este valor es igual a B. En el último caso hay 6 1s.

Eso es obtener la correspondencia del ejercicio para poder programarlo. Y este patrón te permite conocer X sin tener que hacer la operación matemática, ya que X siempre tendrá una cantidad de 1s igual al número de dígitos del número de la izquierda + 1.


PARÉNTESIS SOBRE EL PSEUDOCÓDIGO Y UN EJEMPLO MUY SENCILLO

El pseudocódigo es un "lenguaje" para escribir algoritmos de forma más o menos flexible y sencilla para que un programador lo pueda entender. Muchas veces se parecen al código en sí o se puede pasar de uno a otro de forma muy fácil. Por ejemplo:
El pseudocódigo de un algoritmo que solicite un número y muestre si es positivo o negativo:
Código:
PEDIR numero
SI numero >= 0 ENTONCES
  MOSTRAR "El numero " + numero + " es positivo"
SINO
  MOSTRAR "El numero " + numero + " es negativo"
FIN SI

El código en C, que parece que es el lenguaje de programación que utilizas, sería:
Código
  1. #include <stdio.h> // Cabecera / Biblioteca que contiene las funciones printf() y scanf() para poder usarlas
  2.  
  3. int main(){
  4.  int numero;
  5.  printf("Introduce un numero: ");
  6.  scanf("%d", &numero);
  7.  if(numero >= 0){
  8.    printf("El numero %d es positivo", numero);
  9.  }
  10.  else {
  11.    printf("El numero %d es negativo", numero);
  12.  }
  13.  // En caso de que ejecutes directamente el .exe en Windows hay que poner una pausa para que no se cierre hasta que pulses una tecla
  14.  getchar(); // Si lo ejecutas en Linux o desde el IDE, no hace falta
  15.  // La funcion principal main() devuelve un entero al final, normalmente 0 si todo va bien:
  16.  return 0; // Si no lo pones, el compilador lo pondra solo pero solo en esta funcion
  17. }

El pseudocódigo es más importante de lo que suele parecer de primeras. Con él puedes diseñar un algoritmo que hace cosas sin tener que poner cómo las hace. Esto te permite simplificar problemas grandes y compartir algoritmos para luego traducirlos a su correspondiente lenguaje.


Para no hacer el mensaje excesivamente largo, que ya lo es un poco, te recomiendo que intentes lo siguiente:
Un programa que le indiques un número de dígitos (n) y te muestre la fila correspondiente. Por ejemplo, para n = 5:
Código:
 12345 * 9 + 6 = 111111 
El número n puede ser cualquiera así que tendrás que usar algún tipo de bucle (while() o for()).

Cuando tengas lo anterior perfecto, agrega el arreglo. En vez de mostrar el resultado directamente por la pantalla, tienes que ir guardando cada carácter en el arreglo para que quede de tal forma:
Código:
 arreglo = ['1' | '2' | '3' | '4' | '5' | ' ' | '*' | ' ' | '9' | '6' | ' ' | '=' | ' ' | '1' | '1' | '1' | '1' | '1' | '1'| 
Cuando lo tengas ahí guardado, tendrás que recorrer el array para ir mostrando cada posición y que te aparezca el mismo resultado por pantalla.

Ahora es cuando te toca esforzarte a ti e intentar hacer eso  :rolleyes: :rolleyes:
Los problemas que tengas los puedes comentar aquí para orientarte.
Suerte.

PD: Tú estás programando en C (o eso te piden) y el código ese que has conseguido buscando en Internet es C++ con un poco de C. Ten cuidado con eso.
PD 2: Procura que cada función tenga solo un <return>.


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
l3mm

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Ayuda con problema escolar, secuencia aritmetica
« Respuesta #2 en: 28 Mayo 2020, 18:38 pm »

hola YreX-DwX, te agradezco mucho el tiempo que has dedicado a la respuesta, la verdad es que mi profesor no nos ha dado muchas clases y no tengo las bases necesarias para resolver el problema, intente hacer el pseudo codigo para el problema, lo hice de la siguiente forma:

PEDIR numero
SI NUMERO es igual o menor que 9 ENTONCES
 MOSTRAR "El numero "x9+1 = " Numero +1 veces 1"
SINO
 MOSTRAR "Introduzca un numero entre 1 y 9"
FIN SI


Hasta aquí creo entender el problema, sin embargo se me complica al querer escribir código para "numero+1" veces 1, no se en realidad como crear el bucle para ir colocando los 1 las veces que define numero.

No se como hacer un arreglo, lo cheque en algunas paginas pero la verdad me perdí por completo, la forma en que puse el primer código, uso las funciones que me enseño el profesor pero no nos ha enseñado otras, solo conozco if y else ¿Podrías orientarme sobre que funciones estudiar para poder llegar a hacer el ejercicio?

Muchisimas gracias
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Ayuda con problema escolar, secuencia aritmetica
« Respuesta #3 en: 28 Mayo 2020, 23:39 pm »

hola YreX-DwX, te agradezco mucho el tiempo que has dedicado a la respuesta, la verdad es que mi profesor no nos ha dado muchas clases y no tengo las bases necesarias para resolver el problema, intente hacer el pseudo codigo para el problema, lo hice de la siguiente forma:

PEDIR numero
SI NUMERO es igual o menor que 9 ENTONCES
 MOSTRAR "El numero "x9+1 = " Numero +1 veces 1"
SINO
 MOSTRAR "Introduzca un numero entre 1 y 9"
FIN SI
Lo primero: ese pseudocódigo no es muy correcto. Estás pidiendo un número <= 9 para mostrar el número en sí. Lo que tienes que hacer es calcular el número en base al que tú pides.
Además es importante el uso correcto de las comillas para mostrar mensajes. Las comillas significan que debe aparecer tal cual. Si pones "numero", se escribirá "numero"; si escribes: numero, se escribirá el valor del numero.

Hasta aquí creo entender el problema, sin embargo se me complica al querer escribir código para "numero+1" veces 1, no se en realidad como crear el bucle para ir colocando los 1 las veces que define numero.

Para crear bucles tienes que usar un sentencia while() o for():

SENTENCIA WHILE
Un bucle while(condicion) es un bucle que se repite mientras la condición que pongas dentro sea cierta. Es importante, dentro del bucle modificar algo que afecte a la condición pues sino el bucle siempre será cierto/falso y entonces nunca saldrás/entrarás.
Por ejemplo, para crear el primer número sabiendo el número de dígitos:
Código:
PEDIR numeroCifras
i := 1
numero := 0
MIENTRAS i <= numeroCifras HACER
  numero := numero + (i * pow(10, numeroCifras-i)) // pow(base, exponente)
  i := i + 1
FIN MIENTRAS
MOSTRAR "El numero de " + numeroCifras + " cifras es: " + numero


SENTENCIA FOR
Un bucle for(inicializacion, condicion, actualizacion) ejecuta lo que pongas en la inicialización cuando empieza, se repite como el while() cada vez que se cumple la condición y tras terminar cada iteración se ejecuta la actualización. El mismo ejemplo de antes con un for() sería:
Código:
PEDIR numeroCifras
numero := 0
PARA i := 1 HASTA numeroCifras INCREMENTO 1 HACER
  numero := numero + (i * pow(10, numeroCifras-i))
  // En este caso no se incrementa la i aqui porque ya lo hemos puesto en el INCREMENTO
FIN PARA

El for() puede parecer un poco más raro, te dejo la forma que tiene en C:
Código
  1. for(int i = 1; i <= numeroCifras; ++i){
  2.  // lo que sea
  3. }
  4. // Intentar usar i aqui da error porque solo existe dentro del for()
También puedes declarar la variable fuera. La diferencia es que si la declaras en el for() solo podrás usarla dentro del for() y si la declaras fuera podrás usarla una vez termine el bloque for().
Código
  1. int i;
  2. for(i = 1; i <= numeroCifras; ++i){
  3.  // lo que sea
  4. }
  5. // Aqui puedes usar la i porque esta declarada fuera del for()

Te dejo que intentes pasar esto a C, no tiene mucha complicación y es más gratificante si lo consigues tú. Lo único un poco raro es la función pow() pero ya existe en C, para poder usarla tienes que incluir la biblioteca <math.h>.

PD: Un bloque while() se puede convertir en un bucle for() y viceversa. La norma general es que si el bucle depende de un contador o índice se use for() y si la condición es de otro tipo, se utilice un while(). Pero ambas soluciones van a ser correctas. En el caso anterior, el uso correcto sería el for() pues depende de un contador i.

No se como hacer un arreglo, lo cheque en algunas paginas pero la verdad me perdí por completo, la forma en que puse el primer código, uso las funciones que me enseño el profesor pero no nos ha enseñado otras, solo conozco if y else ¿Podrías orientarme sobre que funciones estudiar para poder llegar a hacer el ejercicio?

Muchisimas gracias
No sé qué pretende que hagáis en este ejercicio pero me parece indispensable el uso de bucles para poder completarlo.
Creo que es mejor que primero lo intentes sin usar arrays/arreglos y luego le vayas introduciendo cosas. Mejor ir poco a poco comprobando que lo que tienes funciona que meter muchas cosas y luego hacerte un lío para arreglar los fallos.
Los arrays están muy relacionados con el bucle for(), te pongo un ejemplo básico de uso de un array con un for():
Código
  1. #include <stdio.h> // Biblioteca para la funcion printf()
  2.  
  3. #define LONGITUD 10 // Constante que se llama LONGITUD y vale 10. Es recomendable que las uses en vez de inventarte un numero dentro del codigo.
  4. // Si en algun momento quieres cambiar la longitud, solo tendras que cambiar ese 10. Si has ido poniendo 10 por todo el codigo, tendras que cambiarlo muchas veces
  5.  
  6. int main(){
  7.  int digitos[LONGITUD]; // Declaras un array estatico <digitos> con una longitud de lo que valga LONGITUD (10)
  8.  // La primera posicion del array es 0 y la ultima es LONGITUD-1 (9). Se accede a cada posicion con []
  9.  for(int i = 0; i < LONGITUD; ++i){
  10.    digitos[i] = i; // Guardamos en cada posicion el valor del indice: 0, 1, 2, 3, 4, 5,...
  11.  }
  12.  printf("El contenido del array es:\n");
  13.  for(int i = 0; i < LONGITUD; ++i){
  14.    printf("%d  ", digitos[i]);
  15.  }
  16.  getchar();
  17.  return 0;
  18. }
Los arrays son un tema muy amplio, te recomiendo que busques algún recurso (libros, pdfs, vídeos,...) sobre programación en C. Y las dudas que te surjan las preguntes por aquí porque si tengo que explicarte todo, se va a hacer un tema enorme. Así puedes profundizar más y con más ejemplos.

Ya tienes bastantes cosas para probar.
Suerte. :-X
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AYUDA CON MEDIA ARITMETICA PLISSSSS
Programación Visual Basic
love_magic 4 3,652 Último mensaje 22 Julio 2006, 21:13 pm
por love_magic
Problema con secuencia de escape Ctrl + z
Java
novalida 1 6,980 Último mensaje 22 Agosto 2009, 01:47 am
por 1mpuls0
problema con aritmetica modular
Java
+ 1 Oculto(s) 2 2,332 Último mensaje 22 Mayo 2016, 18:30 pm
por + 1 Oculto(s)
ayuda con aritmetica de punteros
Programación C/C++
leo soto 2 2,700 Último mensaje 17 Marzo 2017, 19:21 pm
por MAFUS
[Ayuda] [Error] la operación aritmética ha provocado un desbordamiento
.NET (C#, VB.NET, ASP)
**Aincrad** 3 8,455 Último mensaje 23 Junio 2019, 23:08 pm
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines