Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - adriana13

#1
Cita de: MAFUS en 28 Enero 2019, 22:21 PM
La presente solución necesitará que pulses INTRO cada vez que introduzcas un párrafo pues, por defecto, los terminales no evalúan a cada pulsación de tecla. Este efecto depende del terminal y se deben programar de diferente forma según cuál sea.

Por lo demás hace lo que dices.

#include <stdio.h>

int main() {
   char car_anterior = '\0';
   char car_actual;
   FILE *fp;
   char *ruta = "C:\\Users\\adria\\Downloads\\hola2.txt";

   fp = fopen(ruta, "w");

   car_actual = getchar();
   while(!(car_anterior == 'a' && car_anterior == car_actual)) {
       fputc(car_actual, fp);
       car_anterior = car_actual;
       car_actual = getchar();
   }

   fseek(fp, -1, SEEK_END); // Esto es para borrar la 'a' que se queda
   fputc('\0', fp);           // colgando al final del archivo.
   puts("\n*** FIN DE LA ENTRADA DE DATOS");

   fclose(fp);
}




Muchas gracias! queria hacer algo asi utilizando anterior , actual pero no sabia cómo!! recien estoy aprendiendo ...
#2
Cita de: YreX-DwX en 28 Enero 2019, 22:19 PM
Existirán muchas formas de hacerlo y según los conocimientos que tengas y lo eficiente que lo quieras hacer tendrás unas alternativas a mano u otras.
Por ejemplo el bloque de la 26 a la 36 me parece muy ineficiente además de limitado a un número determinado de caracteres.
Te doy una idea sencilla que no requiere manejarse en el interior de un fichero y tú verás si eres capaz de implementarlo o usarlo para crear tu propia idea (cuando escribes dos 'a' seguidas no sé si deben guardarse ambas en el fichero o sólo la primera, para estos ejemplos supongo que sólo la primera):

char anterior != 'a', actual
pedir dato -> actual
si anterior != 'a' || actual != 'a'
    anterior = actual
    guardar anterior en fichero
sino
    fin del programa


Si tienes alguna duda para implementar este algoritmo ya me dirás. Suerte :-X




ESto era justamente lo que queria hacer!! Estoy recien aprendiendo por eso lo desastroso de mis codigos jjja pero muchas gracias!!!
#3
Hola, tenia que hacer un subprograma que lea letras y las incorpore a un archivo, el programa finaliza si ingreso 2 letras "a" seguidas. El codigo que hice funciona pero me parece muy engorroso, quisiera que me explicaran alguna manera alternativa que no tenga q escribir tanto codigo. gracias



#include <stdio.h>
#include<stdlib.h>
FILE *fd;
void leer_letras ();

int main(){


leer_letras();

return 0;}

void leer_letras (){
int i; char let[5];
FILE *fd;
char direccion[]="C:\\Users\\adria\\Downloads\\hola2.txt";
fd= fopen(direccion, "w");
if (fd==NULL){
    printf("error");
    }
    for (i=0; i<5; i++){
printf("\ningrese una letra: ");
scanf("%c",&let[i]);
fflush (stdin);
fprintf(fd, "%c", let[i]);

if(let[0]=='a'&&let[1]=='a'){printf("dato no valido");
exit(-1);}
if(let[1]=='a'&& let[2]=='a'){printf("dato no valido");
exit(-1);}
if(let[2]=='a'&& let[3]=='a'){printf("dato no valido");
exit(-1);}
if(let[3]=='a'&& let[4]=='a'){printf("dato no valido");
exit(-1);}
if(let[4]=='a'&& let[5]=='a'){printf("dato no valido");
exit(-1);}
   }

fclose(fd);

}

#4
Hola necesito ayuda con este codigo, no se donde esta el error , no me genera el archivo....

//: Generar un subprograma que permita leer de teclado letras e incorporarlos a un archivo.//
//La lectura se realiza hasta que se ingresan dos letras 'a' seguidas. //

#include <stdio.h>
#include<stdlib.h>
int leer_letras (int letra[]);

int main(){
int let[5], i;
for (i=0; i<5; i++){
printf("\ningrese una letra: ");
scanf("%d", &let[i]);
fflush (stdin);}


int leer_letras(int let[]);


return 0;}

int leer_letras (int letra[]){
int i;
FILE *fd;
fd= fopen("C:\\Users\\adria\\Downloads\\hola.txt", "wt");
if (fd==NULL){
    printf("error");
    return 1;}

    int anterior, siguiente;
    letra[0]=anterior;
    siguiente= letra[1];


    if (siguiente=="a" && anterior=="a"){
        return 1;
    }
    else {
    fputc(letra[i], fd);
            }

fclose(fd);
return 0;

}


MOD: Etiqueta GeSHi.
#5
el codigo completo es este: con las modificaciones tal cual me indicaste

/*Generar un subprograma que permita, dado un vector de 5400 posiciones,
obtener el promedio de los elementos del vector. Los valores del vector son enteros, y el resultado real.*/


  #include<stdlib.h>
#include <stdio.h>
#include<time.h>
const int TAM= 5400;
float promedio_V(int vector[], int tamx );

int main(){
   int vector[TAM];
   int i;
    srand(time(0));
   
    for(int i=0; i<5400; i++){
      
      vector = 1+ rand() % 100;
      printf("\n%i", vector);
   }
   

   printf ("\nel promedio del vector es %.2f", promedio_V(vector,TAM));
   return 0;}
   
   float promedio_V(int vector[], int tamx) {
   int i;
   float suma=0;
   
   for ( int i=0; i<tamx; i++){
      
      suma += vector;
      return suma/tamx;}
   }
      
   
   
#6
Cita de: YreX-DwX en 14 Noviembre 2018, 04:10 AM
Varias cosas a tener en cuenta. Aunque en este programa al ser sencillo no afectan al funcionamiento:

Hay que limitar el uso de variables globales, ya que estas se pueden alterar desde cualquier parte del programa. Por eso es mejor declarar como global y constante el tamaño del vector pero el vector es mejor declararlo dentro del main (date cuenta de que si el vector es global no es necesario pasarlo como parámetro de la función ya que se puede usar directamente).

Si declaramos una constante <TAM> para el tamaño del vector, usar esa constante en la declaración del vector. Así si queremos cambiar el tamaño del vector sólo tendríamos que cambiarlo en el valor de <TAM> y el programa ya estaría modificado.

En el prototipo de la función es cierto que no hace falta indicar el nombre de las variables, solo su tipo. Pero ya que está el nombre del vector, quedaría mejor poner el nombre del segundo parámetro (el tamaño en este caso). Recalcar que al ser variables globales no sería necesario pasarlas como parámetros ya que ya existen en todo el programa. Nótese también que en el main se utiliza la variable <TAM> que es global mientras que en el cuerpo de la función se utiliza <tam> ya que es el nombre con el que nos referimos al segundo parámetro. Podría eliminarse ese segundo parámetro y usar <TAM> dentro de la función también.

En el main hay dos bucles: uno para rellenar el vector y otro para mostrar cada elemento. Esto se puede hacer en un solo bucle para ahorrar tiempo y no tener que recorrer el bucle completo dos veces.
Además de eso se especifica que el resultado es real, por lo que la función debe devolver un float o un double, no un int.

Puedes probar a cambiar algunas de las cosas que he comentado arriba para entender su funcionamiento y si tienes alguna duda no dudes en preguntar.
El código final quedaría algo por el estilo:


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

const int TAM = 5400;

float promedio_V(int vector[], int tam);

int main(){
int vector[TAM];

srand(time(0));

for(int i = 0; i < TAM; i++){
vector[i] = 1 + rand() % 100;
printf("%d\n", vector[i]);
}

printf("El promedio del vector es %.2f\n", promedio_V(vector, TAM));

return 0;
}

float promedio_V(int vector[], int tam){
float suma = 0;

for(int i = 0; i < tam; i++)
suma += vector[i];

return suma/tam;
}



Hola!! hice las modificaciones que me sugeriste, el tema es que sigue sin dar el resultado, compila pero siempre me da como resultado 0.00
#7
muchas gracias chicos voy a probar modificar el codigo con sus sugerencias!!
#8
Hola necesito ayuda con este ejercicio, me da como resultado 0, no le encuentro el error al codigo


/*Generar un subprograma que permita, dado un vector de 5400 posiciones,
obtener el promedio de los elementos del vector. Los valores del vector son enteros, y el resultado real.*/


  #include<stdlib.h>
#include <stdio.h>
#include<time.h>

int promedio_V(int vector[], int );
int vector[5400], i; const int tam= 5400;
int main(){
   
   
    srand(time(0));
   
    for(i=0; i<5400; i++){
      
      vector= 1+ rand() % 100;
      
   }
      for (i=0;i<5400; i++){
   printf("\n%i", vector);}


   printf ("el promedio del vector es %.2f", promedio_V(vector,tam));
   return 0;}
   
int promedio_V(int vector[], int tam) {
   float suma=0;
   
   for (i=0; i<tam; i++){
      
      suma=(suma+ vector[tam])/5400;
      
   }
      
   return suma ;
   
}
#9
Cita de: Beginner Web en 20 Octubre 2018, 21:33 PM
int suma(int vector[], int i)
{
   if(i==-1)//<<--Es el caso base que indica que el vector esta vacio y ya no tiene que volver a llamar a la funcion recursiva y empezar a retornar todos los valores obtenidos en cada llamada recursiva
      return 0;
   else{
      if(vector>100){
          return vector+suma(vector,i-1);
       }
       else{
          return suma(vector,i-1);
      }
   }
}


gracias!!! entendi perfecto
#10
Cita de: Beginner Web en 19 Octubre 2018, 23:47 PM
#include<stdlib.h>
#include <stdio.h>
#include<time.h>

int suma(int vector[], int i);

int main()
{
int vector[20], i=0;   
srand(time(0));
    for(i=0; i<20; i++){
       vector[i]= 1+ rand() % 300;
    }
    for(i=0;i<20; i++){
    printf("\n%i", vector[i]);
}
    printf("\nEl resultado de la suma es: %i", suma(vector, i));
return 0;   
}

int suma(int vector[], int i)
{
if(i==-1)
return 0;
else{
if(vector[i]>100){
return vector[i]+suma(vector,i-1);
}
else{
return suma(vector,i-1);
}
}
}




Gracias!! anduvo perfecto pero me podrias explicar por qué se pone en el caso base  if i== -1?? eso no lo entiendo y despues al final por que se pone un else antes del return suma. gracias!!