PDA

Просмотр полной версии : помогите новичку :)



shpi0
02.03.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: так за первый семестр и не смог понять... :oops:

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.
05.03.2005, 12:27
Ответ на вопрос номер1: в scanf передается ссылка на переменную в которую должно заноситься значение, т.е. scanf("%d",&k);
Ответ на вопрос номер 8: перед строчкой return 0; поместить следующую строку getch(); В начале не забыть подключить файл conio.h #include<conio.h>;

Laptev M.
05.03.2005, 12:39
Ответ на вопрос номер 3: в Си есть такие функции itoa и atoi из библиотеки <math.h>. Посмотри help по ним.
Вопрос 4: анализировать код введённого символа, считывая по символьно иформацию Наверное, что-то типа getchar() так работает хотя могу ошибаться. Опять же рекомендую посмотреть help по данной функции :!:

BAHTY3
06.10.2005, 01:26
[quote="shpi0"]Вот. Вопросы есть по си у меня... 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
06.10.2005, 13:48
А по вопросу 2: переводим в целое дату 1 января. Прибавляем к нему количество дней. Полученно переводим в дату и смотрим какой месяц. Работает правильно, в отличии от написанного, который 3 года из четырех (75%) ошибается.