Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2009, 13:43   #1
fuukah
Новичок
Джуниор
 
Регистрация: 28.12.2009
Сообщений: 6
По умолчанию ...Написать и протестировать 2 функции...

1)Написать и протестировать функцию, которая в строке, передаваемой ей в качестве параметра, заменяет каждый второй элемент на заданный символ.

2)Написать и протестировать функцию для сложения и вычитания вещественных матриц. Одним из формальных параметров должен быть признак вида операции.

признак вида операции? параметр, указывающий какую операцию (сложение или вычитание) должна выполнять функция?



Есть пример задачи. Но я не совсем понимаю что тут происходит. На подобии этой мне нужно написать еще 2, которые даны.
Это нам задали в институте после 2 пар за весь семестр. К сожалению, после ознакомления с учебной программой "программирование на C++" в колледже мне не понятно 50% кода (что такое clrscr/что пишется внутри printf / что такое getf getch /.) Все бы было без вопросов, если бы C[i][j] := A[i][j] + или - B[i][j], но судя по примеру тут не все так как я предполагал... Буду признателен если кто прокомментирует что происходит в примере (printf, clrscr, float step..). В общем не понятно как решить пример через функцию.

Пример
Написать и протестировать функцию для вычисления x^n .
Код:
#include <stdio.h>
#include <conio.h>
void main()
{
  int n=-4;
  float x=2.0;
  float xn;
  float power(float, int);  // прототип функции
  clrscr();
  printf("-3 в степени 3 = %.1f\n", power(-3.0, 3));
  printf("%4.2f в степени %2d = %f\n", x, n, power(x, n));
  printf("Возводим 0 в степень -2 :\n");
  power(0.0, -2);
  getch();
}
float power(float x, int n)
{
  float step=1.0;
  if(n>0)
   {
     for( ; n>0; n--)
       step*=x;
     return step;
   }
   else if(x!=0)
         {
           for( ; n<0; n++)
             step/=x;
           return step;
         }
         else
           {
             printf("Ошибка! Нельзя возводить 0 в %d степень!\n", n);
             return 0;
           }
}
Функция power() должна вернуть в вызывающую функцию одно значение. Для этого удобно использовать оператор return. Значение, возвращаемое таким образом, является результатом работы функции и может использоваться в выражениях. Аргументы функции не должны изменяться после ее работы, поэтому они передаются в функцию по значению.
fuukah вне форума Ответить с цитированием
Старый 28.12.2009, 14:44   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Код:
#include <stdio.h>
#include <conio.h>
void main()
{
  int n=-4;       //объявление переменной целого типа и присвоение ей значения -4
  float x=2.0;   //объявление переменной вещественного типа и присвоение ей значения 2.0
  float xn;       //объявление переменной вещественного типа
  float power(float, int);  // прототип функции 
/*      
float  - тип переменной, возвращаемой функцией
 power- это имя функции 
(float, int) с передаваемыми ей аргументами в виде вещественного и целого числа */
  clrscr();  // Очистка экрана
  printf("-3 в степени 3 = %.1f\n", power(-3.0, 3));// Вывод значения которое возвращает функция, при получении аргументов -3.0, 3 
  printf("%4.2f в степени %2d = %f\n", x, n, power(x, n));// Вывод значения которое возвращает функция, при получении аргументов х, n 
  printf("Возводим 0 в степень -2 :\n");
  power(0.0, -2);
  getch(); // Ожидания нажатия клавиши для окончания программы
}
float power(float x, int n)   //Описание функции
{
  float step=1.0;             //бъявление переменной вещественного типа и присвоение ей значения 1.0
  if(n>0)                       //Если степень, в которую возводим число >0
   {
     for( ; n>0; n--)        //До тех пор пока степень не уменьшиться до 0 после выполнения ниже записанной операции из n вычитаем 1
       step*=x;            // Возведение в степень.1-й цикл step=1.0*х; 2-й цикл step=step*х=х*х; и т.д.
     return step; //Возвращаем вычисленное значение
   }
   else if(x!=0) //Если х не равно 0
         {
           for( ; n<0; n++) //Здесь все тоже только деление 
             step/=x;
           return step;
         }
         else
           {
             printf("Ошибка! Нельзя возводить 0 в %d степень!\n", n);
             return 0;
           }
}
Не знаю насколько Вам это поможет. Попробуйте поискать по форуму. С признаком думаю необходимо передавать переменную типа bool, и в зависимости от true или false выполнять сложение или умножение
Неприятности приходят и уходят, а жизнь продолжается!

Последний раз редактировалось Sweta; 28.12.2009 в 14:49.
Sweta вне форума Ответить с цитированием
Старый 28.12.2009, 15:12   #3
fuukah
Новичок
Джуниор
 
Регистрация: 28.12.2009
Сообщений: 6
По умолчанию

а еще будет такой вопрос.
дано N-кол-во матриц ....как объявить это кол-во матриц, что они произвольного размера ( размер вводим с клавиатуры ( A[4][3] B[2][2] C[M][N]и т.д.) ) сами матрицы человек заполняет тоже, а не через генератор случайных чисел.
fuukah вне форума Ответить с цитированием
Старый 28.12.2009, 15:17   #4
fuukah
Новичок
Джуниор
 
Регистрация: 28.12.2009
Сообщений: 6
По умолчанию

покапался на форуме и нашел код
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
void matrixsum(int **a, int **b, int **c)
{
    int i, j;
    for(i=0; i<5; i++)
       for(j=0; j<5; j++)
          c[i][j] = a[i][j] + b[i][j];
}
 
int main()
{
    int i, j, **a, **b, **c;
    
    a = (int**)calloc(4, sizeof(int));
    b = (int**)calloc(5, sizeof(int));
    c = (int**)calloc(5, sizeof(int));
    for(i=0; i<5; i++) {
       a[i] = (int*)calloc(5, sizeof(int));
       b[i] = (int*)calloc(5, sizeof(int));
       c[i] = (int*)calloc(5, sizeof(int));
    }
    
    printf("A = \n");
    for(i=0; i<4; i++) {
       for(j=0; j<5; j++) {
          a[i][j] = rand()%10;
          printf("%d ", a[i][j]);
       }
       printf("\n");
    }
    printf("\nB = \n");
    for(i=0; i<5; i++) {
       for(j=0; j<5; j++) {
          b[i][j] = rand()%10;  
          printf("%d ", b[i][j]);
       }
       printf("\n");
    }
    
    matrixsum(a, b, c);
    printf("\nC = \n");
    for(i=0; i<5; i++) {
       for(j=0; j<5; j++)
          printf("%2d ", c[i][j]);
       printf("\n");
    }
    getch();
    return 0;
}
но здесь идет сложение по строкам Для матриц А(4;5) и В(5;5)

так же нашел что-то похожее
Код:
double **A;
int M, N;
 
A= malloc( M*sizeof(double*) );
for ( i=0; i<M; i++ ) {
    A[i]= malloc( N*sizeof(double) );
}
но не понятно подходит ли это для моего вопроса
fuukah вне форума Ответить с цитированием
Старый 28.12.2009, 20:37   #5
fuukah
Новичок
Джуниор
 
Регистрация: 28.12.2009
Сообщений: 6
По умолчанию

завтра зачет а я так половину и не понял >_> наверное можно переместить тему в "оплачиваемое"
fuukah вне форума Ответить с цитированием
Старый 29.12.2009, 12:29   #6
fuukah
Новичок
Джуниор
 
Регистрация: 28.12.2009
Сообщений: 6
По умолчанию

санта где ты?
fuukah вне форума Ответить с цитированием
Старый 29.12.2009, 14:51   #7
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Санта в западной Европе, если не ошибаюсь.
Первое задание.
Код:
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <conio.h>
void f_zam(char*str, char symb);

int main ()
{
char str[256] = {0};
char symb;
printf("Vvedite stroku\n");
gets( (char*)&str );
printf("Vvedite simbol\n");
scanf("%ch",&symb);
f_zam((char*)&str, symb);
getch();
return 0;
}

void f_zam(char*str, char symb)
{
int f = 0;
char b= symb;
while ( str[f] != '\0')
      {
       if(f%2==0)
       str[f]=b;
       f++;
       }
       f--;
       str[f]='\0';
f=0;
while ( str[f] != '\0')
 {
 printf("%c",str[f]);
 f++;
 }
 }
У Вас Си или С++?
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 29.12.2009, 17:08   #8
fuukah
Новичок
Джуниор
 
Регистрация: 28.12.2009
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Sweta Посмотреть сообщение
Санта в западной Европе, если не ошибаюсь.
Первое задание.
Код:
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <conio.h>
void f_zam(char*str, char symb);

int main ()
{
char str[256] = {0};
char symb;
printf("Vvedite stroku\n");
gets( (char*)&str );
printf("Vvedite simbol\n");
scanf("%ch",&symb);
f_zam((char*)&str, symb);
getch();
return 0;
}

void f_zam(char*str, char symb)
{
int f = 0;
char b= symb;
while ( str[f] != '\0')
      {
       if(f%2==0)
       str[f]=b;
       f++;
       }
       f--;
       str[f]='\0';
f=0;
while ( str[f] != '\0')
 {
 printf("%c",str[f]);
 f++;
 }
 }
У Вас Си или С++?
ну как я понял СИ
я изучал C++ а сейчас "Программирование на языке Си"....да и отличие между ними не знаю

Последний раз редактировалось fuukah; 29.12.2009 в 17:10.
fuukah вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать функцию в функции^^ kyroshyp Microsoft Office Excel 0 15.12.2009 19:58
MSVC++ 2008. Разработать и протестировать класс Point p_alex Помощь студентам 5 18.10.2009 23:25
Прошу протестировать Speech Tester v 1.0 Alex Cones Софт 6 26.08.2009 21:42
Помогите протестировать программу NetSpace Софт 9 09.06.2009 08:19
Как протестировать написанную программу? Сергей089 Общие вопросы Delphi 6 05.12.2008 18:01