|
Вопрос # 5 722/ вопрос решён / |
|
Здравствуйте,Уважаемые эксперты!Помогите пожалуйста с освоением языка си!
1)Нужно сделать так,чтобы при вводе не положительного значения для stone_num и crit_mass программа просила ввести заново,но она просит только один раз ввести заново при ошибочном вводе значения stone_num и вылетает в любом случае.
2)Для того,чтобы можно было вводить дробное значение crit_mass достаточно ли записать double crit_mass; и scanf("%lf",&crit_mass); в соответствующем месте кода?
3)как сделать массив из количества камней которое введёт пользователь (stone_num) применима ли для этого константа в обязательном порядке?Если да,то как реализовать это?
Заранее спасибо за внимание и помощь.
Приложение: Переключить в обычный режим- #include<stdio.h>
- int main()
- {
- int stone_num,crit_mass;
- printf("input num of stones\n");
- scanf("%d",&stone_num);
- if(stone_num<=0)
- {
- printf("Incorrect!Please input num. of stones again\n");
- }
- else
- {
- printf("input crit mass\n");
- }
- scanf("%d",&crit_mass);
- if(crit_mass<0)
- {
- printf("Incorrect!Please input crit. mass again\n");
- }
- else
- {
- printf("input weight of each stone");
- }
- getchar();
- return 0;
- }
 |
Вопрос задал: Эдик (статус: Посетитель)
Вопрос отправлен: 6 ноября 2011, 16:35
Состояние вопроса: решён, ответов: 2.
|
Ответ #1. Отвечает эксперт: Аксион
Здравствуйте, Эдик!
1) Смотрите код в приложении (Используйте конструкцию do - while)
2) Да
3) Используйте динамический массив
double *weight = new double [stone_num]; - создает массив из double'ов, нумерация: 0,...,stone_num -1
Обращение к i-ному элементу массива: weight[i]
Удачи.
Приложение: Переключить в обычный режим- #include <stdio.h>
- int main()
- {
- int stone_num=-1;
- double crit_mass=-1;
- do {
- printf("Input num of stones: ");
- scanf("%d",&stone_num);
- if(stone_num<=0)
- {printf("Incorrect!Please input num. of stones again\n");}
- } while (stone_num<=0);
-
- do {
- printf("Input crit mass: ");
- scanf("%lf",&crit_mass);
- if(crit_mass<0)
- {printf("Incorrect!Please input crit. mass again\n");}
- } while (crit_mass<0);
-
- double *weight = new double [stone_num];
- double input=-1;
-
- printf("Input weight of each stone\n");
- for (int i=0; i<stone_num; ++i) {
- do {
- printf("Input weight of %d stone: ",i+1);
- scanf("%lf",&input);
- if(input<=0)
- {printf("Incorrect!Please input weight again\n");}
- else {weight[i]=input;}
- } while (input<=0);
- }
-
- getchar();
- return 0;
- }
-
 |
Ответ отправил: Аксион (статус: 4-ый класс)
Время отправки: 6 ноября 2011, 18:48
Оценка за ответ: 5
|
Ответ #2. Отвечает эксперт: min@y™
Как-то так:
#include<stdio.h>
int main()
{
int stone_num,
crit_mass;
do
{
// это цикл с постусловием
printf("input num of stones\n");
scanf("%d", &stone_num);
if (stone_num <= 0)
printf("Incorrect! Please input num. of stones again\n");
else break;
} while (true); // ну или вместо "else break" - "while (stone_num <= 0)", но это медленнее
/* Остальное, офкос, по аналогии */
//printf("input crit mass\n");
//scanf("%d", &crit_mass);
//if(crit_mass<0) printf("Incorrect!Please input crit. mass again\n");
//else printf("input weight of each stone");
getchar();
return 0;
}
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 6 ноября 2011, 18:54
|
Мини-форум вопроса
Всего сообщений: 8; последнее сообщение — 16 ноября 2011, 21:31; участников в обсуждении: 3.
|
Аксион (статус: 4-ый класс), 6 ноября 2011, 18:52 [#1]:
И да, совсем забыл про удаление массива, перед return 0; Вписать строчку "delete[] weight;" - освобождаем выделенную под массив память
|
|
min@y™ (статус: Доктор наук), 6 ноября 2011, 18:55 [#2]:
2Админ: Андрюх, почему в Ц++ слово "do" не светится?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
8 ноября 2011, 21:31: Статус вопроса изменён на решённый (изменил автор вопроса — Эдик)
|
Эдик (статус: Посетитель), 9 ноября 2011, 19:23 [#3]:
через if с crit_mass не прокатывает там while нужен
|
9 ноября 2011, 19:24: Вопрос вновь открыт (изменение состояния произвёл автор вопроса — Эдик)
|
Эдик (статус: Посетитель), 9 ноября 2011, 20:05 [#4]:
Помогите пожалуйста,в коде отмечено 2 места,где в коментариях всё описано
# define NUM_stones 7 /// задаём количество камней константой
# include <stdio.h>
# include <math.h>
int main ()
{
int i;int crit_mass; /// i - переменная,crit_mass - критическая масса
double a[NUM_stones]; /// вводим массив из масс камней
printf("Input crit. mass\n");
scanf("%d", &crit_mass);
while(crit_mass<0)
{
printf("Incorrcet!Input crit. mass again\n");
scanf("%d", &crit_mass);
}
/// какой здесь должен быть цикл,чтобы он вывел на экран 7 раз???
/// "input vveight of 1 stone:" и вводим
/// "input wvieght of 2 stone:" и вводим
/// etc...при "# define NUM_stones 7"
for(int t=0;i<NUM_stones;i++)
{
printf("input weight %i stone");
scanf("%lf",&a[i]);
}
/// я думаю что что-то подобное,но это лишь портит ввод критической массы
/// (отрицательные блокируются сколько угодно,но при вводе нуля или
/// положительного числа,можно ввести второе любое число
/// консоль выдаёт 0.000000 и всё...
scanf("%lf", &a[NUM_stones]);
for(i=NUM_stones;i>=1;i--) /// сортирует массив по возврастанию
{
if(a[i-1]>a[i])
{
a[i-1]=a[i];
}
else break;
}
printf("%lf",&a[i]); /// эта строка выведет на экран 7 раз???
/// wweight of 1 stone: ...
/// vveight of 2 stone: ...
/// etc...при "# define NUM_stones 7"
getchar();
getchar();
return 0;
}
|
|
Аксион (статус: 4-ый класс), 10 ноября 2011, 20:17 [#5]:
Не особо понял, что требовалось, глянь код, может угадал я:
# define NUM_stones 7
# include <stdio.h>
# include <math.h>
void BubleSort(double* Matrix, int n)
{
for(int j=0; j<n; ++j){
for(int i=0; i<n-1-j; ++i){
if(Matrix[i]>Matrix[i+1]){
double temp=Matrix[i];
Matrix[i]=Matrix[i+1];
Matrix[i+1]=temp;
}
}
}
}
int main ()
{
int i,crit_mass;
double a[NUM_stones];
printf("Input crit. mass: ");
scanf("%d", &crit_mass);
while(crit_mass<0)
{
printf("Incorrect!Input crit. mass again: ");
scanf("%d", &crit_mass);
}
for (int i=0; i<NUM_stones; ++i) {
do {
printf("Input weight of %d stone: ",i+1);
scanf("%lf",&a[i]);
if(a[i]<=0)
{printf("Incorrect!Please input weight again\n");}
} while (a[i]<=0);
}
BubleSort(a,NUM_stones);
for(i=0;i<NUM_stones;i++){
printf("Weight of %d stone: %lf\n",i+1,a[i]);}
getchar();
getchar();
return 0;
}
|
|
Эдик (статус: Посетитель), 16 ноября 2011, 20:32 [#6]:
Спасибо Аксион - я переделал на свой лад.
|
|
Эдик (статус: Посетитель), 16 ноября 2011, 21:12 [#7]:
хнык!При объявлении BubleSort в мейне invalid conversation from int to double
|
|
Эдик (статус: Посетитель), 16 ноября 2011, 21:31 [#8]:
нет я всё таки переделал на свой лад проблемы уже другие)
|
16 ноября 2011, 22:25: Статус вопроса изменён на решённый (изменил автор вопроса — Эдик)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|