martes, 4 de enero de 2011

Kernighan_Ritchie_1.17

_____________________________________________________________________________________
1.17 Escriba un programa que imprima todas las líneas de entrada que sean mayores de 80 caracteres.
_____________________________________________________________________________________

  #include<stdio.h>
  #define Tamano 1000

  void Imprime_Cadena(char [], int );

  /*////////////////////////////////////////////
  // FUNCION MAIN
  ///////////////////////////////////////////*/
  
  int main()
  {            /*Abre main */
  int c;
  int i = 0;
  char Arreglo[Tamano] = {0, 0, 0};

  printf("\nIntroduzca una cadena, y si esta es mayor a ochenta caracteres, se imprimira como salida.\n");
  
  while ( (c = getchar()) != EOF )
  {                    /* Abre while */
  Arreglo[++i] = c;
  }                    /* Cierra while */
 
  if ( i > 80 )
  /* Llamada a la funcion imprime */
  Imprime_Cadena(Arreglo, i);

  if ( i > Tamano )

  printf("\nSe excedio el tamano maximo de la cadena, que es de  %d  caracteres. ", i);

 }               /* Cierra main */

 
 /*///////////////////////////////////////////////////////////
 // FUNCION IMPRIME_CADENA
 ////////////////////////////////////////////////////////////*/

 void Imprime_Cadena( char Cadena[], int tamano)

 {    /* Abre Imprime*/

  int s = 1;
  for (s  = 1; s <= tamano; s++)
  {  /* Abre for */
  printf("%c", Cadena[s]);
  }  /* Cierra for*/

  printf("\n");
 }    /* Cierra Imprime*/

6 comentarios:

  1. Hola, estaba probando tu programa y esta mal, osea no hace lo que pide el enunciado, tu programa imprime solo cuando la cantidad de los caracteres ingresados es mayor a 80, y el enunciado dice que tiene que imprimir las lineas mayores de 80 caracteres..

    escribi algo, que no me gusta mucho, pero algo hace, para ejemplo imprime toda linea mayor a 10, no hay ganas de escribir 80 caracteres.

    #include
    //Imprime las lines mayores a 80 caracteres.
    #define max 1000

    void imprime(char lineas[],int i);

    int main(void)
    {
    int a,i=0;
    char linea[max]={0,0};
    printf("Este programa imprimira las lineas mayores a 80 caracteres.\n\n");
    while((a=getchar())!=EOF){
    if (a!='\n'){
    linea[i]=a;
    ++i;
    }
    else{
    linea[i]='\0';
    imprime(linea,i);
    i=0;
    }
    }
    return 0;
    }

    void imprime(char lineas[],int i){
    if(i>10)
    printf("%s \n",lineas);
    }

    este codigo no me gusta mucho, ahora estoy tratando de guardar todos los caracteres en un arreglo y desde ese arreglo contar los caracteres hasta que encuentre un \n y si este es mayor a 80 imprimirlo.

    saludos..

    ResponderEliminar
  2. Hola, Roberto. Voy a revisar este y los demas programas. Aunque ahora no he tenido tiempo, espero hacerlo pronto. Gracias por tu codigo. En cuanto pueda lo reviso.
    Saludos.

    ResponderEliminar
  3. Hola, despues de pelear un poco con el codigo escribi algo un poco mejor que el anterior..
    Solo como ejemplo imprime las lineas de mas de 5 caracteres..

    Saludos..

    #include
    //Imprime las lines mayores a 80 caracteres. Ver.N°3
    #define max 1000

    void imprime(char lineas[],int caracteres);

    int main(void)
    {
    int a,i=0;
    char linea[max]={0,0};
    printf("Este programa imprimira las lineas mayores a 80 caracteres. (Ver.N-3)\n\n");
    while((a=getchar())!=EOF){
    if (a!='\n'){
    linea[i]=a;
    ++i;
    }
    else{
    linea[i]='\0';
    ++i;
    }
    }
    imprime(linea,i);
    return 0;
    }

    void imprime(char lineas[],int caracteres){
    int i,j,k;
    char imprimir[max]={0,0};
    for(i=0,j=1;i5){
    for(k=0;k<j;k++){
    imprimir[k]=lineas[((i+1)-j)+k];
    }
    printf("%s \n",imprimir);
    j=0;
    }
    else{
    j=0;
    }
    }
    }
    }

    ResponderEliminar
  4. Hola, Roberto. Gracias por el código. Yo también he estado pensando en los últimos programas del capítulo 1 del Kernighan. En cuanto pueda los corrijo. Saludos.

    ResponderEliminar
  5. Este tambien funciona y va mas o menos en la misma idea... Alguien quiere comentarme algun error, o algo que se le podria mejorar?


    #include
    #define Limit 1000
    void imprimir(char [], int);
    void cero(char [], int);
    int main()
    {
    printf("Programa que solo imprime lineas que superan los 10 caracteres de largo\n");
    int c, i;
    i = 0;
    char s[Limit] = {0 , 0 , 0};
    while( (c = getchar()) != EOF)
    {
    s[++i] = c;

    if(i > 10 && c == '\n')
    {
    imprimir(s, i);
    i = 0;

    }
    if(c == '\n')
    {
    cero(s, i);

    i = 0;
    }
    }

    getchar();

    return 0;
    }
    void cero(char s[], int limit)
    {
    int a;
    for( a = 1; a <= limit; a++)
    {
    s[a] = 0;
    }
    }
    void imprimir(char s[], int limit)
    {
    int a;
    for( a = 1; a <= limit; a++)
    {
    printf("%c", s[a]);
    }
    printf("\n");
    }

    ResponderEliminar
  6. yo he usado matrizes por eso que dice de que las lineas deben ser mas grandes que 80 y en cada fila he guardado una linea

    ResponderEliminar

Related Posts Plugin for WordPress, Blogger...