Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Топ:
Техника безопасности при работе на пароконвектомате: К обслуживанию пароконвектомата допускаются лица, прошедшие технический минимум по эксплуатации оборудования...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Определение места расположения распределительного центра: Фирма реализует продукцию на рынках сбыта и имеет постоянных поставщиков в разных регионах. Увеличение объема продаж...
Интересное:
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Средства для ингаляционного наркоза: Наркоз наступает в результате вдыхания (ингаляции) средств, которое осуществляют или с помощью маски...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
// siz.cpp
int siz(char*p) {
int i, kol=0;
for (i=0; p[i]!=0; i++) { kol++; }
return kol;
}
// siz.h
#ifndef SIZ_H
#define SIZ_H
int siz(char*p);
#endif
// main.cpp
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
#include "siz.h"
int main (void) {
char str[80];
int res;
cout << "\nВведите строку" << endl;
cin.getline(str,80);
res = siz(str);
cout << "\nРазмер строки = " << res << endl;
return 0;
}
Написать программу с функцией, в которой на базе исходной строки будет сформирована строка-результат, путем переноса из исходной строки всех символов кроме пробела. _Память под обе строки выделить в main._
(Первая строка является исходным данным, вторая строка - результат)
// boyan.cpp
void boyan(char * p1, char * p2) {
int i, j=0;
for (i=0; p1[i]!=0; i++) {
if (p1[i]!= ‘ ‘) {
p2[j] = p1[i];
j++;
}
p2[j] = 0;
return;
}
// boyan.h
#ifndef BOYAN_H
#define BOYAN_H
void boyan(char * p1, char * p2);
#endif
// main.cpp
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
#include "boyan.h"
int main (void) {
char str1[80], str2[80];
cout << "\nВведите строку" << endl;
cin.getline(str1,80);
boyan(str1, str2);
cout << "\nПолучилась строка" << endl << str2 << endl;
return 0;
}
Переписать программу следующим образом:
Память под строку-результат функции пользователя выделяем только динамически, заполняем ее данными и передаем строку-результат вызывающей функции (через return передаем адрес строки-результата, при этом тип функции будет char *)
Выделение памяти под строку-результат внутри функции пользователя
// boyan.cpp
char * boyan(char * p1) {
char *p2=new char[256];
int i,j=0;
for (i=0; p1[i]!=0; i++) {
if (p1[i]!= ‘ ‘) {
p2[j] = p1[i];
j++;
}
p2[j] = 0;
return p2;
}
// boyan.h
#ifndef BOYAN_H
#define BOYAN_H
char * boyan(char * p1);
#endif
// main.cpp
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
#include "boyan.h"
int main (void) {
char str1[80], * str2;
cout << "\nВведите строку" << endl;
cin.getline(str1,80);
str2 = boyan(str1);
cout << "\nПолучилась строка" << endl << str2 << endl;
delete []str2;
return 0;
}
Функции и одномерные числовые массивы
Любой одномерный массив определяется адресом начала массива и количеством элементов в массиве, следовательно, для передачи массива в функцию необходимо написать два параметра.
int *p – для передачи адреса.
int n – для передачи количества элементов массива.
Поскольку каждый элемент массива доступен нам по адресу, то исходный массив и массив-результат предаются одинаково.
Внутри функции может быть вычислен адрес любого элемента массива, следовательно, мы можем извлечь любой элемент массива (массив как исходное данное) или изменить любой элемент массива (массив как результат работы функции (причем память под этот массив выделяется вызывающей функцией))
При формировании массива-результата, память может выделяться внутри вызывающей функции в том же количестве, что и исходный массив. Внутри функции он заполняется данными и его размер может уменьшиться, поэтому вновь подсчитанный размер массива результата передается через оператор return, при этом тип функции - int.
Память под массив результат может быть выделена и внутри функции пользователя, но только -динамически. Его размер может быть предварительно подсчитан или устанавливается приблизительно. В процессе заполнения размер массива определяется. Вызывающая функция ничего не знает об этом массиве, поэтому его надо передать как результат, то есть: через оператор return передать адрес начала массива, при этом тип функции будет указатель на тип массива, например int *. Количество элементов в массиве передаем как второй результат, через параметр-ссылку (int & n). Не забыть освободить динамическую память (в main), как только массив нам станет не нужным.
Для написания оператора вызова функции необходимо уметь определить адрес начала массива:
---------------------------------------------------------
int mas[5]; | int * p = new int[5];
mas - адрес начала массива | p - адрес начала массива
Задача 1
Демонстрирует работу с массивом как с исходным данным
Даны два массива, сравнить их на равенство.
1. Функция заполнения массива случайными числами
2. Ф-я вывода массива на экран
3. Ф-я сравнения массива на равенство
Анализ характеристик функций
1/
1. InMasRnd
2. Исходные данные:
а) массив
int *p;
int n;
б) int min; - левая граница интервала
int max; - правая граница интервала
3. Результат: нет => void
2/
1. OutMas
2. Исходные данные
а) массив
int *p;
int n;
3. Результат: нет => void
3/
1. CmpMas
2. Исходные данные
а) 2 массива - int *p1;
int *p2;
int n;
3. Результат: да/нет => bool
файл: mas1.h
----------------
#ifndef MAS1_H
#define MAS1_H
void InMasRnd(int *p, int n, int min, int max);
void OutMas(int *p, int n);
bool CmpMas(int *p1, int *p2, int n);
#endif
----------------
файл: mas1.cpp
----------------
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
#include <stdlib.h>
#include <time.h>
void InMasRnd(int *p, int n, int min, int max)
{
int i;
for (i=0; i<n; i++)
p[i]=rand()%(max-min+1)+min;
return;
}
void OutMas(int *p, int n)
{
int i;
cout << endl;
for (i=0; i<n; i++)
cout << p[i] << " | ";
return;
}
------------------------------------
первый вариант
------------------------------------
bool CmpMas(int *p1, int *p2, int n)
{
int i;
int kol=0;
for (i=0; i<n; i++) {
if (p1[i] == p2[i])
kol++;
}
if (kol!= n)
return false;
else
return true;
}
------------------------------------
второй вариант
------------------------------------
bool CmpMas(int *p1, int *p2, int n)
{
int i;
for (i=0; i<n; i++) {
if (p1[i]!= p2[i])
return false;
}
return true;
}
----------------
файл: main.cpp
----------------
#include<iostream> //подключение системных средств для
using namespace std; //возможности использовать потоки ввода-вывода
#include <stdlib.h>
#include <time.h>
#include "mas1.h"
int main(void)
{
const int N=5;
int mas1[N], mas2[N];
bool res;
srand((unsigned)time(NULL));
InMasRnd(mas1,N,-5,10);
InMasRnd(mas2,N,-5,10);
cout << "\nПервый массив:";
OutMas(mas1,N);
cout << "\nВторой массив:";
OutMas(mas2,N);
res = CmpMas(mas1,mas2,N);
if (res == true)
cout << "\nМассивы равны";
else
cout << "\nМассивы не равны";
return 0;
}
|
|
|
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!