помогите новичку :)

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, dr.Jekill, MOTOCoder, Medved

Ответить
shpi0
Сообщения: 53
Зарегистрирован: 29 сен 2004, 16:14
Откуда: оттуда
Контактная информация:

02 мар 2005, 18:40

Вот. Вопросы есть по си у меня... 8)

1 вопрос. Что неправильно в этой программе:

Код: Выделить всё

/* Laboratory work 2. Variant 7.
 Student Vladimir Yarovoy. Group P-44 */

#include <stdio.h>

main() {
int l, k, d, m, t;
printf("Enter k: "); scanf("%d",k);
if ( k<1 || k>366 ) {
printf("Error! Only 366 days in this year...\n");
} else {
l=1;               //January   31
if (k>=32) {l++;}  //February  29
if (k>=61) {l++;}  //March     31
if (k>=91) {l++;}  //April     30
if (k>=122) {l++;} //May       31
if (k>=152) {l++;} //June      30
if (k>=183) {l++;} //July      31
if (k>=214) {l++;} //August    31
if (k>=244) {l++;} //September 30
if (k>=275) {l++;} //October   31
if (k>=306) {l++;} //November  30
if (k>=336) {l++;} //December  31
switch(l) {
case 1: printf(" of January"); break;
case 2: printf(" of February"); break;
case 3: printf(" of March"); break;
case 4: printf(" of April"); break;
case 5: printf(" of May"); break;
case 6: printf(" of Juny"); break;
case 7: printf(" of July"); break;
case 8: printf(" of August"); break;
case 9: printf(" of September"); break;
case 10: printf(" of October"); break;
case 11: printf(" of November"); break;
case 12: printf(" of December"); break;
} //switch
} //else
return 0;
} //main
Она должна по-идее по номеру дня в году выдавать месяц. Но что-то не фурычит... :(

2 вопрос. Мне препод говорит, что для определения месяца в году по номеру дня можно не использовать код, как я написал -

Код: Выделить всё

l=1;               //January   31
if (k>=32) {l++;}  //February  29
if (k>=61) {l++;}  //March     31
if (k>=91) {l++;}  //April     30
if (k>=122) {l++;} //May       31
if (k>=152) {l++;} //June      30
if (k>=183) {l++;} //July      31
if (k>=214) {l++;} //August    31
if (k>=244) {l++;} //September 30
if (k>=275) {l++;} //October   31
if (k>=306) {l++;} //November  30
if (k>=336) {l++;} //December  31
Как же это еще можно сделать? Что-то я не догоняю...

3 вопрос. Как в си преобразовывать типы? int -> str, str -> int Если это возможно...

4 вопрос. Например мне надо в массив занести символы латинского алфавита. Как сделать чтобы при попытке ввода чего-то кроме буквы (символ какой-нить или цифра), выдавалась ошибка?

5 вопрос. Что такое итерационный цикл? :lol: так за первый семестр и не смог понять... :o ops:

6 вопрос. Что значит return 0; ? :lol: (в моей программе сверху есть в конце)

7 вопрос. Почему если я уберу этот return 0; , а вместо main () сделаю void main() , в моей программе ничего не меняется? И что такое void это? Почему если void вставить в скобочки к main(), тоже ничего не меняется? Почему, если я уберу return 0; и void тоже, опять ничего не меняется????? :lol: :lol:

8 вопрос. Как сделать чтоб в конце программа не выключалась, а ждала пока я нажму клавишу какую-нить?

9 вопрос. Есть ли в си аналог двух точек (как в паскале). например для switch() чтоб не для каждого значения сделать, а например для значений от 10 до 100. в паскале я бы написал 10..100, в си как так сделать?
Даже самое длинное путешествие начинается с первого шага.
Laptev M.
Сообщения: 2
Зарегистрирован: 04 мар 2005, 15:53

05 мар 2005, 12:27

Ответ на вопрос номер1: в scanf передается ссылка на переменную в которую должно заноситься значение, т.е. scanf("%d",&k);
Ответ на вопрос номер 8: перед строчкой return 0; поместить следующую строку getch(); В начале не забыть подключить файл conio.h #include<conio.h>;
Laptev M.
Сообщения: 2
Зарегистрирован: 04 мар 2005, 15:53

05 мар 2005, 12:39

Ответ на вопрос номер 3: в Си есть такие функции itoa и atoi из библиотеки <math.h>. Посмотри help по ним.
Вопрос 4: анализировать код введённого символа, считывая по символьно иформацию Наверное, что-то типа getchar() так работает хотя могу ошибаться. Опять же рекомендую посмотреть help по данной функции :!:
BAHTY3
Сообщения: 104
Зарегистрирован: 30 авг 2005, 02:53
Откуда: Санкт-Петербург
Контактная информация:

06 окт 2005, 01:26

[quote="&quot"]Вот. Вопросы есть по си у меня... 8)

4 вопрос. Например мне надо в массив занести символы латинского алфавита. Как сделать чтобы при попытке ввода чего-то кроме буквы (символ какой-нить или цифра), выдавалась ошибка?

6 вопрос. Что значит return 0; ? :lol: (в моей программе сверху есть в конце)

7 вопрос. Почему если я уберу этот return 0; , а вместо main () сделаю void main() , в моей программе ничего не меняется? И что такое void это? Почему если void вставить в скобочки к main(), тоже ничего не меняется? Почему, если я уберу return 0; и void тоже, опять ничего не меняется????? :lol: :lol:

8 вопрос. Как сделать чтоб в конце программа не выключалась, а ждала пока я нажму клавишу какую-нить?




по 4: просто делаешь цикл if на проверку латинских символов.... else EROR (все енто в WHILE (b!=EROR)(b-койнить переменная))


по 6: твоя (если енто так(а оно не так)) функция main (без void) должна возвращать какоето значение (просто так принято говорить что 0 если тебе больше ни чего не нуна(могешь дописать типа не "main(){" а "void main() {" а "return 0;" убрать))


по 7: функции и их св-ва нуна было выучить, void-исключение из них ента функция не должна возвращать не каких (она так и была задуманна) значений вот так то!!! а вообще коректно писать так: "void main(void)" функция не возращающая значения (главная: "main") обращается сама к себе....


по 8: ну енто вообше нелепо (включи воображение) просто говоришь что типа
printf ("Нажмите любую клавишу");
getch();
после чего он сам попросит опять тоже самое....

Ж)))) чем могу тем помогу.... :P :shock: 8) :o :lol: :wink: :arrow:
Жизнь ― это то, что с нами происходит, пока мы строим планы.© Джон Леннон.
UUU
Сообщения: 309
Зарегистрирован: 17 фев 2004, 09:27
Откуда: Иваново
Контактная информация:

06 окт 2005, 13:48

А по вопросу 2: переводим в целое дату 1 января. Прибавляем к нему количество дней. Полученно переводим в дату и смотрим какой месяц. Работает правильно, в отличии от написанного, который 3 года из четырех (75%) ошибается.
Ответить