знаю что в бейсике ето call а в си , хз ..
хех, ты вот этой фразой напомнил одно аниме,
Golden Boy.
Там чел хотел получить работу программиста, и выучил бейсик. Какого же было его удивление, когда его попросили сделать что-либо на си!
Ну а по теме, функция вызывается элементарно. Через обращение к ней по её имени. Приведу здесь свою программу, где я уже использовал функции. Думаю, как наглядное пособие может и пригодится. Единственное, здесь я не использовал указатели. Впрочем, это уже совсем другая история...
/* Calendar Calculator by Alex A. Teplyakov (IASB-18)
© & ® 2006 ATS development
for Tallinn University of Technology */
/* AppLanguage: Estonian (eesti)
Comments: English */
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define TABLETOP "\xDA\xC4\xC4\xC2\xC4\xC4\xC2\xC4\xC4\xC2\xC4\xC4\xC2\xC4\xC4\xC2\xC4\xC4\xC2\xC4\xC4\xBF"
#define TABLEMID "\xC3\xC4\xC4\xC5\xC4\xC4\xC5\xC4\xC4\xC5\xC4\xC4\xC5\xC4\xC4\xC5\xC4\xC4\xC5\xC4\xC4\xB4"
#define TABLEBTM "\xC0\xC4\xC4\xC1\xC4\xC4\xC1\xC4\xC4\xC1\xC4\xC4\xC1\xC4\xC4\xC1\xC4\xC4\xC1\xC4\xC4\xD9"
#define TABLEDAY "\xB3 E\xB3 T\xB3 K\xB3 N\xB3 R\xB3 L\xB3 P\xB3"
/* Leap Year Control*/
int isLeap(int year)
{
int leap = 0;
if ( ((year % 4) == 0) && (((year % 100)!=0) || ((year % 400)==0)))
{
leap = 1;
}
return leap;
}
/* Days in month */
int mDays(int month, int year)
{
int days = 31;
switch (month)
{
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
days = 28+isLeap(year);
break;
default:
days = 31;
break;
}
return days;
}
/* Calendar table builder 1.0 */
/* Required data:
- dayOffset; Assuming 1 = Monday, 2 = Tuesday, ..., 7 = Sunday,
meaning the first day of the month;
dayOffset = (2 - n), where n = {1, 2, ..., 7}.
- month; Assuming 1 = January, 2 = February, ..., 12 = December;
the month for which the calendar is built;
- year; the year for which the calendar is built;
*/
void buildCalendar(dayOffset, month, year)
{
printf("\n");
switch (month)
{
case 1:
printf(" Jaanuar %d\n", year);
break;
case 2:
printf(" Veebruar %d\n", year);
break;
case 3:
printf(" Marts %d\n", year);
break;
case 4:
printf(" Aprill %d\n", year);
break;
case 5:
printf(" Mai %d\n", year);
break;
case 6:
printf(" Juuni %d\n", year);
break;
case 7:
printf(" Juuli %d\n", year);
break;
case 8:
printf(" August %d\n", year);
break;
case 9:
printf(" September %d\n", year);
break;
case 10:
printf(" Oktoober %d\n", year);
break;
case 11:
printf(" November %d\n", year);
break;
case 12:
printf(" Detsember %d\n", year);
break;
}
printf(TABLETOP);
printf("\n");
printf(TABLEDAY);
printf("\n");
printf(TABLEMID);
printf("\n");
int n, m, daysThisMonth = mDays(month, year), k = dayOffset;
for (n = 0; n < 6; n++)
{
printf("\xB3");
for (m = 0; m < 7; m++)
{
if (k < 1 || k > daysThisMonth)
{
printf(" \xB3");
}
else if (k < 10)
{
printf(" %d\xB3", k);
}
else
{
printf("%d\xB3", k);
}
k++;
}
printf("\n");
if (k > daysThisMonth)
{
break;
}
printf(TABLEMID);
printf("\n");
}
printf(TABLEBTM);
printf("\n\n");
}
int getDayNum(char dayLetter)
{
char dayList[] = "ETKNRLP";
int n = 1, dayNum;
for (n = 1; n < 8; n++)
{
if (dayList[n-1] == dayLetter)
{
dayNum = n;
break;
}
}
return dayNum;
}
main()
{
/* Initial and final data declaration*/
int yt, yn, mt, mn, dt, dn, DaysPassed;
char curday[1];
/* Helpers */
int i, neg, d1, d2, m1, m2, y1, y2;
/* Welcome messages and initial data entry */
system("cls");
printf("Kalendri kalkulaator 1.0 Aleksei Tepljakov\n\n(c) & (r) 2006 ATS Development, Tallinna Tehnikaulikool\n\n");
printf("Endise kuupaeva sisestamine\n\nAasta: ");
scanf("%d", &yt);
do
{
printf("Kuu: ");
scanf("%d", &mt);
}
while (mt < 1 || mt > 12);
do
{
printf("Paev: ");
scanf("%d", &dt);
}
while (dt < 1 || dt > mDays(mt, yt));
printf("\nTanase kuupaeva sisestamine\n\nAasta: ");
scanf("%d", &yn);
do
{
printf("Kuu: ");
scanf("%d", &mn);
}
while (mn < 1 || mn > 12);
do
{
printf("Paev: ");
scanf("%d", &dn);
}
while (dt < 1 || dn > mDays(mn, yn));
do
{
printf("Nadalapaev: ");
scanf("%s", curday);
strupr(curday);
}
while ((curday[0] != 'E') && (curday[0] != 'T') && (curday[0] != 'K') && (curday[0] != 'N') && (curday[0] != 'R') && (curday[0] != 'L') && (curday[0] != 'P'));
/* Now we find out the number of this day */
int curdayNum = getDayNum(curday[0]);
/* Now we calculate the days between the two dates */
/* This part has been imported from Ksenija Grigorjeva's example */
if ((yt>yn) || ((yt == yn) && ((mt > mn) || (mt == mn) && (dt > dn))))
{
neg = 1;
y1 = yn;
m1 = mn;
d1 = dn;
y2 = yt;
m2 = mt;
d2 = dt;
}
else
{
neg = 0;
y1 = yt;
m1 = mt;
d1 = dt;
y2 = yn;
m2 = mn;
d2 = dn;
}
DaysPassed = d2 - d1;
if (y1 == y2)
{
if (m2 > m1)
{
for (i=m1; i<m2; i++)
{
DaysPassed += mDays(i, y1);
}
}
}
else
{
for (i=y1+1; i<y2; i++)
{
DaysPassed += 365 + isLeap(i);
}
for (i=m1; i<13; i++)
{
DaysPassed += mDays(i, y1);
}
for (i=1; i<m2; i++)
{
DaysPassed += mDays(i, y2);
}
}
if (neg)
{
DaysPassed = -DaysPassed;
}
/* Now we determine what day of week is this date */
int GetDay = DaysPassed % 7;
int OldDayNum;
if (GetDay < curdayNum)
{
OldDayNum = curdayNum - GetDay;
}
else
{
OldDayNum = curdayNum - GetDay + 7;
}
printf("\n\nStatistika:\n\nPaevi kuupaevade vahel: %d\n", DaysPassed);
/* Now we print out the day of the week of the previous date */
printf("%0.2d.%0.2d.%d oli ", dt, mt, yt);
switch (OldDayNum)
{
case 1:
printf("esmaspaev.");
break;
case 2:
printf("teisipaev.");
break;
case 3:
printf("kolmapaev.");
break;
case 4:
printf("neljapaev.");
break;
case 5:
printf("reede.");
break;
case 6:
printf("laupaev.");
break;
case 7:
printf("puhapaev.");
break;
}
printf("\n\nKalender:\n\n");
/* Now we build the calendar for that month, but first
we need to determine what day was the first date of that
month */
int wd = OldDayNum, dat = dt;
do
{
wd--;
if (wd == 0)
{
wd = 7;
}
dat--;
}
while (dat > 1);
int offset = 2 - wd;
buildCalendar(offset, mt, yt);
printf("\nOK");
int pause = getch();
printf("\n");
}
Тут всего 4 функции.
3 простые, isLeap, mDays и getDayNum, и одна сложная, buildCalendar.
Они малооптимизированы, но принцип должен стать понятен.
Сообщение изменено: Firelord (04 февраля 2007 - 01:57 )