C/Visual C - No entiendo la pregunta y no se plantearla

 
Vista:
sin imagen de perfil
Val: 185
Bronce
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo la pregunta y no se plantearla

Publicado por carlos (95 intervenciones) el 28/04/2017 23:12:16
El caso es que leyendo el libro me salen dos preguntas

1ºEscribe un programa que imprima el histograma de las longitudes de las palabras de su entrada. Es facil dibujar el histograma con las barras horizontales; la horientacion vertical es un reto interesante

Queria usar arreglos para hacerlo pero no se de que manera lo puedo poner iba a usar dos variables
int alg[c]
int his[d]
uno para la horizontal y otra vertical
Pero no se como plantearlo

2º Escriba el histograma de las frecuencias con las que se presentan diferentes caracteres leidos de entrada

No entiendo que es lo que me pregunta,¿debo poner que si se repiten 5 veces la misma palabra salgan 1s como histograma?

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 185
Bronce
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo la pregunta y no se plantearla

Publicado por carlos (95 intervenciones) el 03/05/2017 01:16:26
He seguido intentandolo pero no doy con la tela me pone todo espacios
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
 
 
main()
 
{
printf("\nIntroduzca una cadena y se imprimira un histograma con el numero de caracteres.\n");
printf(" de cada palabra.\n");
 
int i=0; /* contador para intro */
int s=0; /* s cogera lo escrito */
int a=0; /* se sumara*/
int d=0; /* se usara para el intro*/
int arreglo[2] = {d,a};
while ((s = getchar())=!EOF){
	if(s != '\n' || s!= '\t' || s!= ' '){
		a++;
	}
	else
		d++;
	}
 
	for(i=1;i<d; i++){
 
		for(s=1;s<a;s++){
			printf("*");
		}
				printf("\n");
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 88
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo la pregunta y no se plantearla

Publicado por Thanatos (29 intervenciones) el 04/05/2017 06:24:24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <stdio.h>
#include <ctype.h>
 
#define MAX_LETRAS 12  // máximo número de letras por palabra.
 
int main(void) {
    int longitudes[MAX_LETRAS + 1] = { 0 };
 
    // Cuenta las letras de cada palabra y almacena la cantidad en la
    // posición correspondiente del vector 'longitudes'.
    int longitud = 0;
    int letra;
    while ((letra = getchar()) != EOF) {
        if (isalpha(letra)) {
            ++longitud;
        } else {
            ++longitudes[longitud];
            longitud = 0;
        }
    }
 
    // Obtiene la mayor longitud almacenada en el arreglo 'longitudes'.
    int mayor = longitudes[1];
    for (int i = 2; i <= MAX_LETRAS; ++i) {
        if (longitudes[i] > mayor) {
            mayor = longitudes[i];
        }
    }
 
    // Enumera el eje vertical (Palabras). Dibuja la línea de separación
    // y el histograma.
    printf("\nHISTOGRAMA:\n\n  [P]\n\n");
    for (int i = mayor; i > 0; --i) {
        printf("%4d |   ", i);
        for (int j = 1; j <= MAX_LETRAS; ++j) {
            if (longitudes[j] < i) {
                printf("    ");
            } else {
                printf("*   ");
            }
        }
        printf("\n");
    }
 
    // Muestra la línea de separación horizontal.
    printf("      ");
    for (int i = 1; i <= MAX_LETRAS; i++) {
        printf("----");
    }
 
    // Enumera el eje horizontal (Letras).
    printf("\n      ");
    for (int i = 1; i <= MAX_LETRAS; i++) {
        printf("%4d", i);
    }
    printf("  [L]\n");
 
    return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 185
Bronce
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo la pregunta y no se plantearla

Publicado por carlos (95 intervenciones) el 04/05/2017 23:16:51
Gracias por responder,ya crei que nadie lo haria

el if (isalpha(letra))
Ese isalpha ¿que es?

Al final lo resolvi pero una cosa he intentado ahora en vertical (la otra parte del ejercicio) el problema es que mi codigo deja de responder y me devuelve el valor 3221225725

Dejo aqui el codigo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
main (){
	int i; /*contador for */
	int f; /*contador de espacio */
	int c; /* coge el teclado*/
	int d; /* este cambiara el arreglo */
	int contador_palabra; /*contara cada palabra que se escriba*/
	int total; /*este cogera el total mayor*/
	int arreglo [d];
	printf("Escribe lo que quieras de histograma");
 
	while((c=getchar()) != '\n'){
		if(c == '\n'||c == '\t' || c == ' '){
		arreglo[d]= contador_palabra;
	/* cuando haya espacio pasara a otro arreglo y a la vez todo lo que haya contado pasara
	a total*/
		d++;
				if (total < contador_palabra){
		total = contador_palabra;
		contador_palabra = 0;
	}
}
		else{
			contador_palabra++;
		}
 
 
}
 
/*escribir los espacios*/
d==0;
for (i=0; i<=total; i++){
printf (" ");
if(arreglo[d]=total){
	printf ("*");
	d++;
	total--;
}
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 88
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo la pregunta y no se plantearla

Publicado por Thanatos (29 intervenciones) el 05/05/2017 03:20:08
La función isalpha() verifica si el carácter que se le pasa como argumento es una letra, minúscula o mayúscula:

abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ

Devuelve un valor de tipo int. Si el argumento es una letra, devuelve un valor diferente de cero, si no es una letra devuelve cero.


Las formas estándar de la función main son:
1
int main(int argc, char **argv)

1
int main(void)

No es necesario escribir el valor de retorno, pero normalmente se utilizan:
1
return 0;

1
return EXIT_SUCCESS;


En el último código que publicaste, tienes varios errores:

Línea 8:
La variable d no ha sido inicializada, su valor es indeterminado, y estás utilizando esa variable para declarar el arreglo como un VLA (Arreglo de Longitud Variable), por eso la longitud del arreglo también está indeterminada.

Las líneas 13, 16 y 33 tienen el mismo problema de la indeterminación al usar la variable d.

Línea 30:
Usaste el operador relacional == en lugar del operador de asignación =.

Línea 33:
Usaste el operador de asignación = en lugar del operador relacional ==.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 185
Bronce
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo la pregunta y no se plantearla

Publicado por carlos (95 intervenciones) el 05/05/2017 15:50:16
Entonces como puedo decirle el arreglo si no es con una variable

Esto es muy lioso
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 185
Bronce
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

No entiendo la pregunta y no se plantearla

Publicado por carlos (95 intervenciones) el 05/05/2017 23:42:11
por fin esta resuelta 1 maldita semana entero pero echo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <stdio.h>
 
main (){
	int i; /*contador for */
	int f; /*contador de espacio */
	int c; /* coge el teclado*/
	int d=0;
	int contador=0; /* este cambiara el arreglo */
	int contador_palabra=0; /*contara cada palabra que se escriba*/
	int total=0; /*este cogera el total mayor*/
	int arreglo[10]= {0};
	int final=0;
	int limite=0; /* este guardara el ultimo arreglo*/
	printf("Escribe lo que quieras de histograma\n");
 
	while((c=getchar()) != '\n'){
	if (c=='\t'|| c == ' ' || c == '\n'){
	arreglo[d] = {contador_palabra};
	++d;
	limite++;
	contador = contador_palabra;
	contador_palabra = 0;
	if (total<contador){
		total = contador;
	}
}
	else{
		contador_palabra++;
	}
}
 
	printf ("limite %d\n", limite);
	printf ("total %d\n", total);
f= d;
 
 
while(total>0){
	printf ("\n");
	d=0;
	while(d<limite)
	{
		if(arreglo[d] >= total){
	printf("*");
	d++;
}
else
{
	printf (" ");
	d++;
}
}
total--;
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar