ФГОБУ ВПО "СибГУТИ"
Кафедра вычислительных систем
ЯЗЫКИ ПРОГРАММИРОВАНИЯ / ПРОГРАММИРОВАНИЕ
                                
ФГОБУ ВПО "СибГУТИ"
Кафедра вычислительных систем
ЯЗЫКИ ПРОГРАММИРОВАНИЯ / ПРОГРАММИРОВАНИЕ
                                
© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»
                                
#include 
int main()
{
 int m1[5] = {1,2,3,4,5}, m2[3] = {3,6,0};
 int m3[4] = {12, 20, 1, 1};
 int sum1, sum2, sum3;
 int i = 0;
 sum1 = 0;
 for(i=0; i < 5; i++)
  sum1 += m1[i];
 sum2 = 0;
 for(i=0; i < 3; i++)
  sum2 += m2[i];
 sum3 = 0;
 for(i=0; i < 4; i++)
  sum3 += m3[i];
 printf("sum1=%d, sum2=%d, sum3=%d\n",sum1,sum2,sum3);
}
                                
То, что ошибка была обнаружена и исправлена в одном из фрагментов кода.
не обеспечивает исправления аналогичных ошибок в подобных фрагментах программы, расположенных в других местах программы.
                                
При копировании и доработке аналогичного кода высока вероятность опечаток.
Такие опечатки достаточно сложно обнаружить, так как код выглядит корректным.
                                
Исправление требуется только в одном месте программы!
После этого все действия по подсчету суммы эл-тов массива будут производиться корректно.
                                
Исправление требуется только в одном месте программы!
После этого все действия по подсчету суммы эл-тов массива будут производиться корректно.
                                
Формальные параметры:
локальные переменны, которые получают свое значение при вызове функции.
Основное средство контроля поведения функции.
Тело
функции
Локальные переменные
Возврат значения и
немедленное завершение функции
Имя
функции
Тип возвращаемого значения
                                
Вызов функции
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
Фактические параметры
При вызове происходит:
Вычисление всех параметров-выражений
Приведение типов фактических параметров к типу формальных
Имя
функции
                                
Формальные параметры:
локальные переменны, которые получают свое значение при вызове функции.
Тело
функции
Имя
функции
Тип возвращаемого значения
Прототип необходим в тех случаях, 
когда вызов функции необходимо выполнить до ее определения 
ИЛИ если определение функции располагается в ДРУГОМ файле.
                                
int sum_count(int quant,int nums[]); // прототип
. . . . .
int main(){
  int mas[] = {1,2,3,4,5,6,7};
  int sum = sum_count(sizeof(mas)/sizeof(int),nums); // вызов
  return 0;
}
. . . . .
int sum_count(int quant,int nums[]) // определение
{
  int i, sum = 0;
  for(i=0;i
  }
  return sum;
}
                                
int sum_sub(int x, int y, int sum, int sub){
  sum = x + y;
  sub = x – y;
}
int main(){
  int s = 5, sm = 0, sub = 0;
  
  sum_sub(10,s,sm,sub);
  printf("sum = %d, sub = %d\n", sm, sub);
  return 0;
}
Изменяются только формальные параметры!
sum = 0, sub = 0
                                
#include  sum = 15, sub = 5
int sum = 0, sub = 0;
int sum_sub(int x, int y, int sum, int sub){
  sum = x + y;
  sub = x – y;
}
int main(){
  int s = 5, sm = 0, sub = 0;
  
  sum_sub(10,s ,sm,sub);
  printf("sum = %d, sub = %d\n", sm, sub);
  return 0;
}
                                
#include  sum = 15, sub = 5
int sum_sub(int x, int y, int *sum, int *sub){
  *sum = x + y;
  *sub = x – y;
}
int main(){
  int s = 5, sm = 0, sb = 0;
  sum_sub(10, s, &sm, &sb);
  printf("sum = %d, sub = %d\n", sm, sb);
  return 0;
}
                                
#include  sum = 15, sub = 5
int sum_sub(int x, int y, int out[2]){
  out[0] = x + y;
  out[1] = x – y;
}
int main(){
  int s = 5, m[2];
  sum_sub(10, s, m);
  printf("sum = %d, sub = %d\n", m[0], m[1]);
  return 0;
}
                                
"102345"      ->
"-1132"       ->
"123s54"      ->
                                
s = "102345"      ->
Стратегия обработки положительных чисел?
                                
s = "102345"      ->
ОСОБЕННОСТИ ЗАДАЧИ
1. Первая цифра в строке – самая старшая! Пусть строка s содержит только корректные символы, n – длина s, тогда целочисленное представление s выглядит следующим образом:
v = s0∙10n-1 + s1∙10n-2 + s2∙10n-3 + … + sn-2∙101 + sn-1∙100
2. Цифра представлена символом, т.е. его ASCII-кодом:
Цифры располагаются в таблице ASCII кодов по возрастанию и непрерывно. Поэтому для перевода цифры из символьного представления в целочисленное достаточно отнять код '0'!
->
                                
s
s[i] != '\0'
v = v*10 + (s[i] – '\0')
i = i + 1
i=0
v = 0
v
ДА
НЕТ
                                
s = "-1132"      ->
Стратегия обработки отрицательных чисел?
                                
s = "-1132"      ->
ОСОБЕННОСТИ ЗАДАЧИ
1. Перевод модуля числа выполняется по тому же алгоритму, что и для целых положительных чисел:
v = s0∙10n-1 + s1∙10n-2 + s2∙10n-3 + … + sn-2∙101 + sn-1∙100
2. Если первым в строке обнаружен символ "минус" знак числа необходимо изменить на противоположный путем умножения его 
на -1.
                                
s
s[i]!='\0'
v = v*10 + (s[i]–'\0')
i = i + 1
i=0
sign = 1
v = 0
v*sign
s[0]=='-'
sign = -1
i = i + 1
НЕТ
ДА
ДА
                                
Стратегия обработки некорректных данных?
                                
ОСОБЕННОСТИ ЗАДАЧИ
1. Перед обработкой каждый символ необходимо проверять на принадлежность интервалу ASCII-кодов, соответствующих цифрам:
s[i] >= '0' && s[i] <= '9'
Читается: s[i] больше или равно ASCII-коду нуля ('0') и одновременно s[i] меньше или равно ASCII-коду девяти ('9').
                                
i=0
sign = 1
v = 0
v*sign
s[0]=='-'
sign = -1
i = i + 1
НЕТ
ДА
ДА
s[0]=='\0'
ДА
error
НЕТ
                                
int main()
{
 int i;
 char s1[] = "102345212";
 char s2[] = "-1132";
 char s3[] = "123s54";
 if( my_atoi(s1, &i) == 0 )
  printf("s = %s, v=%d\n", s1,i);
 else 
  printf("s = %s, error!\n", s1,i);
 if( my_atoi(s2, &i) == 0 ) 
  printf("s = %s, v=%d\n", s2,i);
 else 
  printf("s = %s, error!\n", s2,i);
 if( my_atoi(s3, &i) == 0 ) 
  printf("s = %s, v=%d\n", s3,i);
 else 
  printf("s = %s, error!\n", s3,i);
}
                                
Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть