Отчет по лабораторной работе №8 «Массивы указателей»



Дата09.03.2023
өлшемі0,54 Mb.
#171662
түріОтчет
Байланысты:
Отчет 5 бригады 4


МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФГБОУ ВО «НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

Факультет автоматики и вычислительной техники


Кафедра АСУ


ОТЧЕТ
по лабораторной работе №8
«Массивы указателей»
Дисциплина «Информатика», 1 семестр

Преподаватель: Лауферман О.В.


Ганелина Н.Д
Группа: АВТ - 213
Бригада №5: Гордиенко Д.А.
Савочка Д.В.
Хусаинов А.М.

г. Новосибирск


2022 год
Вариант 5

Задача №1

  • Считая, что год не високосный и его 1 января приходится на день недели wd1, определить wd – день недели, на который приходится день с датой.

Задача №2

  • В строке выбрать слова, которые начинаются и заканчиваются одним и тем же символом.





Тестовые данные
Задача №1

теста

Ввод

Вывод

1

09.15

Ваш день недели: Четверг

2

02.30

В феврале не может быть больше 28 дней!

3

1



Неверный ввод!

4

Еав укц

Неверный ввод!

5

15.09

Неверный ввод!

6

03.06

Ваш день недели: Воскресенье


Задача №2

теста

Ввод

Вывод

1

Шла Саша по шоссе и сосала сушку, а еще огого как много мороженного

Огого как

2

Fuf luf porpak FuF poP SOLAris

Fuf FuF poP SOLAris

3

Классик кубиК вообще крутой, what are u do Brab?

Классик кубиК u Brab



Блок-схемы №1













Задача№2









Код
Задача№1 (Компилировать как С)

#include
#include
#include
#include
#include
#include

void day_of_day(int day, int month);


int mn_in_d(int* tr_fl, int* day, int* month);
int check_day(char* string, int* month, int* day);
int check_month(char* string, int*month);
int Check(char* string, int size);
char* Enter(char* trinsg, int* size);
void body();
void tabl(int n);

int main()


{
setlocale(LC_ALL, "Rus");

body();

return 0;
}
void body()
{
printf("Данная программа показывает какой день недели (пн-вс) был в данный день\n");

printf("Введите дату в формате мм.дд\n");


int size_1 = 0;


char* m_and_d = (char*)malloc(size_1 * sizeof(char));


m_and_d = Enter(m_and_d, &size_1);


free(m_and_d);


return;
}


char* Enter(char* trinsg, int* size)
{
char simbol_1;

int check_bl = 0;


do
{


while ((simbol_1 = getchar()) != 10)


{
trinsg = realloc(trinsg, (*size + 1) * sizeof(char));

*size += 1;


trinsg[*size - 1] = simbol_1;


};

check_bl = Check(trinsg, *size);

if (check_bl != 1)


{

printf("\nНеверный ввод!\n");


free(trinsg);


*size = 0;


trinsg = malloc(*size * sizeof(char));


};

} while (check_bl != 1);

return trinsg;


}

int Check(char* string, int size)


{
int true_fact = 1;

int month = 0;


int day = 0;


if (size == 5)


{

for (int i = 0; i < size; i++)


{

if (string[2] != '.')


{
true_fact = 0;

break;

}

if ((i != 2) && (string[i] < 48 || string[i]>57))


{

true_fact = 0;


break;

}

}


if (true_fact == 1)
{

string[2] = ' ';//для корректной работы функции atoi


true_fact = check_month(string, &month);


if (true_fact == 1) true_fact = check_day(string, &month, &day);


if (true_fact == 1) day_of_day(day, month);


}

}


else true_fact = 0;

return true_fact;


}
int check_month(char* string, int *month)
{

if ((string[0] == 48) && (string[1] != 48))


{

*month = atoi(string);


return 1;


}


if (string[0] == 49)
{

if (string[1] <= 50)


{

*month = atoi(string);


return 1;


}


}
else return 0;
}
int check_day(char* string, int* month, int* day)
{
int tr_fl = 0;

string[0] = ' ';


string[1] = ' ';


if ((string[3] == 48) && (string[4] != 48))


*day = atoi(string);

if ((string[3] > 48) && string[3] < 52)


*day = atoi(string);

if (*day > 31) return 0;


else
{


tr_fl = mn_in_d(&tr_fl, day, month);


return tr_fl;


}


return 0;
}
int mn_in_d(int* tr_fl, int* day, int* month)
{

switch (*month)


{

case 2:

if ((*day) > 28)
{

printf("\nВ феврале не может быть больше 28 дней!\n");


return 0;


}


else return 1;

break;

case 4:

if ((*day) > 30)


{

printf("\nВ апреле не может быть больше 30 дней!\n");


return 0;


}


else return 1;

break;

case 6:

if ((*day) > 30)


{

printf("\nВ июне не может быть больше 30 дней!\n");


return 0;


}


else return 1;

break;

case 9:

if ((*day) > 30)


{

printf("\nВ сентябре не может быть больше 30 дней!\n");


return 0;


}


else return 1;

break;

case 11:

if ((*day) > 30)


{

printf("\nВ ноябре не может быть больше 30 дней!\n");


return 0;


}


else return 1;

break;

default:

return 1;


break;

}
}

void day_of_day(int day, int month)


{
int what_day = 0, ostatki = 0, dop_chislo, imp_tab = 0, superrio = 0, lock_per = 0;

switch (month)


{

case 1:
superrio = 0;


lock_per = 1;


break;

case 2:
superrio = 3;

lock_per = 1;


break;

case 3:
superrio = 3;

lock_per = 1;


break;

case 4:
superrio = 6;

lock_per = 1;


break;

case 5:
superrio = 8;

lock_per = 1;


break;

case 6:
superrio = 11;

lock_per = 2;


break;

case 7:
superrio = 13;

lock_per = 2;


break;

case 8:
superrio = 16;

lock_per = 3;


break;

case 9:
superrio = 19;

lock_per = 3;


break;

case 10:
superrio = 0;

lock_per = 1;


break;

case 11:
superrio = 3;

lock_per = 1;


break;

case 12:
superrio = 5;

lock_per = 1;


break;

};

if (day > 7)


{

what_day = day / 7;


ostatki = day % 7;


dop_chislo = day - what_day * 7 + superrio;


if (dop_chislo > 7) dop_chislo = dop_chislo - 7 * lock_per;


if (dop_chislo <= 0) dop_chislo += 7;


}


else
{

dop_chislo = day + superrio;


if (dop_chislo > 7) dop_chislo = dop_chislo - 7 * lock_per;


if (dop_chislo <= 0) dop_chislo += 7;


};
tabl(dop_chislo);


return;
}


void tabl(int n)


{
int i = n-1;

printf("Ваш день недели: ");


char* day[] = { "Суббота\n", "Воскресенье\n", "Понедельник\n", "Вторник\n", "Среда\n", "Четверг\n", "Пятница\n" };


printf("%s", day[i]);


return;
}






Задача№2 (Компилировать как С++)

#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#define N 100
#define L 17

int Letter(char ch)


{
if (((ch >= 'А') && (ch <= 'я')) || ((ch >= 'A') && (ch <= 'Z')) || ((ch >= 'a') && (ch <= 'z'))) return 1;
return 0;
}

int Words(char* String, char w[][L])


{
int i = 0, j, k = 0, key = 0, n = strlen(String);
for (j = 0; j <= n; j++)
{
int prov = -1;
if (Letter(String[j]))
{
w[k][i] = String[j];
i++;
key = 1;
}
else
if (key)
{
w[k][i] = '\0';
i = 0; k++;
key = 0;
}
}

return k;


}

char** Enter_Text()


{
char temp[N];
char** p = (char**) new char*;
int n = 0; // счетчик количества строк
while (1)
{
gets_s(temp);
if (temp[0] == '\0') break; // строка не введена
p[n] = (char*)malloc(strlen(temp) + 1); // выделили память
strcpy(p[n], temp);
n++;
p = (char**)realloc(p, sizeof(char*) * (n + 1));
}
p[n] = NULL;
return p;
}

void body()


{
char** text;
char words[N][L];
char words_2[N][L];
puts("Данная программа выводит слова начинающиеся и заканчивающиеся на одинаковую букву\nЕсли нажать Enter 1 раз будет ввод следующей строки\nДля окончания ввода нажмите Enter 2 раза\nВведите текст:");
text = Enter_Text();
printf("Слова начинающиеся и заканчивающиеся на одинаковую букву:\n");
for (int i = 0; text[i] != NULL; i++) {
int len = Words(text[i], words);

for (int k = 0; k < len; k++) {


strcpy(words_2[k], words[k]);
_strlwr(words_2[k]);
if ((words_2[k][0] != words_2[k][strlen(words[k]) - 1])) {
for (int j = k + 1; j < len; j++) {
strcpy(words[j - 1], words[j]);
}
len--; k--;
}
}
for (int k = 0; k < len; k++)
printf("%s ", words[k]);
printf("\n");
}
return;
}

int main()


{
setlocale(LC_ALL, "Rus");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

body();



return 0;
}


Достарыңызбен бөлісу:




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет