2 Tipos de variables I

Conceptualmente, desde el punto de vista de un programador, una variable es una entidad cuyo valor puede cambiar a lo largo de la ejecución de un programa.

En el nivel más bajo, una variable se almacena en la memoria del ordenador. Esa memoria puede ser un conjunto de semiconductores dentro de un circuito integrado, ciertos campos magnéticos sobre una superficie de un disco, ciertas polarizaciones en una memoria de ferrita, o cualquier cosa que aún no se haya inventado. Afortunadamente, no deberemos preocuparnos por esos detalles.

teclado binario
Teclado para programación en binario.

En un nivel más lógico, una variable ocupa un espacio de memoria reservado en el ordenador para contener sus valores durante la ejecución de un programa. Cada variable debe pertenecer a un tipo determinado, y ese tipo determina, por una parte, el tamaño del espacio de memoria ocupado por la variable, y por otra, el modo en que se manipulará esa memoria por el ordenador.

No olvides, si es que ya lo sabías, que la información en el interior de la memoria del ordenador se almacena siempre de forma binaria, al menos a bajo nivel. El modo en que se interpreta la información almacenada en la memoria de un ordenador es, en cierto modo, arbitraria; es decir, el mismo valor puede codificar una letra, un número, una instrucción de programa, etc. No hay nada diferente en una posición de memoria que contenga una instrucción de programa o una letra de un texto; si observamos una posición de memoria cualquiera, no habrá modo de saber qué significa el valor que contiene. Es mediante el tipo como le decimos al compilador el modo en que debe interpretarse y manipularse cierta información binaria almacenada en la memoria de un ordenador.

De momento sólo veremos los tipos fundamentales, que son: void, char, int, float y double, en C++ se incluye también el tipo bool. También existen ciertos modificadores, que permiten ajustar ligeramente ciertas propiedades de cada tipo; los modificadores pueden ser: short, long, signed y unsigned, y pueden combinarse algunos de ellos. También veremos en este capítulo los tipos enumerados, enum.

Sobre la sintaxis

A partir de ahora mostraremos definiciones de la sintaxis para las diferentes sentencias en C++.

Estas definiciones nos permiten conocer las diferentes opciones para cada tipo de sentencia, las partes obligatorias, las opcionales, dónde colocar los identificadores, etc.

En este curso las definiciones de sintaxis se escribirán usando un rectángulo verde. Las partes opcionales se colocan entre corchetes [ ], los valores separados con | indican que sólo puede escogerse uno de esos valores. Los valores entre <> indican que debe escribirse obligatoriamente un texto que se usará como el concepto que se escribe en su interior.

Por ejemplo, veamos la siguiente sintaxis, que define una sentencia de declaración de variables de tipo char:

[signed|unsigned] char <identificador>[,<identificador2>[,<identificador3>]...];

Significa que se puede usar signed o unsigned, o ninguna de las dos, ya que ambas están entre [ ], y separadas con un |.

El subrayado de signed indica que se trata de la opción por defecto. En este caso, si no se usa signed ni unsigned, el compilador elige la opción signed.

A continuación de char, que debe aparecer de forma obligatoria, debe escribirse un texto, que tiene ser una única palabra que actuará como identificador o nombre de la variable. Este identificador es el que usaremos para referirnos a la variable en el programa. En un programa C++ siempre llamaremos a las cosas por su nombre.

Opcionalmente, podemos declarar más variables del mismo tipo, añadiendo más identificadores separados con comas. Podemos añadir tantos identificadores como queramos.

Para crear un identificador hay que tener en cuenta algunas reglas, ya que no es posible usar cualquier cosa como identificador.

  • Sólo se pueden usar letras (mayúsculas o minúsculas), números y ciertos caracteres no alfanuméricos, como el '_', pero nunca un punto, coma, guión, comillas o símbolos matemáticos o interrogaciones.
  • El primer carácter no puede ser un número.
  • C++ distingue entre mayúsculas y minúsculas, de modo que los identificadores numero y Numero son diferentes.

Finalmente, la declaración termina con un punto y coma.

Las palabras en negrita son palabras reservadas de C++. Eso significa que son palabras que no se pueden usar para otras cosas, concretamente, no se pueden usar como identificadores en un programa C++. Es decir, están reservadas para usarse del modo en que se describe en la sintaxis, y no se pueden usar de otro modo.

Serán válidos estos ejemplos:

signed char cuenta, cuenta2, total;
unsigned char letras;
char caracter, inicial, respuesta;
signed char _letra;

Tipos fundamentales

En C sólo existen cinco tipos fundamentales y los tipos enumerados, C++ añade un séptimo tipo, el bool, y el resto de los tipos son derivados de ellos. Los veremos uno por uno, y veremos cómo les afectan cada uno de los modificadores.

Tipo "char" o carácter:

[signed|unsigned] char <identificador>[,<identificador2>[,<identificador3>]...];

Es el tipo básico alfanumérico, es decir que puede contener un carácter, un dígito numérico o un signo de puntuación. Desde el punto de vista del ordenador, todos esos valores son caracteres. En C++ este tipo siempre contiene un único carácter del código ASCII. El tamaño de memoria es de 1 byte u octeto. Hay que notar que en C un carácter es tratado en todo como un número, de hecho, habrás observado que puede ser declarado con y sin signo. Si no se especifica el modificador de signo, se asume que es con signo.

Nota: sé que esto sorprende, inquieta y despista a muchos lectores, así que probablemente necesite alguna explicación más detallada. De modo que he añadido un pequeño apéndice que explica cómo es posible que un número y una letra se puedan representar con el mismo tipo: Apéndice A.

Este tipo de variables es apto para almacenar números pequeños, como los dedos que tiene una persona, o letras, como la inicial de mi nombre de pila.

El tipo char es, además, el único que tiene un tamaño conocido y constante. Para el resto de los tipos fundamentales que veremos, el tamaño depende de la implementación del compilador, que a su vez suele depender de la arquitectura del procesador o del sistema operativo. Sin embargo el tipo char siempre ocupa un byte, y por lo tanto, podemos acotar sus valores máximo y mínimo.

Así, el tipo char con el modificador signed, puede tomar valores numéricos entre -128 y 127. Con el modifiador unsigned, el rango está entre 0 y 255.

El hecho de que se trate de un tipo numérico entero nos permite usar variables de char para trabajar con valores pequeños, siempre que lo consideremos necesario.

El motivo por el que este tipo también puede contener un caracter es porque existe una correspondencia entre números y caracteres. Esa correspondencia recibe el nombre de código ASCII.

Según este código, por ejemplo, al número 65 le corresponde el carácter 'A' o al número 49 el '1'.

El código ASCII primitivo usaba sólo 7 bits, es decir, podía codificar 128 caracteres. Esto era más que suficiente para sus inventores, que no usaban acentos, eñes, cedillas, etc. El octavo bit se usaba como bit de paridad en transmisiones de datos, para la detección de errores.

Después, para internacionalizar el código, se usó el octavo bit en una tabla ASCII extendida, que puede codificar 256 caracteres.

Pero como esto también es insuficiente, se han creado otras codificaciones de caracteres multibyte, aunque esto queda fuera de las posibilidades de char.

Comentarios de los usuarios (56)

Ángel
2011-03-02 20:30:23

Sólo agradecer al autor/autores de la página su esfuerzo en crearla. Un saludo.

CHARLIE
2011-05-04 02:07:47

muchas gracias tu la informacion es muy valiosa para mi tarea gracias:)

alejandro
2011-05-09 18:27:59

oye me parece que el trabajo hecho en este curso de vital importancia para las persona como yo que apenas empezamos en este reconocimiento

muchas gracias

Salva
2011-05-27 20:17:51

Muchas gracias por el curso, me ha sorprendido la calidad del manual y lo ameno que se hace seguirlo. Felicitación mayuscula al creador del mismo.

Luis
2011-06-18 21:02:06

Ignoro si llegaré al final de mi propósito de aprender C++, pero si puedo decirte que este manual es el único de los que he intentado seguir (incluido el mítico Eckel, que posee grandes dotes narrativas pero insuficientes para mi exigua sustancia gris) que me mantiene en vilo, en el que no he llegado al momento ese de desilusión dónde dices: "ya aquí no puedo seguir"...Muchas gracias por tu generosidad.

Tavo
2011-06-28 04:12:46

muchas gracias por esto, las explicaciones estan muy buenas...

Francisco Javier
2011-08-10 16:50:37

Esta muy bien,agradecerte el esfuerzo que has hecho.

roberto
2011-09-13 18:55:00

graxias por la informacion pero me gustaria saber km guardar caracteres dentro d una variable

Steven R. Davidson
2011-09-13 19:14:44

Hola Roberto,

En este capítulo 2, hemos visto la forma de definir variables de tipo 'char', como de otros tipos de datos. En el capítulo 4 veremos el operador de asignación, para guardar valores en variables previamente definidas. Aunque volvamos a ver este operador en el capítulo 5, principalmente el capítulo 6 trata de la definición de variables y además veremos ejemplos completos de código fuente.

Para guardar varios caracteres en serie, necesitas crear y usar arrays (o arreglos o vectores) de tipo 'char'. Veremos las cadenas de caracteres en el capítulo 8 y los arrays en general, en el capítulo 10.

Espero que esto te oriente.

Steven

erick
2011-11-14 05:34:04

oye tengo una duda me podrias decir para que sirven printf,getche y void??

Steven R. Davidson
2011-11-15 14:56:31

Hola Erick,

- 'printf()' es una función estándar, declarada en <cstdio> (o <stdio.h> de C). Sirve para mostrar datos, indicando su formato, en la pantalla. Sugerimos usar 'cout <<' en C++ ya que es más sencillo. Veremos 'cout' en los ejemplos del capítulo 6 ( http://c.conclase.net/curso/index.php?cap=006p#resueltos1_6 ).

- 'getche()' es una función no estándar que pertenece a los compiladores de Borland, aunque otros compiladores pueden contenerla en sus bibliotecas, declarada en <conio.h>. Originalmente, servía para conseguir un carácter directamente del teclado, como 'getch()', pero 'getche()' mostraba directamente ese carácter en la pantalla. Puedes consultar la referencia de <conio.h> en nuestra página: http://c.conclase.net/borland/index.php?borlandlib=conio#inicio

- 'void' es un vocablo de C/C++ para indicar que "no hay tipo de dato". Se suele usar con las funciones, para indicar que una función no retorna un dato y también se usa para indicar que una función no acepta ningún parámetro; o sea, una lista vacía de parámetros. Este último uso no es necesario en C++, ya que no hace falta escribir nada. También se usa 'void' con punteros, para crear punteros genéricos; esto lo veremos más adelante.

Espero haber aclarado las dudas.

Steven

Gilberto
2011-12-04 02:10:40

Hola me gustaria que me recomendarn un buen compilador de c++,

ya que el la web existen muchos pero me pierdo en cual sera el mejor o el mas apropiado para este curso, gracias

Steven R. Davidson
2011-12-11 14:51:30

Hola Gilberto,

Para programar, recomendamos MinGW ( http://www.mingw.org/ ) que se incluye con el IDE, Code::Blocks ( http://www.codeblocks.org/downloads/26 ). Por supuesto, puedes usar otros compiladores existentes, como por ejemplo Visual C++ 2011 Express Edition de Microsoft. Puedes descargarlo gratuitamente desde su página yendo a: http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express Elige el idioma en la lista que aparece a mano derecha. Descargarás un programa que es el gestionador de descargas e instalador para VC++. Eso sí, VC++ ocupa bastante en el disco duro comparado con otros compiladores e IDE's.

En general, cualquier compilador moderno de C++ te servirá para programar mientras aprendes el lenguaje.

Hasta pronto,

Steven

Marco
2011-12-12 07:51:28

Hola a todos. Primero felicitarlos por la pagina que esta muy buena, a todos los que nos estamos iniciando en este lenguaje pues que nos cae a pelo y segundo hacerles una consulta sobre algun posible error que tenga en el siguiente programa:

#include<stdio.h>
#include<conio.h>
int main()
{
    float num1,num2,num3;
    
    printf ("Put first number: \n");
    scanf ("%f", &num1);
    printf ("Put second number: \n");
    scanf ("%f", &num2);
    printf ("Put third number: \n");
    scanf ("%f", &num3);
if ((num1<num2)&&(num2<num3))
{
    printf ("The numbers are in ascending order");  
}
else if ((num1>num2)&&(num2>num3));                
{
     printf ("The numbers are in descending order"); 
} 

else
{
    printf ("The numbers are in jumble");     
}

    getch();
}
me sale: expected primary expression before else
yo estoy usando el devc++
si me pudieran ayudar pues se los agradeceria un monton, gracias de antemano, byee
Marco
2011-12-12 07:54:37

#include<stdio.h>

#include<conio.h>

int main()

{

float num1,num2,num3;

printf ("Put first number: \n");

scanf ("%f", &num1);

printf ("Put second number: \n");

scanf ("%f", &num2);

printf ("Put third number: \n");

scanf ("%f", &num3);

if ((num1<num2)&&(num2<num3))

{

printf ("The numbers are in ascending order");

}

else if ((num1>num2)&&(num2>num3));

{

printf ("The numbers are in descending order");

}

else

{

printf ("The numbers are in jumble");

}

getch();

}

Steven R. Davidson
2011-12-12 11:10:43

Hola Marco,

El problema es que agregas un 'else' si un 'if'. Seguramente dirás que esto no es cierto, pero eso es porque has cometido un error lógico anteriormente. El código problemático es el siguiente:

else if ((num1>num2)&&(num2>num3));

Como puedes ver, agregaste un punto y coma al final de 'if'. Esto significa que se ejecuta una sentencia nula si la condición del 'if' es válida. Esto es válido, pero no realiza el programa que quieres. Y claro está al llegar a la siguiente parte 'else', el compilador se queja de que no hubo un 'if' obligatorio anteriormente.

La solución obviamente es eliminar ese punto y coma que no debería estar ahí según la lógica del programa.

Por último, quisiera comentarte que <conio.h> no es un fichero de cabecera estándar y por tanto no todos los compiladores tienen por qué implementarlo. Así que tenlo presente en futuros programas que hagas.

Espero haber aclarado la duda.

Steven

Marco
2011-12-15 05:14:08

Mil gracias Steven por la correccion...thumbs up¡ =)

juan
2012-01-02 20:06:08

buen dia

es para saber si el programa dev c++ es adecuado para este curso. si no es asi q otro programa me recomendarían.

giodavid
2012-01-11 23:54:46

que bueno que me tope con este curso

Oscar
2012-01-29 21:52:26

Hola antes que nada una felicitación para los creadores de este curso, ¡Es excelente!

Mi duda es con respecto a la toma de caracteres estándar (teclado), utilizo (Dev C++) por ejemplo:

char nombre[20];

cout<<”Escribe tu nombre completo:”<<endl;

cin>>nombre;

cout<<nombre;

En el anterior caso no respetara el carácter nulo, si fue el nombre Oscar Perez solo mostrara Oscar.

char nombre[20];

cout<<”Escribe tu nombre completo:”<<endl;

gets(nombre);

cout<<nombre;

En este caso si respeta el carácter nulo con la librería <iostream> y buscando en la web encontre otras formas:

1) std::cin>>variable;

2) put(nombre_de_la_variable);

3) cin.getline(nombre_de_la_variable)

Pero lo que no encuentro es una explicación concreta de las diferencias de cada una de ellas, en mi caso “quiero encontrar una forma de guardar en un array tipo char”, los caracteres nulo y salto de línea (como un tipo bloc de notas).

Espero haberme explicado correctamente y agradezco de antemano todo tipo de sugerencias. GRACIAS

Steven R. Davidson
2012-01-29 22:31:56

Hola Óscar,

En primer lugar, no se trata del carácter nulo, sino del comportamiento de 'cin >>' con cadenas de caracteres. Esta lectura se detiene por una de dos razones: a) al leer un espacio blanco: ' ', '\r', '\n', '\t', '\f', o '\v'; b) al leer un carácter de fin-de-fichero, EOF. En cualquier caso, se agrega el carácter nulo al final de la cadena después de terminar la lectura.

No se recomienda usar 'gets()', aunque sea estándar, porque esta función no toma en cuenta la cantidad de caracteres en el array. En su lugar, y además en C++, usaríamos la función miembro 'getline()'. Esto es,

cin.getline( nombre, 20 );

Leerá todos los caracteres hasta alcanzar a) el carácter separador que por defecto es '\n', b) la cantidad máxima indicada menos 1 (19 en este ejemplo), o c) el carácter de fin-de-fichero, EOF. Sea cual sea la razón, siempre se agrega el carácter nulo a la cadena.

Espero haber aclarado un poco el tema.

Steven

Oscar
2012-01-30 05:41:26

Muchas gracias Steven

Saludos.

Cesar Espinosa
2012-02-01 21:42:34

Soy Contador :S pero siempre me interesaron, más las computadoras, estoy muy contento de tomar este curso, lo mejor de todo es que evita el bloqueo websense impuesto en mi oficina, :D

olga
2012-02-10 13:05:05

Hola, enhorabuena, este es el mejor curso de C que he encontrado en internet, y muchas gracias por ponerlo a disposición de quien quiera gratuitamente :)

Tengo una duda sobre las variables tipo char: la tabla ASCII va de 0 a 255, con los caracteres que corresponden a cada número.

Entonces, ¿cómo es posible que el tipo char sea por defecto signed? ¿para qué sirven los valores desde -128 a -1? ¿y entonces no se pueden representar los caracteres correspondientes a 128 hasta 255? (a menos que la definamos como unsigned char, claro)

Steven R. Davidson
2012-02-10 13:36:33

Hola Olga,

Veamos. En primer lugar, la tabla ASCII estándar es de 7 bits, esto significa que hay 128 caracteres (2^7 = 128). Por ello, 'char' o explícitamente, 'signed char' nos sirve para representar los caracteres de la tabla ASCII estándar, sin usar los negativos: -128 á -1.

Ahora bien, al paso de los años y por necesidad, muchos extendieron la tabla ASCII para representar otros caracteres, como por ejemplo, letras acentuadas (tilde, circunflejo, grave, diéresis, y otras virgulillas). También se extendió para representar combinaciones de teclas: CTRL, ALT, y las de función (F1, F2, etc.) específicamente para el PC. Sin embargo, cada sistema operativo y plataforma en general extendieron la tabla ASCII como quisieron.

La verdad es que todo esto es un poco lioso, por lo que crearon un nuevo estándar, Unicode que incorpora la tabla ASCII. El nuevo estándar de C++ se basa ahora en Unicode para sus caracteres para dar solución a este problema de extensiones a ASCII en diferentes plataformas.

Espero haber aclarado el tema.

Steven

olga
2012-02-11 10:10:35

Perfectamente, muchas gracias Steven :)

ruben oscar
2012-02-18 13:01:24

quiero comensar a programar en c.

quisiera saber que editor usar para escribir y que compilador deberia usar, el mas sencillo pues recien comienzo, gracias

amparo
2012-02-18 19:09:21

Quisiera apoyo tengo que hacer un programa utilizando como parametro la fecha de nacimiento y realmente no he entendido bien como lo hago depronto con un ejemplo

Salvador Pozo
2012-02-20 19:13:32

Hola, Rubén:

Te recomiendo que consigas un IDE. Es un programa que incluye todo lo necesario para programar: editor, compilador, enlazador y debugger.

El IDE concreto depende del sistema operativo. Como imagino que usas Windows, te recomiendo Code::Blocks o ZinjaI:

http://www.codeblocks.org/

http://zinjai.sourceforge.net/

El segundo está en español.

Hasta pronto.

Emanuel esquivias morales
2012-02-25 22:21:35

oigan esta buenisima la pagina !!! pero tengo un problema con un pequenio programa!! soy principiante lo que pasa es que no se como crear este programa no se si me pudieran ayudar el programa es el siguiente: crear un programa para calcular el promedio de 5 calificaciones de un estudiante y que debera de iniciar pidiendo que se inserte el nombre completo del estudiante. eso es todo el programa lo que no me sale es al momento de poner el nombre no me permite escribirlo con espacios, cuando lo escribo todo se guido si me da el programa pero si le doy un espacio se realiza todo y no me calcula las 5 calificaciones.gracias de todos modos y espero me ayuden

Steven R. Davidson
2012-02-25 22:46:21

Hola Emanuel,

Esto es el comportamiento de 'cin >>'. Para realizar lo que quieres, usa la función miembro 'getline()'. Por ejemplo,

char szNombreCompleto[256];

cin.getline( szNombreCompleto, 256 );

Por defecto, leerá todos los caracteres hasta que surja una de estas tres condiciones: a) hasta llegar a un carácter menos que la cantidad indicada (255 en este caso), b) hasta llegar al fin-de-fichero (EOF), o c) hasta llegar al carácter separador, que por defecto es '\n', el cual se extrae pero no se guarda.

Espero que esto te sirva.

Steven

Emanuel esquivias morales
2012-02-26 05:19:10

muchisimas gracias!!!! solamente una pregunta mas de las dos formas me puede salir o solamente cuando utilizo la funcion? pero gracias de todos modos !!! :)

Emanuel esquivias morales
2012-02-26 05:28:47

hola steven !!! este es el programa me podrias decir que esta mal?

#include "stdio.h"

main()

{

char nombre [30];

float a;

printf(ïntroduce el nombre de la prenda: \n");

scanf("%s,nombre);

printf("precio de la prenda: \n");

scanf("%f,&a);

printf("precio con descuento: %f",a*.925);

getch();

}

como ya te habia dicho lo unico que me falla es a la hora de poner el nombre de la prenda tiene que ser sin espacios si no se me reproduce todo el programa junto y no funciona.

Steven R. Davidson
2012-02-26 12:28:32

Hola Emanuel,

En cuanto a tu segundo comentario, el comportamiento, que describo y que te interesa, es para 'getline()'.

El código fuente que usas es más bien C y no C++. En primer lugar, tienes que escribir <stdio.h> (sin las comillas). La definición de 'main()' debe retornar 'int' y se debe escribir explícitamente (compiladores antiguos y obsoletos permiten el 'int' implícito, pero ya no es estándar en C ni por supuesto en C++). La función 'getch()' no es estándar, pero sí es popular para compiladores de Borland (Turbo C, por ejemplo), por lo que deberías #incluir <conio.h>.

En cuanto al problema que estás teniendo, tendrías que usar 'fgets()' que se parece mucho a 'getline()' que mencioné previamente, PERO 'fgets()' te copia el carácter '\n' en la cadena. Por ejemplo,

char szNombreCompleto[256];

fgets( szNombreCompleto, 256, stdin );

Puedes mirar la referencia de esta función en nuestra página yendo a: http://c.conclase.net/librerias/?ansifun=fgets#inicio

La otra posibilidad es usando 'scanf()' para que acepte TODOS los caracteres hasta que dé con uno que no quieres guardar. Esto sería,

char szNombreCompleto[256];

scanf( "%[^\n]s", szNombreCompleto );

Puedes consultar la referencia del formato de 'scanf()' en nuestra página yendo a: http://c.conclase.net/librerias/?ansifun=formato#inicio

Por último, para hacer este tipo de consultas, usa nuestra lista de correo-e. Para más información, puedes dirigirte a: http://listas.conclase.net/

Espero que todo esto te sirva.

Steven

Emanuel esquivias morales
2012-02-26 20:32:06

oye steven muchisimas gracias!!! no sabes todo lo que me has ayudado !!! muchas gracias y esta es la mejor pagina que conosco para aprender sobre c++ felicidades !!! y gracias a ti por contestar mis dudas !! se nota que eres muy experto en esto gracias !!!!

Ernesto Mercado LImon
2012-03-02 01:55:53

hola steven muchas felicidades por la pagina me preguntaba si me podrias ayudar con este programa y decirme donde estoy mal!!! gracias de antemano!!

#include "stdio.h"

main()

{

int a;

printf("Proceso para calcular el Area y el Perimetro de diferentes figuras Geometricas \n\n\n");

printf("Triangulo 1 \n\n");

printf("Circulo 2 \n\n");

printf("Rectangulo 3 \n\n");

printf("Introduce el numero que decees para calcular el perimetro y el area de dicha figura \n\n\n");

scanf("%i",&a);

switch (a){

float b,h,l1,l2,l3,r,d,base,altura,r1,r2,r3,r4;

case 1:

printf("Introdusca la base del triangulo: \n\n");

scanf("%f",&b);

printf("Introduce la Altura: \n\n");

scanf("%f",&h);

printf("Esta es el area del Triangulo: %f",(b*h)/2 \n\n\n );

printf("Ahora vamos a calcular el perimetro: \n\n\n");

printf("Introdusca la medida del primer lado: \n\n");

scanf("%f",&l1);

printf("Introdusca la medida del segundo lado: \n\n");

scanf("%f",&l2);

printf("Introdusca el tercer lado: \n\n");

scanf("%f",&l3);

printf("Este es el perimetro del Triangulo: %f", l1+l2+l3);

break;

case 2:

printf("Introdusca el radio del circulo: \n\n\n");

scanf("%f",&r);

printf("El area es: %f", r*3.1416 );

printf("Ahora vamos a calcular el perimetro \n\n\n");

printf("Introdusca el diametro del circulo: \n\n");

scanf("%f",&d);

printf("El perimetro es: %f", d*3.1416 );

break;

case 3:

printf("Introdusca la base del rectangulo: \n\n");

scanf("%f",&base);

printf("Introdusca la altura del rectangulo: \n\n");

scanf("%f",&altura);

printf("El area del rectangulo es: %f",base*altura \n\n);

printf("Ahora vamos a calcular el perimetro: \n\n");

printf("Introdusca el primer lado: \n");

scanf("%f",&r1);

printf("Introdusca el segundo lado: \n");

scanf("%f",&r2);

printf("Introdusca el tercer lado: \n");

scanf("%f",&r3);

printf("Introdusca el cuarto lado: \n");

scanf("%f",&r4);

printf("El perimetro es: %f", r1+r2+r3+r4 );

break;

default:

printf("Coloque un numero de los que aparecen arriba!!!");

}

getch();

}

grethel
2012-03-03 21:27:50

disculpen me pueden explicar como hacer esta tarea es q reaqlmente no se nadaaa d nada.La tarea consiste en que investiguen cuales son los comandos que tiene C y C++, que son equivalentes a los que ya usamos en PS Int:

a. Asignación de valor a una variable

b. Definición del tipo de una variable

c. Definición de un arreglo

d. Instrucción SI condicion Entonces

e. Instrucciones de repetición (REPETIR, MIENTRAS, PARA)

f. Leer

g. Escribir

Gracias

Eloisa
2012-05-27 06:38:43

Hola, me podrían ayudar tengo un problema.

Requiero usar tipos de datos enteros sin signo de 15 dígitos, encontré que la forma de declararlos es

unsigned long long int x;
El problema es que utilizo una variable de este tipo dentro de una estructura, en el momento de capturar su valor con
scanf("%lf", &estructura.variable)
No se que especificador de formato utilizar, he probado con %lf y %ld, el compilador de Dev C++ no envía ningún error, pero cuando lo quiero mostrar en consola (tambien utilice %lf %ld y %i) ninguno alcanza para este tipo de dato, solo me aparece un numero largo como -12873.... como negativo y muy diferente al capturado.

Steven R. Davidson
2012-05-27 07:53:59

Hola Eloisa,

El especificador es el mismo para 'int' pero con el prefijo "L" para indicar 'long long'. En tu caso, esto sería,

scanf( "%Lu", &estructura.variable );

para 'unsigned long long int'.

Espero que esto te ayude.

Steven

ernesto
2012-07-09 07:38:03

hola amigos la verdad les quisiera pedir un favor es k nose como utilizar la funcion swith para sacar unos porcentajes por decir quiero elaborar un programa donde vendere relojes o cualkier producto ejemplo:

quiero vender un relog en 120 pesos cada uno pero quiero elaborar un menu

que diga

1 lunes

2 martes

3 miercoles

4 jueves

5 viernes

6 sabado

7 domingo

8 salir

con estas opciones quiero elaborar el programa

si el usuario teclea la opcion 1, quiero que proporcione el numero de relojes vendidos si los relojes facilitados e 2 o mayor a dos se hara un descuento de 12% pero si es 1 se cobrara el precio normal del reloj y asi en las demas opciones el problema es que nose utilizar la funcion swith si alguien me podria hechar la mano facilitando el codigo se los agradeceria mucho de antemano gracias saludos =)

ernesto
2012-07-09 07:46:32

por cierto los % pueden variar solo quiero saber como quedaria el codigo son la duncion switch

los relojes son los k se venderan esos dias en las opciones

creo que esta pagina resolvera mis dudas..... bueno por lo visto esta es una magnifica pagina para aprender programacion espero pronto una respuesta de antemano gracias pro todo =)

Julián Naranjo Ojeda
2012-09-15 10:48:56

Felicidades.

Ahora sí que aprenderé C++

Gracias.

athis
2012-10-27 05:55:04

hola, yo apenas estoy aprendiendo a utilizar c++, nos encargaron de tarea hacer un programa donde chequemos si el numero es par o impar:

#include <stdio.h>

#include <conio.h>

float num1;

int residuo;

main ()

{

printf ("ingrese un numero: ");

scanf ("%f", &num1);

residuo = num1/2;

if(((residuo) == 0 ) && num1!=0){

printf("su divisible del numero que ingresaste es un numero entero");

}

else if (num1==0){

printf("el numero que ingresaste es un cero");

}

else {

printf("el numero divisible que ingresaste es un numero flotante");

}

getch();

}

pero no me sale, sesupone que es con float o algo así pero tenemos que ver si es entero o flotante pero no me sale, ayuda.

Halther Payano
2013-01-07 01:44:02

Qué tal amigos, descargue el programa que recomendaban en la página(osea esta página) y cuando le di a ejecutar empezo a installarse, pero después se cancelo cannot create the target folder Installation cannot continue.

Halther Payano
2013-01-07 02:25:22

Qué tal ya pude solucionar el problema, pero ahora después que instale el programa, me sale una consolita que dice bienvenido a la consola de scrip. Para qué sirve esa consola?

Alex_H
2013-01-27 06:11:08

Para athis:

A mi me funciona de esta manera:

residuo=num1%2;

if(residuo == 0 && (num1!=0))

{

printf ("mensaje");

}

Espero te sirva!!

sonia oliver
2013-02-05 19:51:32

como le asigno a una variable tipo char el contenido de un arreglo del mismo tipo.

ej.

char a[10][10] //vector

char temp [10][1] //vector

.....

temp[10][1]=a[j][10]

solo me toma un caracter. ya lo intente con strcpy pero me marca error de tipos.

gracias.

Gustavo F. Paredes
2013-02-27 01:18:25

Hola.

Felicitaciones por la excelente web que has creado. Realmente me sorprendo de mi mismo al no haberla leído con mas interes antes (la conozco desde hace años). Seguro nunca tuve el tiempo necesario. Pero ahora si.

Una duda o comentario: Para mi forma de haber entendido cuando estudie esto hace mas de dos decadas, el hecho de que en una variable con signo ingrese un numero menos que cuando son sin signo es porque el numero cero se considera positivo (por convención matemática) y en un octeto queda armado un 0 negativo (10000000). Pero entonces los numeros posibles van desde el -127 al +128 (al reves de lo que dice el Apéndice A.

Espero no te enojes por el comentario.

Saludos desde Argentina.

Gustavo F. Paredes
2013-02-27 01:25:04

Perdon, pero pongo un ejemplo para que se entienda porque no me expresé bien (creo).

Si tuviesemos la longitud de palabra en 3 bits, con signo tendríamos los siguientes valores posibles:

Nros positivos (0 en el bit mas significativo)

000

001

010

011

Nros negativos (1 en el bit mas significativo)

100

101

110

111

Claramente se ve que el nro cero está dos veces (una como positivo y la otra como negativo) y por ende hay que anular una de las dos porque no puede ser negativo y positivo. Se anula 100 y por ende los nros negativos son 3 y los positivos 4. En resumen, los nros posibles van desde -3 a +4.

Espero haber sido claro.

Saludos.

Steven R. Davidson
2013-02-27 03:17:03

Hola Gustavo,

No sería práctico descartar una secuencia binaria, sólo porque no nos sirva. El problema es que no es simplemente indicar que el bit más significativo sea el de signo. Lo que realmente se hace es aplicar el complemento a dos para representar enteros negativos.

Usando tus ejemplos, los enteros positivos son:

         |      Binario
 Decimal | (complemento a dos)
---------+---------------------
    0    |        000
    1    |        001
    2    |        010
    3    |        011

Los enteros negativos son:

         |      Binario
 Decimal | (complemento a dos)
---------+---------------------
   -1    |        111
   -2    |        110
   -3    |        101
   -4    |        100

Se calcula el complemento a dos calculando el complemento a uno y luego se suma 1 al resultado. El complemento a uno es simplemente el complemento binario que se basa en la negación; o sea, cambiamos cada cero por un uno y cada uno por un cero.

Por ejemplo, si queremos hallar la representación de -3, empezamos por la representación de +3 que es,

3 = 011

Ahora calculamos su complemento:

011 => 100

Y ahora sumamos 1 a este resultado:

100 + 1 = 101

Por lo tanto, -3 se representa como 101.

El complemento a uno sirve para representar números negativos con el bit más significativo activado para el signo. La idea tras el complemento a dos es que además de lo anterior podemos convertir restas en sumas, ahorrándonos recursos en el diseño de circuitos (electrónicos).

Podemos ver que,

3 - 3 = 3 + (-3) = 0

Usando el complemento a dos tenemos en binario:

  011
+ 101
-----
 1000

Como nuestras secuencias binarias son sólo de tres bits, el 1 del comienzo se pierde y nos quedamos con 000 que representa 0 (cero), que obviamente es la respuesta correcta.

Otro ejemplo,

2 - 4 = 2 + (-4) = -2

En binario y complemento a dos, sería,

  010
+ 100
-----
  110

que es justamente la representación de -2.

Espero que todo esto aclare la duda.

Steven

Stevens Guedexz
2013-03-08 00:57:10

Hola amigos necesito hacer un programa en lenguaje c que me permita ingresar por teclado el iten, el codigo del producto y el monto, y poder listar 10 productos al menos. no se que hacer, ya que el profesor que nos las esta dando es super pirata y no los da todo por encima y no explica bien.

Les agradezco que me ayuden urgente, lo necesito para dentro de 2 dias contandolo desde hoy

Stevens Guedexz
2013-03-08 01:16:22

se me olvidaba, utilizando el programa dev-C++ que es con el cual usamos en clase.

gracias y espero de su ayuda.

Israel
2014-06-05 00:50:04

Gracias por hacer esta página para nosotros los neófitos en C++.

Soy programador dn VB6 y VB .Net, C++ siempre me ha causado miedo y respeto.

Saludos y agradecimientos desde México.

CARLOS
2014-07-05 19:15:45

Tengo este problema que debo rsolver a ver si pueden ayudar, para entender mejor, gracias.

Observen el código que se encuentra abajo

Datos: 10,20,30,40,50,60,70,80,90,100

que realice lo siguiente:

o Calcular la media de un conjunto de datos.

o Calcular la varianza de un conjunto de datos.

o Obtener el máximo valor de un conjunto de datos.

o Obtener el mínimo valor de un conjunto de datos.

Después, pongan el código que han completado, basándose en el que aparece abajo.

o

o

#include <stdlib.h>

#include <math.h>

int main(int argc, char *argv[])

{

//Obtener media, varianza, máximo y mínimo de un conjunto de datos.

int conjunto[] = {10,20,30,40,50,60,70,80,90,100};

int i=0;

float media=0, max,min,varianza=0,aux;

for (i=0; i< 10; i++)

{

}

media = media/10.0;

printf ("La media del conjunto de datos es: %f \n", media);

aux = conjunto[0];

for (i=0; i < 10; i++)

{

if(conjunto[i] > aux)

}

printf ("El valor máximo es \n");

aux = conjunto[0];

for (i=0; i < 10; i++)

{

if(conjunto[i] < aux)

}

printf ("El valor mínimo es \n");

for (i=0; i<10; i++)

{

varianza += pow((),2);

}

printf("La varianza del conjunto de datos es: \n");

system("PAUSE");

return 0;

}

Steven R. Davidson
2014-07-06 17:16:52

Hola Carlos,

Para calcular la media aritmética, necesitas recorrer cada elemento del array, 'conjunto', y sumar cada uno; para esto, usa una variable para acumular la suma, que según el código fuente reusas la variable, 'varianza'. Al final, divide la suma total por la cantidad total, que en este caso es 10.

Para calcular la varianza, no es necesario usar 'pow()', ya que solamente es elevar el resultado al cuadrado; simplemente, multiplica la base por sí misma. Necesitas restar cada valor en 'conjunto' con la media aritmética, que previamente calculaste. Acumula la suma de cada resta cuadrada y luego divide la suma total por la cantidad total de muestras en el array, 'conjunto'.

Espero que esto te oriente.

Steven

Francisco
2014-08-12 20:29:56

¡Madre mía!, por fin empiezo a entender algo de C, ÇC++

Gracias, gracias, gracias y GRACIAS.