Меню

Укажите строки не содержащие ошибок синтаксиса

Главная / Программирование /
Основы программирования на языке C / Тест 1

Основы программирования на языке C — тест 1

Упражнение 1:


Номер 1

Чем обеспечивается надежность программ, написанных на языке Си?

Ответ:

(1) гибкостью языка Си 

(2) переносимостью языка Си 

(3) мобильностью языка Си 

(4) сильной типизацией языка Си 


Номер 2

Где, когда и кем был создан язык Си?

Ответ:

(1) язык Си был создан Н. Виртом 

(2) язык Си был создан Б. Страуструпом 

(3) язык Си был создан в США в 1972 году сотрудником фирмы Bell Labs Денисом Ритчи 

(4) язык Си был создан в Японии в 1972 году группой разработчиков фирмы Panasonic под руководством Кена Томпсона 


Номер 3

Можно ли на языке Си написать компилятор с языка Си при условии, что в наличии уже имеется другой компилятор с языка Си?

Ответ:

(1) да 

(2) нет 

(3) только при совместном использовании с C# 

(4) только при совместном использовании с C++ 


Упражнение 2:


Номер 2

Какого типа язык Си?

Ответ:

(1) компилируемого типа 

(2) интерпретируемого типа 

(3) компилируемо-интерпретируемого типа 

(4) интерпретируемого-компилируемого типа 


Номер 3

Есть ли у языка Си собственный редактор?

Ответ:

(1) да 

(2) нет 

(3) только в OС UNIX 

(4) только в OС WINDOWS 


Упражнение 3:


Номер 1

Чем определяется мобильность языка Си?

Ответ:

(1) тем, что программа, написанная на Си для одной вычислительной системы, может быть перенесена без изменений на другую систему 

(2) тем, что программа, написанная на Си для одной вычислительной системы, может быть перенесена с небольшими изменениями или вообще без них на другую 

(3) мобильность языка Си определяется его эффективностью 


Упражнение 4:


Номер 1

Укажите ошибки и несоответствия стандартам ANSI C в следующем фрагменте:
        include studio.h
void main ()
{
	printf("Hello, World!");
}

Ответ:

(1) ошибок нет 

 

(2) ошибка в первой строке — должно быть

#include <stdio.h> 

(3) функция main() объявлена как void, что не соответствует стандарту ANSI C 


Номер 2

Что было бы напечатано, если бы данные операторы являлись частью полной программы?
        int n;
n=5;
printf("%d+%d=%d", n, n, n+n);

Ответ:

(1) 5+5=10 

(2)

(3) 10 

(4) 5+5 


Номер 3

Что будет напечатано?
        printf("Что ?n мешает/n  вам работать n");

Ответ:

 

(1)

Что ?
мешает/n вам работать 

 

(2)

Что ?
мешает
вам работать 

 

(3)

Что ? мешает /n вам работать 

 

(4)

Что? мешает вам работать 


Упражнение 5:


Номер 1

Будет ли работать программа и если нет - в чем ошибки?
        #include <stdio.h>
int main()
{
	printf("Hello, World!n");
}

Ответ:

(1) программа скомпилируется и отработает, но код завершения будет не определен 

(2) программа не скомпилируется из-за синтаксической ошибки 

(3) программа не скомпилируется, т.к. не указан возвращаемый функцией тип 


Номер 2

Укажите строки, не содержащие ошибок синтаксиса:

Ответ:

(1) printf("Hello, World!"n); 

(2) printf("Hello, World!n"); 

(3) printf(%d Hello, n Hello, World!?); 

(4) printf("Hello,n World!n"); 


Номер 3

Каким символом должен заканчиваться оператор?

Ответ:

(1) символом «точка с запятой» — ‘;’ 

(2) символом «точка» — ‘.’ 

(3) символом «запятая» — ‘,’ 

(4) символом «двоеточие» — ‘:’ 


Упражнение 6:


Номер 1

Какие символы могут использоваться для комментариев?

Ответ:

(1) /* comment */ 

(2) { comment } 

(3) (* comment *) 


Номер 2

Какие имена правильно написаны на языке Си?

Ответ:

(1) Name 

(2) name_ 

(3) +name 

(4) {name} 


Номер 3

Какие имена переменных правильно написаны на языке Си?

Ответ:

(1) Dinner 

(2) 2Dinner 

(3) week_days 

(4) week_daysssssssssssss 


Главная /
Основы программирования на языке C /
Укажите строки, не содержащие ошибок синтаксиса:

Укажите строки, не содержащие ошибок синтаксиса:

вопрос

Правильный ответ:

printf("Hello, World!"n);

printf("Hello, World!n");

printf(%d Hello, n Hello, World!?);

printf("Hello,n World!n");

Сложность курса: Основы программирования на языке C

Оценить вопрос

Очень сложно

Сложно

Средне

Легко

Очень легко

Спасибо за оценку!

Комментарии:

Другие ответы на вопросы из темы программирование интуит.

  • #

    Как обратиться к элементу массива структур?

  • #

    Какой процесс называется повышением типа?

  • #

    Какое из выражений правильное?

  • #

    Что будет напечатано, если i примет значение 3 и будет убран оператор break в операторе case 3:?
    switch(i)
    {
    case 1: printf(«Попытаемся проанализировать, что сейчас происходит: n»); break;
    case 2: printf(«расчистка площади под что-то новое в экономике, «); break;
    case 3: printf(«где могут проклюнуться ростки этого нового, «); break;
    case 4: printf(«или это разрушение, n»);break;
    default: printf(«болото, и ничего больше?n»);
    }

  • #

    Может ли функция не иметь аргументов?

Всего: 17    1–17

Добавить в вариант

Задания Д24 C1 № 5532

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится сумма цифр этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)

Бэйсик Паскаль

DIM N AS LONG

INPUT N

sum = 0

WHILE N >= 9

    digit = N MOD 10

    sum = sum + digit

    N = N 10

WEND

PRINT sum

END

var N: longint;

    digit, sum: integer;

begin

    readln(N);

    sum := 0;

    while N >= 9 do

    begin

        digit := N mod 10;

        sum := sum + digit;

        N := N div 10;

    end;

    writeln(sum);

end.

Си++ Алгоритмический язык

#include <iostream>

using namespace std;

int main()

{

    long int N;

    int digit, sum;

    cin >> N;

    sum = 0;

    while (N >= 9)

    {

        digit = N % 10;

        sum = sum + digit;

        N = N / 10;

    }

    cout « sum « endl;

}

алг

нач

    цел N, digit, sum

    ввод N

    sum := 0

    нц пока N >= 9

        digit := mod(N, 10)

        sum := sum + digit

        N := div(N, 10)

    кц

    вывод sum

кон

Python

n = int(input())

sum = 0

while n >= 9:

    digit = n % 10

    sum += digit

    n //=10;

print(sum)

Последовательно выполните следующее.

1.  Напишите, что выведет эта программа при вводе числа 352.

2.  Найдите все ошибки в этой программе (их может быть одна или несколько). Укажите все строки (одну или более), содержащие ошибки, и для каждой такой строки приведите правильный вариант. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

3.   Укажите одно число для которого эта программа будет работать верно.

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Дальний Восток. Вариант 3.


Задания Д24 C1 № 5468

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится произведение цифр этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)

Бэйсик Паскаль

DIM N AS LONG

DIM product AS LONG

INPUT N

product = N mod 10

WHILE N >= 10

    digit = N MOD 10

    product = product*digit

    N = N 10

WEND

PRINT product

END

var N, product: longint;

    digit: integer;

begin

    readln(N);

    product := N mod 10;

    while N >= 10 do

    begin

        digit := N mod 10;

        product := product*digit;

        N := N div 10;

    end;

    writeln(product);

end.

Си++ Алгоритмический язык

#include <iostream>

using namespace std;

int main()

{

    long int N, product;

    int digit;

    cin >> N;

    product = N % 10;

    while (N >= 10)

    {

        digit = N % 10;

        product = product*digit;

        N = N / 10;

    }

    cout << product;

}

алг

нач

    цел N, digit, product

    ввод N

    product := mod(N, 10)

    нц пока N >= 10

        digit := mod(N, 10)

        product := product*digit

        N := div(N, 10)

    кц

    вывод product

кон

Python

n = int(input())

product = n % 10

while n >= 10:

    digit = n % 10

    product = product*digit

    n //= 10

print(product)

Последовательно выполните следующее.

1.  Напишите, что выведет эта программа при вводе числа 532.

2.  Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:

1) выпишите строку, в которой сделана ошибка;

2) укажите, как исправить ошибку,  — приведите правильный вариант строки.

Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Сибирь. Вариант 1.


Задания Д24 C1 № 5500

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится максимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)

Бэйсик Паскаль

DIM N AS LONG

INPUT N

max_digit = 9

WHILE N > 9

    digit = N MOD 10

    IF max_digit < digit THEN

        max_digit = digit

    END IF

        N = N 10

WEND

PRINT max digit

END

var N: longint;

    digit, max_digit: integer;

begin

    readln(N);

    max_digit := 9;

    while N > 9 do

    begin

        digit := N mod 10;

        if max_digit < digit then

            max_digit := digit;

        N := N div 10;

    end;

    writeln(max_digit);

end.

Си++ Алгоритмический язык

#include <iostream>

using namespace std;

int main()

{

    long int N;

    int digit, max_digit;

    cin >> N;

    max_digit = 9;

    while (N > 9)

    {

        digit = N % 10;

        if (max_digit < digit)

            max_digit = digit;

        N = N /10;

    }

    cout « max_digit « endl;

}

алг

нач

    цел N, digit, max_digit

    ввод N

    max_digit := 9

    нц пока N > 9

         digit := mod(N, 10)

        если max_digit < digit то

            max_digit := digit

        все

    N := div(N, 10)

    кц

    вывод max_digit

кон

Python

n = int(input())

max_digit = 9

while n > 9:

    digit = n % 10

    if max_digit < digit:

        max_digit = digit

    n //= 10;

print(max_digit)

Последовательно выполните следующее.

1.  Напишите, что выведет эта программа при вводе числа 738.

2.  Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:

1) выпишите строку, в которой сделана ошибка;

2) укажите, как исправить ошибку,  — приведите правильный вариант строки.

Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Урал. Вариант 1., ЕГЭ по информатике 30.05.2013. Основная волна. Урал. Вариант 2., ЕГЭ по информатике 30.05.2013. Основная волна. Урал. Вариант 3., ЕГЭ по информатике 30.05.2013. Основная волна. Урал. Вариант 4.


Задания Д24 C1 № 5596

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится произведение цифр этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)

Бэйсик Паскаль

DIM N AS LONG

DIM product AS LONG

INPUT N

product = 0

WHILE N >= 10

    digit = N MOD 10

    product = product*digit

    N = N 10

WEND

PRINT product

END

var N, product: longint;

    digit: integer;

begin

    readln(N);

    product := 0;

    while N >= 10 do

    begin

        digit := N mod 10;

        product := product*digit;

        N := N div 10;

    end;

    writeln(product);

end.

Си++ Алгоритмический язык

#include <iostream>

using namespace std;

int main()

{

    long int N, product;

    int digit;

    cin >> N;

    product = 0;

    while (N >= 10)

    {

        digit = N % 10;

        product = product*digit;

        N = N / 10;

    }

    cout << product;

}

алг

нач

    цел N, digit, product

    ввод N

    product := 0

    нц пока N >= 10

        digit := mod(N, 10)

        product := product*digit

        N := div(N, 10)

    кц

    вывод product

кон

Python

n = int(input())

product = 0

while n >= 10:

    digit = n % 10

    product = product*digit

    n //= 10

print(product)

Последовательно выполните следующее.

1.  Напишите, что выведет эта программа при вводе числа 429.

2.  Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:

1) выпишите строку, в которой сделана ошибка;

2) укажите, как исправить ошибку,  — приведите правильный вариант строки.

Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Сибирь. Вариант 2.


Задания Д24 C1 № 5692

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится максимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)

Бэйсик Паскаль

DIM N AS LONG

INPUT N

max_digit = 10

WHILE N >= 10

    digit = N MOD 10

    IF max_digit < digit THEN

        max_digit = digit

    END IF

        N = N 10

WEND

PRINT max_digit

END

var N: longint;

    digit, max_digit: integer;

begin

    readln(N);

    max_digit := 10;

    while N >= 10 do

    begin

        digit := N mod 10;

        if max_digit < digit then

            max_digit := digit;

        N := N div 10;

    end;

    writeln(max_digit);

end.

Си++ Алгоритмический язык

#include <iostream>

using namespace std;

int main ()

{

    long int N;

    int digit, max_digit;

    cin >> N;

    max digit = 10;

    while (N >= 10)

    {

        digit = N % 10;

        if (max_digit < digit)

            max_digit = digit;

        N = N / 10;

    }

    cout « max_digit « endl;

}

алг

нач

    цел N, digit, max_digit

    ввод N

    max_digit := 10

    нц пока N >= 10

        digit := mod(N, 10)

        если max_digit < digit то

            max_digit := digit

        все

        N := div(N, 10)

    кц

    вывод max_digit

кон

Python

n = int(input())

max_digit = 10

while n >= 10:

    digit = n % 10

    if max_digit < digit:

        max_digit = digit

    n //= 10

print(max_digit)

Последовательно выполните следующее.

1.  Напишите, что выведет эта программа при вводе числа 528.

2.  Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:

1) выпишите строку, в которой сделана ошибка;

2) укажите, как исправить ошибку,  — приведите правильный вариант строки.

Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Сибирь. Вариант 5.


Задания Д24 C1 № 6014

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится максимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)

Бейсик Паскаль

DIM N AS LONG

INPUT N

max_digit = 9

WHILE N >= 10

    digit = N MOD 10

    IF digit > max_digit THEN

        max_digit = digit

    END IF

    N = N 10

WEND

PRINT max_digit

END

var N: longint;

    digit, max_digit: integer;

begin

    readln(N);

    max_digit := 9;

    while N >= 10 do

    begin

        digit := N mod 10;

        if digit > max_digit then

            max_digit := digit;

        N := N div 10;

    end;

    writeln(max_digit);

end.

Си++ Алгоритмический

#include <iostream>

using namespace std;

int main()

{

    long int N;

    int digit, max_digit;

    cin >> N;

    max_digit = 9;

    while (N >= 10)

    {

        digit = N % 10;

        if (digit > max_digit)

            max_digit = digit;

        N = N /10;

    }

    cout « max_digit « endl;

}

алг

нач

    цел N, digit, max_digit

    ввод N

    max_digit := 9

    нц пока N >= 10

        digit := mod(N, 10)

        если digit > max_digit то

            max_digit := digit

        все

        N := div(N, 10)

    кц

    вывод max_digit

кон

Python

n = int(input())

max_digit = 9

while n >= 10:

    digit = n % 10

    if digit > max_digit:

        max_digit = digit

    n //= 10

print(max_digit)

Последовательно выполните следующее.

1.   Напишите, что выведет эта программа при вводе числа 423.

2.   Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:

1)  выпишите строку, в которой сделана ошибка;

2)  укажите, как исправить ошибку,  — приведите правильный вариант строки.

Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

Источник: Демонстрационная версия ЕГЭ—2014 по информатике.


Задания Д24 C1 № 5372

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится количество цифр этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)

Бейсик Паскаль

DIM N AS LONG

INPUT N

sum = 1

WHILE N > 1

N = N 10

sum = sum + 1

WEND

PRINT sum

END

var N: longint;

sum: integer;

begin

readln(N);

sum := 1;

while N > 1 do

begin

N := N div 10;

sum := sum + 1;

end;

writeln(sum);

end.

Си++ Алгоритмический

#include <iostream>

using namespace std;

int main()

{

long int N;

int sum;

cin >> N;

sum = 1;

while (N > 1)

{

N = N /10;

sum = sum + 1;

}

cout « sum « endl;

}

алг

нач

цел N, sum

ввод N

sum := 1

нц пока N > 1

N := div(N, 10)

sum := sum + 1

кц

вывод sum

кон

Python

n = int(input())

sum = 1

while n > 1:

    n //= 10

    sum += 1

print(sum)

Последовательно выполните следующее.

1.  Напишите, что выведет эта программа при вводе числа 938.

2.  Укажите одно число для которого эта программа будет работать верно.

3.  Найдите все ошибки в этой программе (их может быть одна или несколько). Укажите все строки (одну или более), содержащие ошибки, и для каждой такой строки приведите правильный вариант. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Дальний Восток. Вариант 1.


Задания Д24 C1 № 6199

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится сумма чётных цифр в десятичной записи этого числа или 0, если чётных цифр в записи нет. Ученик написал такую программу:

Бейсик Паскаль

DIM N AS LONG

INPUT N

S = 0

WHILE N > 1

IF N MOD 2 = 0

S = N MOD 10

END IF

N = N 10

WEND

PRINT S

END

var N: longint;

s: integer;

begin

readln(N);

s := 0;

while N > 1 do begin

if N mod 2 = 0 then begin

s := N mod 10;

end;

N := N div 10;

end;

write(s);

end.

Си++ Алгоритмический язык

#include <iostream>

using namespace std;

int main()

{

long int N;

int s;

cin >> N;

s = 0;

while (N > 1) {

if (N%2 == 0) {

s = N % 10;

}

N = N / 10;

}

cout « s « endl;

}

алг

нач

цел N, s

ввод N

s := 0

нц пока N > 1

если mod(N,2) = 0 то

s := mod(N,10)

все

N := div(N,10)

кц

вывод s

кон

Python

N = int(input())

s = 0

while N > 1:

    if N % 2 == 0:

        s = N % 10

    N //= 10

print(s)

Последовательно выполните следующее.

1.  Напишите, что выведет эта программа при вводе числа 1984.

2.Приведите пример числа, при вводе которого программа выдаст верный ответ.

3.  Найдите в программе все ошибки (их может быть одна или несколько).

Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде. Обратите внимание: вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.


Задания Д24 C1 № 7796

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число x, не превосходящее 1000, и выводится количество единиц в двоичной записи этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на пяти языках программирования.)

Бейсик Python

INPUT x

cnt = 0

WHILE x > 0

cnt = cnt + 1

x = x MOD 2

WEND

PRINT cnt

END

x = int(input())

cnt = 0

while x > 0:

    cnt = cnt+1

    x = x % 2

print(cnt)

Паскаль Алгоритмический язык

var x,cnt: integer;

begin

readln(x);

cnt := 0;

while x > 0 do

begin

cnt:=cnt + 1;

x := x mod 2

end;

writeln(cnt)

end.

алг

нач

цел x, cnt

ввод x

cnt := 0

нц пока x > 0

cnt := cnt+1

x := mod(x, 2)

кц

вывод cnt

кон

Си++

#include <iostream>

using namespace std;

int main()

{

int x,cnt;

cin >> x;

cnt = 0;

while (x > 0)

{

cnt = cnt + 1;

x = x % 2;

}

cout « cnt « endl;

}

Последовательно выполните следующее:

1.  Напишите, что выведет эта программа при вводе числа 6.

2.  Приведите пример такого числа x, что, несмотря на ошибки, программа печатает правильный ответ.

3.  Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:

1)  выпишите строку, в которой сделана ошибка;

2)  укажите, как исправить ошибку, т. е. приведите правильный вариант строки.

Достаточно указать ошибки и способ их исправления для одного языка программирования. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.


Задания Д24 C1 № 5884

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится минимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)

Бэйсик Паскаль

DIM N AS LONG

INPUT N

min_digit = 9

WHILE N >= 10

    digit = N MOD 10

    IF digit < min_digit THEN

        digit = min_digit

    END IF

    N = N 10

WEND

PRINT min_digit

END

var N: longint;

    digit, min_digit: integer;

begin

    readln(N);

    min_digit := 9;

    while N >= 10 do

    begin

        digit := N mod 10;

        if digit < min_digit then

            digit := min_digit;

        N := N div 10;

    end;

    writeln(min_digit);

end.

Си++ Алгоритмический язык

#include <iostream>

using namespace std;

int main()

{

    long int N;

    int digit, min_digit;

    cin >> N;

    min_digit = 9;

    while (N >= 10)

    {

        digit = N % 10;

        if (digit < min_digit)

            digit = min_digit;

        N = N / 10;

    }

    cout << min_digit << endl;

}

алг

нач

    цел N, digit, min_digit

    ввод N

    min_digit := 9

    нц пока N >= 10

        digit := mod(N, 10)

        если digit < min_digit то

            digit := min_digit

        все

        N := div(N, 10)

    кц

    вывод min_digit

кон

Python

n = int(input())

min_digit = 9

while n >= 10:

    digit = n % 10

    if digit < min_digit:

        digit = min_digit

    n //= 10

print(min_digit)

Последовательно выполните следующее.

1.  Напишите, что выведет эта программа при вводе числа 823.

2.  Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:

1) выпишите строку, в которой сделана ошибка;

2) укажите, как исправить ошибку,  — приведите правильный вариант строки.

Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Центр. Вариант 2.


Задания Д24 C1 № 5948

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится минимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)

Бэйсик Паскаль

DIM N AS LONG

INPUT N

min_digit = 0

WHILE N > 0

    digit = N MOD 10

    IF digit < min_digit THEN

        min_digit = digit

    END IF

    N = N 10

WEND

PRINT digit

END

var N: longint;

    digit, min_digit: integer;

begin

    readln(N);

    min_digit := 0;

    while N > 0 do

    begin

        digit := N mod 10;

        if digit < min_digit then

            min_digit := digit;

        N := N div 10;

    end;

    writeln(digit);

end.

Си++ Алгоритмический язык

#include <iostream>

using namespace std;

int main()

{

    long int N;

    int digit, min_digit;

    cin >> N;

    min_digit = 0;

    while (N > 0)

    {

        digit = N % 10;

        if (digit < min_digit)

            min_digit = digit;

        N = N / 10;

    }

    cout « digit « endl;

}

алг

нач

    цел N, digit, min_digit

    ввод N

    min_digit := 0

    нц пока N > 0

        digit := mod(N, 10)

        если digit < min_digit то

            min_digit := digit

        все

        N := div(N, 10)

    кц

    вывод digit

кон

Python

n = int(input())

min_digit = 0

while n > 0:

    digit = n % 10

    if digit < min_digit:

        min_digit = digit

    n //= 10

print(digit)

Последовательно выполните следующее.

1.  Напишите, что выведет эта программа при вводе числа 862.

2.  Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:

1) выпишите строку, в которой сделана ошибка;

2) укажите, как исправить ошибку,  — приведите правильный вариант строки.

Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Центр. Вариант 4.


Задания Д24 C1 № 9659

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число A, не превосходящее 109, и выводится произведение его цифр. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)

Бейсик Паскаль

DIM A AS LONG

DIM pr AS LONG

INPUT A

pr = 0

WHILE A >= 10

  pr = pr * (A MOD 10)

  A = A 10

WEND

PRINT pr

END

var A,pr: longint;

begin

  readln(A);

  pr := 0;

  while A >= 10 do

  begin

    pr:=pr * (A mod 10);

    A := A div 10;

  end;

  writeln(pr);

end.

Си++ Алгоритмический язык

#include <iostream>

using namespace std;

int main()

{

  long int A,pr;

    cin >> A;

  pr = 0;

  while (A >= 10)

  {

    pr = pr * (A%10);

    A = A /10;

  }

  cout « pr « endl;

}

алг

нач

  цел A, pr

  ввод A

  pr := 0

  нц пока A >= 10

    pr := pr * mod (A, 10)

    A := div(A, 10)

  кц

  вывод pr

кон

Python

A = int(input())

pr = 0

while A >= 10:

    pr = pr * (A % 10)

    A //= 10

print(pr)

Последовательно выполните следующее.

1.  Напишите, что выведет эта программа при вводе числа 123.

2.  Найдите все ошибки в этой программе (их может быть одна или несколько).

Для каждой ошибки:

а)  выпишите строку, в которой сделана ошибка;

б)  укажите, как исправить ошибку: приведите правильный вариант строки.

Обратите внимание на то, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.


Задания Д24 C1 № 5436

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится количество цифр этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования).

Бейсик Паскаль

DIM N AS LONG

INPUT N

sum = 0

WHILE N >= 9

N = N 10

sum = sum + 1

WEND

PRINT sum

END

var N: longint;

sum: integer;

begin

readln(N);

sum := 0;

while N >= 9 do

begin

N := N div 10;

sum := sum + 1;

end;

writeln(sum);

end.

Си++ Алгоритмический

#include <iostream>

using namespace std;

int main()

{

long int N;

int sum;

cin >> N;

sum = 0;

while (N >= 9)

{

N = N / 10;

sum = sum + 1;

}

cout « sum « endl;

}

алг

нач

цел N, sum

ввод N

sum := 0

нц пока N >= 9

N := div(N, 10)

sum := sum + 1

кц

вывод sum

кон

Python

N = int(input())

sum = 0

while N >= 9:

    N //= 10

    sum += 1

print(sum)

Последовательно выполните следующее.

1.  Напишите, что выведет эта программа при вводе числа 584.

2.  Укажите одно число для которого эта программа будет работать верно.

3.  Найдите все ошибки в этой программе (их может быть одна или несколько). Укажите все строки (одну или более), содержащие ошибки, и для каждой такой строки приведите правильный вариант.

Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Дальний Восток. Вариант 4.


Задания Д24 C1 № 5852

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится минимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)

Бэйсик Паскаль

DIM N AS LONG

INPUT N

min_digit = 0

WHILE N > 0

    digit = N MOD 10

    IF digit > min_digit THEN

        min_digit = digit

    END IF

    N = N 10

WEND

PRINT min_digit

END

var N: longint;

    digit, min_digit: integer;

begin

    readln(N);

    min_digit := 0;

    while N > 0 do

    begin

        digit := N mod 10;

        if digit > min_digit then

            min_digit := digit;

        N := N div 10;

    end;

    writeln(min_digit);

end.

Си++ Алгоритмический язык

#include <iostream>

using namespace std;

int main ()

{

    long int N;

    int digit, min_digit;

    cin >> N;

    min_digit = 0;

    while (N > 0)

    {

        digit = N % 10;

        if (digit > min_digit)

            min_digit = digit;

        N = N / 10;

    }

    cout « min_digit « endl;

}

алг

нач

    цел N, digit, min_digit

    ввод N

    min_digit := 0

    нц пока N > 0

        digit := mod(N, 10)

        если digit > min_digit то

            min_digit := digit

        все

        N := div(N, 10)

    кц

    вывод min_digit

кон

Python

N = int(input())

min_digit = 0

while N > 0:

    digit = N % 10

    if digit > min_digit:

        min_digit = digit

    N //= 10;

print(min_digit)

Последовательно выполните следующее.

1.  Напишите, что выведет эта программа при вводе числа 461.

2.  Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:

1) выпишите строку, в которой сделана ошибка;

2) укажите, как исправить ошибку,  — приведите правильный вариант строки.

Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Центр. Вариант 1.


Задания Д24 C1 № 5980

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится минимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)

Бейсик Паскаль

DIM N AS LONG

INPUT N

min_digit = 9

WHILE N >= 10

digit = N MOD 10

IF digit < min_digit THEN

min_digit = digit

END IF

N = N 10

WEND

PRINT digit

END

var N: longint;

digit, min_digit: integer;

begin

readln(N);

min_digit := 9;

while N >= 10 do

begin

digit := N mod 10;

if digit < min_digit then

min_digit := digit;

N := N div 10;

end;

writeln(digit);

end.

Си++ Алгоритмический

#include <iostream>

using namespace std;

int main()

{

long int N;

int digit, min_digit;

cin >> N;

min_digit = 9;

while (N >= 10)

{

digit = N % 10;

if (digit < min_digit)

min_digit = digit;

N = N / 10;

}

cout « digit « endl;

}

алг

нач

цел N, digit, min_digit

ввод N

min_digit := 9

нц пока N >= 10

digit := mod(N, 10)

если digit < min_digit то

min_digit := digit

все

N := div(N, 10)

кц

вывод digit

кон

Python

N = int(input())

min_digit = 9

while N >= 10:

    digit = N % 10

    if digit < min_digit:

        min_digit = digit

    N //= 10

print(digit)

Последовательно выполните следующее.

1.  Напишите, что выведет эта программа при вводе числа 547.

2.  Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:

1)  выпишите строку, в которой сделана ошибка;

2)  укажите, как исправить ошибку,  — приведите правильный вариант строки.

Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Центр. Вариант 5.


Задания Д24 C1 № 7769

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число x, не превосходящее 1000, и выводится количество значащих цифр в двоичной записи этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на пяти языках программирования.)

Бейсик Python

INPUT x

cnt = 0

WHILE x > 0

cnt = cnt + x MOD 2

x = x 10

WEND

PRINT cnt

END

x = int(input())

cnt = 0

while x > 0:

    cnt = cnt+x % 2

    x = x // 10

print(cnt)

Паскаль Алгоритмический язык

var x,cnt: integer;

begin

readln(x);

cnt := 0;

while x > 0 do

begin

cnt:=cnt + x mod 2;

x := x div 10

end;

writeln(cnt);

end.

алг

нач

цел x, cnt

ввод x

cnt := 0

нц пока x > 0

cnt := cnt+mod(x,2)

x := div(x, 10)

кц

вывод cnt

кон

Си++

#include <iostream>

using namespace std;

int main()

{

int x,cnt;

cin >> x;

cnt = 0;

while (x > 0)

{

cnt = cnt + x%2;

x = x /10;

}

cout « cnt « endl;

}

Последовательно выполните следующее:

1.  Напишите, что выведет эта программа при вводе числа 15.

2.  Приведите пример такого числа x, что, несмотря на ошибки, программа печатает правильный ответ.

3.  Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк.

Для каждой ошибки:

1)  выпишите строку, в которой сделана ошибка;

2)  укажите, как исправить ошибку, т. е. приведите правильный вариант строки.

Достаточно указать ошибки и способ их исправления для одного языка программирования. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.


Задания Д24 C1 № 9705

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число A, не превосходящее 109, и выводится количество цифр в десятичной записи этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)

Бейсик Паскаль

DIM A AS LONG

INPUT A

cnt = 0

WHILE A > 1

  cnt = cnt + A MOD 10

  A = A 10

WEND

PRINT cnt

END

var A: longint;

  cnt: integer;

begin

  readln(A);

  cnt := 0;

  while A > 1 do

  begin

    cnt:=cnt + A mod 10;

    A := A div 10;

  end;

  writeln(cnt);

end.

Си++ Алгоритмический язык

#include <iostream>

using namespace std;

int main()

{

  long int A;

  int cnt;

  cin >> A;

  cnt = 0;

  while (A > 1)

  {

    cnt = cnt + A%10;

    A = A /10;

  }

  cout « cnt « endl;

}

алг

нач

  цел A, cnt

  ввод A

  cnt := 0

  нц пока A > 1

    cnt := cnt + mod(A, 10)

    A := div(A, 10)

  кц

  вывод cnt

кон

Python

A = int(input())

cnt = 0

while A > 1:

    cnt += A % 10

    A //= 10

print(cnt)

Последовательно выполните следующее.

1.  Напишите, что выведет эта программа при вводе числа 111.

2.  Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:

а)  выпишите строку, в которой сделана ошибка;

б)  укажите, как исправить ошибку: приведите правильный вариант строки.

Обратите внимание на то, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

Всего: 17    1–17

Python известен своим простым синтаксисом. Однако, когда вы изучаете Python в первый раз или когда вы попали на Python с большим опытом работы на другом языке программирования, вы можете столкнуться с некоторыми вещами, которые Python не позволяет. Если вы когда-либо получали + SyntaxError + при попытке запустить код Python, то это руководство может вам помочь. В этом руководстве вы увидите общие примеры неправильного синтаксиса в Python и узнаете, как решить эту проблему.

Неверный синтаксис в Python

Когда вы запускаете ваш код Python, интерпретатор сначала анализирует его, чтобы преобразовать в байтовый код Python, который он затем выполнит. Интерпретатор найдет любой недопустимый синтаксис в Python на этом первом этапе выполнения программы, также известном как этап синтаксического анализа . Если интерпретатор не может успешно проанализировать ваш код Python, это означает, что вы использовали неверный синтаксис где-то в вашем коде. Переводчик попытается показать вам, где произошла эта ошибка.

Когда вы изучаете Python в первый раз, может быть неприятно получить + SyntaxError +. Python попытается помочь вам определить, где в вашем коде указан неверный синтаксис, но предоставляемый им traceback может немного сбить с толку. Иногда код, на который он указывает, вполне подходит.

*Примечание:* Если ваш код *синтаксически* правильный, то вы можете получить другие исключения, которые не являются `+ SyntaxError +`. Чтобы узнать больше о других исключениях Python и о том, как их обрабатывать, ознакомьтесь с https://realpython.com/python-exceptions/[Python Exceptions: Введение].

Вы не можете обрабатывать неправильный синтаксис в Python, как и другие исключения. Даже если вы попытаетесь обернуть блок + try + и + кроме + вокруг кода с неверным синтаксисом, вы все равно увидите, что интерпретатор вызовет + SyntaxError +.

+ SyntaxError + Исключение и трассировка

Когда интерпретатор обнаруживает неверный синтаксис в коде Python, он вызовет исключение + SyntaxError + и предоставит трассировку с некоторой полезной информацией, которая поможет вам отладить ошибку. Вот некоторый код, который содержит недопустимый синтаксис в Python:

 1 # theofficefacts.py
 2 ages = {
 3     'pam': 24,
 4     'jim': 24
 5     'michael': 43
 6 }
 7 print(f'Michael is {ages["michael"]} years old.')

Вы можете увидеть недопустимый синтаксис в литерале словаря в строке 4. Во второй записи + 'jim' + пропущена запятая. Если вы попытаетесь запустить этот код как есть, вы получите следующую трассировку:

$ python theofficefacts.py
File "theofficefacts.py", line 5
    'michael': 43
            ^
SyntaxError: invalid syntax

Обратите внимание, что сообщение трассировки обнаруживает ошибку в строке 5, а не в строке 4. Интерпретатор Python пытается указать, где находится неправильный синтаксис. Тем не менее, он может только указать, где он впервые заметил проблему. Когда вы получите трассировку + SyntaxError + и код, на который указывает трассировка, выглядит нормально, тогда вы захотите начать движение назад по коду, пока не сможете определить, что не так.

В приведенном выше примере нет проблемы с запятой, в зависимости от того, что следует после нее. Например, нет проблемы с отсутствующей запятой после + 'michael' + в строке 5. Но как только переводчик сталкивается с чем-то, что не имеет смысла, он может лишь указать вам на первое, что он обнаружил, что он не может понять.

*Примечание:* В этом руководстве предполагается, что вы знакомы с основами *tracebacks* в Python. Чтобы узнать больше о трассировке Python и о том, как их читать, ознакомьтесь с https://realpython.com/python-traceback/[Understanding Python Traceback].

Существует несколько элементов трассировки + SyntaxError +, которые могут помочь вам определить, где в вашем коде содержится неверный синтаксис:

  • Имя файла , где встречается неверный синтаксис

  • Номер строки и воспроизводимая строка кода, где возникла проблема

  • Знак (+ ^ +) в строке ниже воспроизводимого кода, который показывает точку в коде, которая имеет проблему

  • Сообщение об ошибке , которое следует за типом исключения + SyntaxError +, которое может предоставить информацию, которая поможет вам определить проблему

В приведенном выше примере имя файла было + theofficefacts.py +, номер строки был 5, а каретка указывала на закрывающую кавычку из словарного ключа + michael +. Трассировка + SyntaxError + может не указывать на реальную проблему, но она будет указывать на первое место, где интерпретатор не может понять синтаксис.

Есть два других исключения, которые вы можете увидеть в Python. Они эквивалентны + SyntaxError +, но имеют разные имена:

  1. + + IndentationError

  2. + + TabError

Оба эти исключения наследуются от класса + SyntaxError +, но это особые случаи, когда речь идет об отступе. + IndentationError + возникает, когда уровни отступа вашего кода не совпадают. + TabError + возникает, когда ваш код использует и табуляцию, и пробелы в одном файле. Вы познакомитесь с этими исключениями более подробно в следующем разделе.

Общие проблемы с синтаксисом

Когда вы впервые сталкиваетесь с + SyntaxError +, полезно знать, почему возникла проблема и что вы можете сделать, чтобы исправить неверный синтаксис в вашем коде Python. В следующих разделах вы увидите некоторые из наиболее распространенных причин, по которым может быть вызвано «+ SyntaxError +», и способы их устранения.

Неправильное использование оператора присваивания (+ = +)

В Python есть несколько случаев, когда вы не можете назначать объекты. Некоторые примеры присваивают литералам и вызовам функций. В приведенном ниже блоке кода вы можете увидеть несколько примеров, которые пытаются это сделать, и получающиеся в результате трассировки + SyntaxError +:

>>>

>>> len('hello') = 5
  File "<stdin>", line 1
SyntaxError: can't assign to function call

>>> 'foo' = 1
  File "<stdin>", line 1
SyntaxError: can't assign to literal

>>> 1 = 'foo'
  File "<stdin>", line 1
SyntaxError: can't assign to literal

Первый пример пытается присвоить значение + 5 + вызову + len () +. Сообщение + SyntaxError + очень полезно в этом случае. Он говорит вам, что вы не можете присвоить значение вызову функции.

Второй и третий примеры пытаются присвоить литералам строку и целое число. То же правило верно и для других литеральных значений. И снова сообщения трассировки указывают, что проблема возникает, когда вы пытаетесь присвоить значение литералу.

*Примечание:* В приведенных выше примерах отсутствует повторяющаяся строка кода и каретка (`+ ^ +`), указывающая на проблему в трассировке. Исключение и обратная трассировка, которые вы видите, будут другими, когда вы находитесь в REPL и пытаетесь выполнить этот код из файла. Если бы этот код был в файле, то вы бы получили повторяющуюся строку кода и указали на проблему, как вы видели в других случаях в этом руководстве.

Вероятно, ваше намерение не состоит в том, чтобы присвоить значение литералу или вызову функции. Например, это может произойти, если вы случайно пропустите дополнительный знак равенства (+ = +), что превратит назначение в сравнение. Сравнение, как вы можете видеть ниже, будет правильным:

>>>

>>> len('hello') == 5
True

В большинстве случаев, когда Python сообщает вам, что вы делаете присвоение чему-то, что не может быть назначено, вы сначала можете проверить, чтобы убедиться, что оператор не должен быть логическим выражением. Вы также можете столкнуться с этой проблемой, когда пытаетесь присвоить значение ключевому слову Python, о котором вы расскажете в следующем разделе.

Неправильное написание, отсутствие или неправильное использование ключевых слов Python

Ключевые слова Python — это набор защищенных слов , которые имеют особое значение в Python. Это слова, которые вы не можете использовать в качестве идентификаторов, переменных или имен функций в своем коде. Они являются частью языка и могут использоваться только в контексте, который допускает Python.

Существует три распространенных способа ошибочного использования ключевых слов:

  1. Неправильное написание ключевое слово

  2. Отсутствует ключевое слово

  3. Неправильное использование ключевого слова

Если вы неправильно написали ключевое слово в своем коде Python, вы получите + SyntaxError +. Например, вот что происходит, если вы пишете ключевое слово + for + неправильно:

>>>

>>> fro i in range(10):
  File "<stdin>", line 1
    fro i in range(10):
        ^
SyntaxError: invalid syntax

Сообщение читается как + SyntaxError: неверный синтаксис +, но это не очень полезно. Трассировка указывает на первое место, где Python может обнаружить, что что-то не так. Чтобы исправить эту ошибку, убедитесь, что все ваши ключевые слова Python написаны правильно.

Другая распространенная проблема с ключевыми словами — это когда вы вообще их пропускаете:

>>>

>>> for i range(10):
  File "<stdin>", line 1
    for i range(10):
              ^
SyntaxError: invalid syntax

Еще раз, сообщение об исключении не очень полезно, но трассировка действительно пытается указать вам правильное направление. Если вы отойдете от каретки, то увидите, что ключевое слово + in + отсутствует в синтаксисе цикла + for +.

Вы также можете неправильно использовать защищенное ключевое слово Python. Помните, что ключевые слова разрешено использовать только в определенных ситуациях. Если вы используете их неправильно, у вас будет неправильный синтаксис в коде Python. Типичным примером этого является использование https://realpython.com/python-for-loop/#the-break-and-continue-statements [+ continue + или + break +] вне цикла. Это может легко произойти во время разработки, когда вы реализуете вещи и когда-то перемещаете логику за пределы цикла:

>>>

>>> names = ['pam', 'jim', 'michael']
>>> if 'jim' in names:
...     print('jim found')
...     break
...
  File "<stdin>", line 3
SyntaxError: 'break' outside loop

>>> if 'jim' in names:
...     print('jim found')
...     continue
...
  File "<stdin>", line 3
SyntaxError: 'continue' not properly in loop

Здесь Python отлично говорит, что именно не так. Сообщения " 'break' вне цикла " и " 'continue' не в цикле должным образом " помогут вам точно определить, что делать. Если бы этот код был в файле, то Python также имел бы курсор, указывающий прямо на неправильно использованное ключевое слово.

Другой пример — если вы пытаетесь назначить ключевое слово Python переменной или использовать ключевое слово для определения функции:

>>>

>>> pass = True
  File "<stdin>", line 1
    pass = True
         ^
SyntaxError: invalid syntax

>>> def pass():
  File "<stdin>", line 1
    def pass():
           ^
SyntaxError: invalid syntax

Когда вы пытаетесь присвоить значение + pass +, или когда вы пытаетесь определить новую функцию с именем + pass +, вы получите ` + SyntaxError + и снова увидеть сообщение + «неверный синтаксис» + `.

Может быть немного сложнее решить этот тип недопустимого синтаксиса в коде Python, потому что код выглядит хорошо снаружи. Если ваш код выглядит хорошо, но вы все еще получаете + SyntaxError +, то вы можете рассмотреть возможность проверки имени переменной или имени функции, которое вы хотите использовать, по списку ключевых слов для версии Python, которую вы используете.

Список защищенных ключевых слов менялся с каждой новой версией Python. Например, в Python 3.6 вы можете использовать + await + в качестве имени переменной или имени функции, но в Python 3.7 это слово было добавлено в список ключевых слов. Теперь, если вы попытаетесь использовать + await + в качестве имени переменной или функции, это вызовет + SyntaxError +, если ваш код для Python 3.7 или более поздней версии.

Другим примером этого является + print +, который отличается в Python 2 от Python 3:

Version print Type Takes A Value

Python 2

keyword

no

Python 3

built-in function

yes

+ print + — это ключевое слово в Python 2, поэтому вы не можете присвоить ему значение. Однако в Python 3 это встроенная функция, которой можно присваивать значения.

Вы можете запустить следующий код, чтобы увидеть список ключевых слов в любой версии Python, которую вы используете:

import keyword
print(keyword.kwlist)

+ keyword + также предоставляет полезную + keyword.iskeyword () +. Если вам просто нужен быстрый способ проверить переменную + pass +, то вы можете использовать следующую однострочную строку:

>>>

>>> import keyword; keyword.iskeyword('pass')
True

Этот код быстро сообщит вам, является ли идентификатор, который вы пытаетесь использовать, ключевым словом или нет.

Отсутствующие скобки, скобки и цитаты

Часто причиной неправильного синтаксиса в коде Python являются пропущенные или несовпадающие закрывающие скобки, скобки или кавычки. Их может быть трудно обнаружить в очень длинных строках вложенных скобок или длинных многострочных блоках. Вы можете найти несоответствующие или пропущенные кавычки с помощью обратных трассировок Python:

>>>

>>> message = 'don't'
  File "<stdin>", line 1
    message = 'don't'
                   ^
SyntaxError: invalid syntax

Здесь трассировка указывает на неверный код, где после закрывающей одинарной кавычки стоит + t '+. Чтобы это исправить, вы можете сделать одно из двух изменений:

  1. Escape одиночная кавычка с обратной косой чертой (+ 'don ' t '+)

  2. Окружить всю строку в двойных кавычках (" не ")

Другая распространенная ошибка — забыть закрыть строку. Как для строк с двойными, так и с одинарными кавычками ситуация и обратная трассировка одинаковы:

>>>

>>> message = "This is an unclosed string
  File "<stdin>", line 1
    message = "This is an unclosed string
                                        ^
SyntaxError: EOL while scanning string literal

На этот раз каретка в трассировке указывает прямо на код проблемы. Сообщение + SyntaxError +, " EOL при сканировании строкового литерала ", немного более конкретно и полезно при определении проблемы. Это означает, что интерпретатор Python дошел до конца строки (EOL) до закрытия открытой строки. Чтобы это исправить, закройте строку с кавычкой, которая совпадает с той, которую вы использовали для ее запуска. В этом случае это будет двойная кавычка (`+» + `).

Кавычки, отсутствующие в инструкциях внутри f-string, также могут привести к неверному синтаксису в Python:

 1 # theofficefacts.py
 2 ages = {
 3     'pam': 24,
 4     'jim': 24,
 5     'michael': 43
 6 }
 7 print(f'Michael is {ages["michael]} years old.')

Здесь, ссылка на словарь + ages + внутри напечатанной f-строки пропускает закрывающую двойную кавычку из ссылки на ключ. Итоговая трассировка выглядит следующим образом:

$ python theofficefacts.py
  File "theofficefacts.py", line 7
    print(f'Michael is {ages["michael]} years old.')
         ^
SyntaxError: f-string: unterminated string

Python идентифицирует проблему и сообщает, что она существует внутри f-строки. Сообщение " неопределенная строка " также указывает на проблему. Каретка в этом случае указывает только на начало струны.

Это может быть не так полезно, как когда каретка указывает на проблемную область струны, но она сужает область поиска. Где-то внутри этой f-строки есть неопределенная строка. Вы просто должны узнать где. Чтобы решить эту проблему, убедитесь, что присутствуют все внутренние кавычки и скобки f-строки.

Ситуация в основном отсутствует в скобках и скобках. Например, если вы исключите закрывающую квадратную скобку из списка, Python обнаружит это и укажет на это. Однако есть несколько вариантов этого. Первый — оставить закрывающую скобку вне списка:

# missing.py
def foo():
    return [1, 2, 3

print(foo())

Когда вы запустите этот код, вам скажут, что есть проблема с вызовом + print () +:

$ python missing.py
  File "missing.py", line 5
    print(foo())
        ^
SyntaxError: invalid syntax

Здесь происходит то, что Python думает, что список содержит три элемента: + 1 +, + 2 + и +3 print (foo ()) +. Python использует whitespace для логической группировки вещей, и потому что нет запятой или скобки, отделяющей + 3 + от `+ print (foo ()) + `, Python объединяет их вместе как третий элемент списка.

Еще один вариант — добавить запятую после последнего элемента в списке, оставляя при этом закрывающую квадратную скобку:

# missing.py
def foo():
    return [1, 2, 3,

print(foo())

Теперь вы получаете другую трассировку:

$ python missing.py
  File "missing.py", line 6

                ^
SyntaxError: unexpected EOF while parsing

В предыдущем примере + 3 + и + print (foo ()) + были объединены в один элемент, но здесь вы видите запятую, разделяющую два. Теперь вызов + print (foo ()) + добавляется в качестве четвертого элемента списка, и Python достигает конца файла без закрывающей скобки. В трассировке говорится, что Python дошел до конца файла (EOF), но ожидал чего-то другого.

В этом примере Python ожидал закрывающую скобку (+] +), но повторяющаяся строка и каретка не очень помогают. Отсутствующие круглые скобки и скобки сложно определить Python. Иногда единственное, что вы можете сделать, это начать с каретки и двигаться назад, пока вы не сможете определить, чего не хватает или что нет.

Ошибочный синтаксис словаря

Вы видели ссылку: # syntaxerror-exception-and-traceback [ранее], чтобы вы могли получить + SyntaxError +, если не указывать запятую в словарном элементе. Другая форма недопустимого синтаксиса в словарях Python — это использование знака равенства (+ = +) для разделения ключей и значений вместо двоеточия:

>>>

>>> ages = {'pam'=24}
  File "<stdin>", line 1
    ages = {'pam'=24}
                 ^
SyntaxError: invalid syntax

Еще раз, это сообщение об ошибке не очень полезно. Повторная линия и каретка, однако, очень полезны! Они указывают прямо на характер проблемы.

Этот тип проблемы распространен, если вы путаете синтаксис Python с синтаксисом других языков программирования. Вы также увидите это, если перепутаете определение словаря с вызовом + dict () +. Чтобы это исправить, вы можете заменить знак равенства двоеточием. Вы также можете переключиться на использование + dict () +:

>>>

>>> ages = dict(pam=24)
>>> ages
{'pam': 24}

Вы можете использовать + dict () + для определения словаря, если этот синтаксис более полезен.

Использование неправильного отступа

Существует два подкласса + SyntaxError +, которые конкретно занимаются проблемами отступов:

  1. + + IndentationError

  2. + + TabError

В то время как другие языки программирования используют фигурные скобки для обозначения блоков кода, Python использует whitespace. Это означает, что Python ожидает, что пробелы в вашем коде будут вести себя предсказуемо. Он вызовет + IndentationError + , если в блоке кода есть строка с неправильным количеством пробелов:

 1 # indentation.py
 2 def foo():
 3     for i in range(10):
 4         print(i)
 5   print('done')
 6
 7 foo()

Это может быть сложно увидеть, но в строке 5 есть только два пробела с отступом. Он должен соответствовать выражению цикла + for +, которое на 4 пробела больше. К счастью, Python может легко определить это и быстро расскажет вам, в чем проблема.

Здесь также есть некоторая двусмысленность. Является ли строка + print ('done') + after циклом + for + или inside блоком цикла + for +? Когда вы запустите приведенный выше код, вы увидите следующую ошибку:

$ python indentation.py
  File "indentation.py", line 5
    print('done')
                ^
IndentationError: unindent does not match any outer indentation level

Хотя трассировка выглядит во многом как трассировка + SyntaxError +, на самом деле это + IndentationError +. Сообщение об ошибке также очень полезно. Он говорит вам, что уровень отступа строки не соответствует ни одному другому уровню отступа. Другими словами, + print ('done') + это отступ с двумя пробелами, но Python не может найти любую другую строку кода, соответствующую этому уровню отступа. Вы можете быстро это исправить, убедившись, что код соответствует ожидаемому уровню отступа.

Другой тип + SyntaxError + — это + TabError + , который вы будете видеть всякий раз, когда есть строка, содержащая либо табуляцию, либо пробелы для отступа, в то время как остальная часть файла содержит другую. Это может скрыться, пока Python не покажет это вам!

Если размер вкладки равен ширине пробелов на каждом уровне отступа, то может показаться, что все строки находятся на одном уровне. Однако, если одна строка имеет отступ с использованием пробелов, а другая — с помощью табуляции, Python укажет на это как на проблему:

 1 # indentation.py
 2 def foo():
 3     for i in range(10):
 4         print(i)
 5     print('done')
 6
 7 foo()

Здесь строка 5 имеет отступ вместо 4 пробелов. Этот блок кода может выглядеть идеально для вас, или он может выглядеть совершенно неправильно, в зависимости от настроек вашей системы.

Python, однако, сразу заметит проблему. Но прежде чем запускать код, чтобы увидеть, что Python скажет вам, что это неправильно, вам может быть полезно посмотреть пример того, как код выглядит при различных настройках ширины вкладки:

$ tabs 4 # Sets the shell tab width to 4 spaces
$ cat -n indentation.py
     1   # indentation.py
     2   def foo():
     3       for i in range(10)
     4           print(i)
     5       print('done')
     6
     7   foo()

$ tabs 8 # Sets the shell tab width to 8 spaces (standard)
$ cat -n indentation.py
     1   # indentation.py
     2   def foo():
     3       for i in range(10)
     4           print(i)
     5           print('done')
     6
     7   foo()

$ tabs 3 # Sets the shell tab width to 3 spaces
$ cat -n indentation.py
     1   # indentation.py
     2   def foo():
     3       for i in range(10)
     4           print(i)
     5      print('done')
     6
     7   foo()

Обратите внимание на разницу в отображении между тремя примерами выше. Большая часть кода использует 4 пробела для каждого уровня отступа, но строка 5 использует одну вкладку во всех трех примерах. Ширина вкладки изменяется в зависимости от настройки tab width :

  • Если ширина вкладки равна 4 , то оператор + print + будет выглядеть так, как будто он находится вне цикла + for +. Консоль выведет + 'done' + в конце цикла.

  • Если ширина табуляции равна 8 , что является стандартным для многих систем, то оператор + print + будет выглядеть так, как будто он находится внутри цикла + for +. Консоль будет печатать + 'done' + после каждого числа.

  • Если ширина табуляции равна 3 , то оператор + print + выглядит неуместно. В этом случае строка 5 не соответствует ни одному уровню отступа.

Когда вы запустите код, вы получите следующую ошибку и трассировку:

$ python indentation.py
  File "indentation.py", line 5
    print('done')
                ^
TabError: inconsistent use of tabs and spaces in indentation

Обратите внимание на + TabError + вместо обычного + SyntaxError +. Python указывает на проблемную строку и дает вам полезное сообщение об ошибке. Это ясно говорит о том, что в одном и том же файле для отступа используется смесь вкладок и пробелов.

Решение этой проблемы состоит в том, чтобы все строки в одном и том же файле кода Python использовали либо табуляции, либо пробелы, но не обе. Для приведенных выше блоков кода исправление будет состоять в том, чтобы удалить вкладку и заменить ее на 4 пробела, которые будут печатать + 'done' + после завершения цикла + for +.

Определение и вызов функций

Вы можете столкнуться с неверным синтаксисом в Python, когда вы определяете или вызываете функции. Например, вы увидите + SyntaxError +, если будете использовать точку с запятой вместо двоеточия в конце определения функции:

>>>

>>> def fun();
  File "<stdin>", line 1
    def fun();
             ^
SyntaxError: invalid syntax

Трассировка здесь очень полезна, с помощью каретки, указывающей прямо на символ проблемы. Вы можете очистить этот неверный синтаксис в Python, отключив точку с запятой для двоеточия.

Кроме того, ключевые аргументы как в определениях функций, так и в вызовах функций должны быть в правильном порядке. Аргументы ключевых слов always идут после позиционных аргументов. Отказ от использования этого порядка приведет к + SyntaxError +:

>>>

>>> def fun(a, b):
...     print(a, b)
...
>>> fun(a=1, 2)
  File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument

Здесь, еще раз, сообщение об ошибке очень полезно, чтобы рассказать вам точно, что не так со строкой.

Изменение версий Python

Иногда код, который прекрасно работает в одной версии Python, ломается в более новой версии. Это связано с официальными изменениями в синтаксисе языка. Наиболее известным примером этого является оператор + print +, который перешел от ключевого слова в Python 2 к встроенной функции в Python 3:

>>>

>>> # Valid Python 2 syntax that fails in Python 3
>>> print 'hello'
  File "<stdin>", line 1
    print 'hello'
                ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print('hello')?

Это один из примеров, где появляется сообщение об ошибке, сопровождающее + SyntaxError +! Он не только сообщает вам, что в вызове + print + отсутствует скобка, но также предоставляет правильный код, который поможет вам исправить оператор.

Другая проблема, с которой вы можете столкнуться, — это когда вы читаете или изучаете синтаксис, который является допустимым синтаксисом в более новой версии Python, но недопустим в той версии, в которую вы пишете. Примером этого является синтаксис f-string, которого нет в версиях Python до 3.6:

>>>

>>> # Any version of python before 3.6 including 2.7
>>> w ='world'
>>> print(f'hello, {w}')
  File "<stdin>", line 1
    print(f'hello, {w}')
                      ^
SyntaxError: invalid syntax

В версиях Python до 3.6 интерпретатор ничего не знает о синтаксисе f-строки и просто предоставляет общее сообщение «» неверный синтаксис «`. Проблема, в данном случае, в том, что код looks прекрасно работает, но он был запущен с более старой версией Python. В случае сомнений перепроверьте, какая версия Python у вас установлена!

Синтаксис Python продолжает развиваться, и в Python 3.8 появилось несколько интересных новых функций:

  • Walrus оператор (выражения присваивания)

  • F-string синтаксис для отладки
    *https://docs.python.org/3.8/whatsnew/3.8.html#positional-only-parameters[Positional-only arguments]

Если вы хотите опробовать некоторые из этих новых функций, то вам нужно убедиться, что вы работаете в среде Python 3.8. В противном случае вы получите + SyntaxError +.

Python 3.8 также предоставляет новый* + SyntaxWarning + *. Вы увидите это предупреждение в ситуациях, когда синтаксис допустим, но все еще выглядит подозрительно. Примером этого может быть отсутствие запятой между двумя кортежами в списке. Это будет действительный синтаксис в версиях Python до 3.8, но код вызовет + TypeError +, потому что кортеж не может быть вызван:

>>>

>>> [(1,2)(2,3)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object is not callable

Этот + TypeError + означает, что вы не можете вызывать кортеж, подобный функции, что, как думает интерпретатор Python, вы делаете.

В Python 3.8 этот код все еще вызывает + TypeError +, но теперь вы также увидите + SyntaxWarning +, который указывает, как вы можете решить проблему:

>>>

>>> [(1,2)(2,3)]
<stdin>:1: SyntaxWarning: 'tuple' object is not callable; perhaps you missed a comma?
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object is not callable

Полезное сообщение, сопровождающее новый + SyntaxWarning +, даже дает подсказку (" возможно, вы пропустили запятую? "), Чтобы указать вам правильное направление!

Заключение

В этом руководстве вы увидели, какую информацию предоставляет обратная связь + SyntaxError +. Вы также видели много распространенных примеров неправильного синтаксиса в Python и каковы решения этих проблем. Это не только ускорит ваш рабочий процесс, но и сделает вас более полезным рецензентом кода!

Когда вы пишете код, попробуйте использовать IDE, который понимает синтаксис Python и предоставляет обратную связь. Если вы поместите многие из недопустимых примеров кода Python из этого руководства в хорошую IDE, то они должны выделить проблемные строки, прежде чем вы даже сможете выполнить свой код.

Получение + SyntaxError + во время изучения Python может быть неприятным, но теперь вы знаете, как понимать сообщения трассировки и с какими формами недопустимого синтаксиса в Python вы можете столкнуться. В следующий раз, когда вы получите + SyntaxError +, у вас будет больше возможностей быстро решить проблему!

У меня есть файл, который содержит произвольное количество строк кода c++, каждая строка которого является автономной (что означает, что она сама по себе действительна в основной функции). Тем не менее, я не знаю, сколько строк if будет иметь синтаксис c++. Пример файла может быть

int length, width; // This one is fine
template <class T className {}; // Throws a syntax error

То, что я хочу сделать, это записать во второй файл все строки с допустимым синтаксисом. В настоящее время я написал программу на python, которая читает каждую строку, помещает ее в следующую форму

int main() {
// Line goes here
return 0;
}

и пытается скомпилировать его, возвращая True, если компиляция завершается успешно, а False — если нет, которую я затем использую, чтобы определить, какие строки писать в выходной файл. Например, первая строка будет генерировать файл, содержащий

int main() {
int length, width;
return 0;
}

который скомпилировал бы штраф и вернул бы True в программу python. Тем не менее, мне любопытно, есть ли какой-либо синтаксис try-catch, который работает с компилятором, чтобы я мог поместить каждую строку файла в блок try-catch и записать его на вывод, если не было выбрано исключение, или если есть способ, которым я могу сказать компилятору игнорировать синтаксические ошибки.

Редактировать: меня спрашивали о том, зачем мне это нужно, и я буду первым, кто признает это странным вопросом. Причина, по которой я делаю это, состоит в том, что у меня есть другая программа (из которой я не знаю всех деталей реализации), которая записывает большое количество строк в файл, каждый из которых должен быть в состоянии самостоятельно. Я также знаю, что эта программа почти наверняка будет писать строки с синтаксическими ошибками. То, что я пытаюсь сделать, это написать программу, которая удалит любые недопустимые строки, чтобы полученный файл мог компилироваться без ошибок. То, что у меня есть в моей программе python, сейчас работает, но я пытаюсь выяснить, есть ли более простой способ сделать это.

Редактировать 2: Хотя я думаю, что у меня есть мой ответ — что я не могу играть в try-catch с компилятором, и это достаточно хорошо. Всем спасибо!

3 / 3 / 0

Регистрация: 07.05.2012

Сообщений: 54

1

Необходимо найти ошибки

18.10.2016, 18:46. Показов 3504. Ответов 1


Прошу не осуждать, я в этом деле новичок. Очень надеюсь на ваш отклик.
1.Укажите строки, где содержатся ошибки в приведенном ниже описании функции length(w), которая должна определять количество элементов в текстовом файле w.

Pascal
1
2
3
4
5
6
    function length(w: text): integer;  
    var k: integer; c: char;    
    begin reset(w); k:=0;   
    repeat read(w, c); k:=k+1 until eof(w);     
    length:=k;  
    close(w) end;

2.Даны следующие описания в начале некоторой программы. Укажите строки, содержащие ошибки.

Pascal
1
2
3
4
5
6
7
8
    const n = 50;   
    type words = array [0..n-1] of letter;  
    letter = 'a'..'z';  
    vector = array [real] of integer;   
    digits = array [true..false] of (1, 2, 3, 4);   
    var k: 1..maxint;   
    x: array [1..k] of char;    
    y: array [(a, b, c)] of boolean;

3.

Pascal
1
2
3
var c, d: integer;
procedure R(var x, y: integer);
begin y:=x+1 end;

Укажите, какие вызовы процедуры ошибочны.

Pascal
1
2
3
4
    R(sqr(c)+c, d)  
    R(c, 1)     
    R(c, d)     
    R(5, 6)

4.Укажите строки с ошибками в следующем фрагменте программы.

Pascal
1
2
3
4
5
6
var k, i: integer;
…
    k:=0;   
    for i:=1 to 9 div 2 do  
    k:=k+i*sqrt(256);   
    k:=k*sqr(i);

5.

Pascal
1
var p, q: ^integer; r: ^char;

Какие из следующих операторов неправильные?

Pascal
1
2
3
4
5
6
    r^:=p^;     
    q^:=ord(r^);    
    if r<>nil then r^:=nil^;    
    if q>nil then q^:=p^;   
    if q=p then write(q);   
    if q<>r then read(r^);

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



When there’s an error in a SEDE query, you just get the error message.

Incorrect syntax near ‘*’.

This can leave me guessing as to which one of the * in my query is causing the error.

SSMS seems to be able to give me a line number, so I guess SQL Server is able to provide this info.

Msg 102, Level 15, State 1, Line 4
Incorrect syntax near ‘5’.

Can this be added?

animuson's user avatar

animusonStaffMod

187k37 gold badges556 silver badges833 bronze badges

asked Sep 19, 2014 at 15:37

Stijn's user avatar

8

I fully agree with this feature request, but meanwhile, I found a workaround: use the developer tools of your browser to inspect the XHRs. The JSON response from the server does contain the line number:

screenshot of browser with developer tools

answered Jul 24, 2016 at 13:47

Glorfindel's user avatar

GlorfindelModGlorfindel

235k58 gold badges576 silver badges1196 bronze badges

I’ve created this pull request that adds the linenumber in front of the error message when the linenumber is present in the response payload.

Do note that the linenumber is as «accurate» as it would be if you run the sql script in SQL Server Management Studio. That accuracy won’t get improved/fixed.

Pull Requests have been been reviewed and approved by SE devs. This is now deployed and live in rev 2020.12.13.80.

answered Sep 6, 2020 at 20:59

rene's user avatar

renerene

83.7k16 gold badges219 silver badges463 bronze badges

You must log in to answer this question.

Not the answer you’re looking for? Browse other questions tagged

.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Укажите сообщение об ошибке которую выдает табличный процессор excel при делении на нуль
  • Укажите слово образованное способом сложения ошибка молоко виолончель сталевар