Что-то, по-моему, без массивиов это невозможно... Хотя бы потому, что нам надо где-то хранить саму нашу последовательность...
хмммм.... максимальных чисел??? Это как??? Их много чтоль... и в чем фишка??? Code: char str[100]; // если контроль ввода то масив под //строку символов должен существовать АКСИОМА! char rez[100]; //строка для вывода результата char smb; int schetchik=0; int index=0; int max=0; ex=0; while(ex==0) { -->ввод символа в smb метод ввода твой на выбор switch(smb) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': str[index]=smb; index++ break; // case ' ': можно разремировать эти строки но тогда // case ',': нужно увеличивать размер под буфер ввода str // но позволит использовать пробел и запятую // как разделители между числами case 0x0d: str[index]=0; if(strlen(str)>0) { if(atoi(str)==max) { strcat(rez,itoa(schetchik,rez+80,10)); strcat(rez," "); } else if(atoi(str)>max) { max=atoi(str); strcpy(rez,itoa(schetchik,rez+80,10)); strcat(rez," "); } schetchik++; if(atoi(str)==0) ex=1; } index=0; } } printf("%s",rez); ЧИСЛО СЧИТАЕТСЯ ВВЕДЕННЫМ ЕСЛИ НАЖАТ ЭНТЕР! (или так же запятая и пробел если разремируешь и хотя бы сделаешь str[1000]
спасибо, но я уже написал используя основы De-visible получилось примерно так Code: Program Kontra2; Uses crt; type mas= array[1..100] of integer;{массив который мы будем анализировать} var i,Nmax,menu,n:integer; A:Mas; f:boolean; Procedure vvod( var A:Mas; var n:integer; var f:boolean); {Ввод массива} Var I: integer; Begin writeln('Сколько элементов массива? '); readln(n); for I:=1 to n do Begin Write('Введите элемент # ',i,' '); Readln(A[i]); end; f:=true; end; function max(A:mas; n:integer):integer; var i:integer; buff:integer; Begin buff:=A[1]; For i:=1 to n Do If A[i]>buff then buff:=A[i]; max:=buff; End; procedure zamena(var A:mas; var n:integer; var max:integer); var i:integer; Begin For i:=1 to n Do Begin If A[i]>0 then If (A[i] mod 5) = 0 then A[i]:=max; End; End; procedure randmas(var A:mas; var n:integer; var f:boolean); {создание случайного массива} var i:integer; begin i:=1; write('из скольки элементов хотите массив? '); readln(n); for i:=1 to n do begin A[i]:=random(200); end; f:=true; end; Procedure Vuvod( A:Mas; var n:integer); {Вiвод массива} Var I: integer; Begin for I:=1 to n do Begin Write(A[i],' '); end; writeln; end; Begin f:=false; randomize; while true do Begin clrscr; {ввожу массивы} writeln('1. Ввод массива целых чисел'); writeln('2. Вывод массива случайных целых чисел'); writeln('3 Найти максимальный элемент'); writeln(' Заменить все положительные элементы кратные 5 на максимальный'); writeln('4. Завершить работу'); write('Ваш выбор: '); readln(menu); case menu of 1: begin vvod(A,n,f); readln; end; 2: begin randmas(A,n,f); vuvod(A,n); readln; end; 3: begin vuvod(A,n); Nmax:=max(A,n); zamena(A,n,Nmax); vuvod(A,n); readln; end; 4: break; else writeln('!!!ВЫБЕРИТЕ ВЕРHЫЙ ПУHКТ МЕHЮ (1-4)!!!'); readln; end; end; end. De-visible:А он не твою задачу решал....Он решил задачу для Stern.
Можно было и с массивами,преподу на ето пох))))) Delimiter а тебе +++++ от меня))))))) ещё подкину задачку Нужна прога по переводу чисел из 2,8,10,16 систем счисления и обратно...что то типа этого http://rapidshare.com/files/111430028/perev.exe.html Так же на С или С++ ))))))))))))
Код на языке C, преобразующий число из одной системы счисления в другую (а не только 2, 8, 10, 16). Принимает в качестве аргументов число (целое положительное), его систему счисления и систему счисления, в которую надо преобразовать. Сорри, лень оптимизить =) Code: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define MAXSIZE 255 char *ReverseStr (char *s) { int i = 0, j, len; char s2 [MAXSIZE]; len = strlen (s); j = len - 1; bzero (s2, len + 1); while (j >= 0) { s2 [i++] = s [j--]; //i++; //j--; } return s2; } int convertToDec (char *in, int in_ss) { int len = strlen (in), i, j = 0; int N = 0; i = len - 1; printf ("i = %d\n", i); while (i >= 0) { if ((in [i] >= '0') && (in [i] <= '9')) in [i] -= 0x30; if ((in [i] >= 'a') && (in [i] <= 'f')) in [i] -= 0x57; N += in [i] * (int) (pow (in_ss, j)); i--; j++; } //printf ("%d\n", N); return N; } char *convert (int number, int out_ss) { int ost = 1, i = 0; char out_num [MAXSIZE]; memset (out_num, '\0', MAXSIZE); while (number >= out_ss) { ost = number % out_ss; number = (int) (number / out_ss); if ((ost >= 0) && (ost <= 9)) out_num [i] = ost + 0x30; else if ((ost >= 10) && (ost <= 15)) out_num [i] = ost + 0x57; if (number < out_ss) { i++; if ((number >= 0) && (number <= 9)) out_num [i] = number + 0x30; if ((number >= 10) && (number <= 15)) out_num [i] = number + 0x57; //out_num [i] = number + 0x30; } //printf ("Number: %d\tOst: %d\n", number, ost); i++; } //printf ("Out: %s\n", ReverseStr (out_num)); return ReverseStr (out_num); } int main (int argc, char** argv) { char *in_number, *out_number; int in_system, out_system, dec_number; if (argc != 4) { printf ("Usage: %s [number input_system output_system]\n", argv [0]); return 0; } in_number = argv [1]; in_system = atoi (argv [2]); out_system = atoi (argv [3]); if (in_system == 10) dec_number = atoi (in_number); else dec_number = convertToDec (in_number, in_system); //printf ("DEC: %d\n", dec_number); printf ("Input number: %s\n", in_number); printf ("Input system: %d\n", in_system); printf ("Output system: %d\n", out_system); printf ("Output number: "); if (out_system != 10) { out_number = convert (dec_number, out_system); printf ("%s\n", out_number); } else printf ("%d\n", dec_number); return 0; } ЗЫ. Давно хотел этот код написать, да руки все не доходили.
2 krypt3r .... а вдрух ему было достаточно unsigned long l=strtoul(str,0,base1); ultoa(l,str,base2); ??? Я БАЮСЬ ТАКИФ ЗАДАЧ!
Я с этими функциями раньше не работал, так что писал то, что в голове было. За подсказку сенкс. /me ушел читать маны
Pascal Помогите исправить программу, есть такое задание: Поменять местами первый и последний, второй и предпоследний и т.д. столбцы исходной матрицы. (матрица вида 6*6) Вот что у меня получилось, но мне нужно чтобы она автоматически меняла местами столбцы (первый - последний, второй-предпоседний, ...), а она просит ввода с клавиатуры номеров столбцов, хотя я этого вроде не задавал. Code: program pr7; uses crt; const n=6; m=6; a:array[1..n,1..m] of real=((0,2,1,2,5,6), (4,5,7,8,1,8), (0,6,2,3,3,4), (5,6,1,9,7,1), (1,2,3,4,5,6), (6,5,4,3,2,1)); var i,j,k:integer; u:real; begin clrscr; read(i,j); clrscr; for k:=1 to n do begin u:=a[k,j]; a[k,j]:=a[k,i];a[k,i]:=u; end; for j:=1 to n do begin for i:=1 to m do write(a[j,i]:3:0); writeln; end; readkey; end.
а как изменить её чтобы автоматически меняла столбцы? И ещё вопрос, как упорядочить побочную диагональ у этой матрицы по возрастанию? Я написал: Code: for i:=1 to n do begin pd:=a[i,n-i+1]; writeln(pd:3:0); end А как переставить её значения по-возрастанию не понимаю.
Торопился код может быть корявым! Important: Код писался именно для этого случая! Code: program pr7; uses crt; const n=6; m=6; a:array[1..n,1..m] of integer=((0,2,1,2,5,6), (4,5,7,8,1,8), (0,6,2,3,3,4), (5,6,1,9,7,1), (1,2,3,4,5,6), (6,5,4,3,2,1)); var i,j,k:integer; Begin For i:=1 to n Do Begin For j:=1 to m DO write(a[i,j],' '); writeln; end; For i:=1 to n Do Begin For j:=0 to m-1 Do Begin If j<3 then Begin k:=a[i,j+1]; a[i,j+1]:=a[i,n-j]; a[i,m-j]:=k; end; end; end; writeln; writeln; For i:=1 to n Do Begin For j:=1 to m DO write(a[i,j],' '); writeln; end; readln; end. "Автоматически" меняет местами столбцы! ============= Как упорядочить думаю догодаешься! Но если будут сложности, я помогу, только чуть позже!
Не коверкай рiдну мову... Если кто-то из русскоговорящих возметься: дано n (1<n<=100) точка на площади координат (xi, yi) (i=1,n). Точки образуют многоугольник з n углами и n сторонами. Исходные данные Определить: a) Средняя арифметичная длина стороны многоугольника b) Количество номеров сторон, что пересекают ось координат p.s. за бесплатно врядле кто возметься...
Сейчас накатал, возможны косяки, проверить нет возможности. PS: на плюсы перевести думаю справишься.. Code: #include <stdio.h> #include <math.h> void main(void) { unsigned int x_point[100], y_point[100]; int lenght = 0, amount = 0; for (int i = 0; i < 100; i++) { printf("point %d: enter xi\n", i + 1); scanf("%d", &x_point[i]); printf("point %d: enter yi\n", i + 1); scanf("%d", &y_point[i]); } for (int i = 0; i < 99; i++) { if (x_point[i] > 0 && x_point[i + 1] < 0) amount++; if (x_point[i] < 0 && x_point[i + 1] > 0) amount++; if (y_point[i] > 0 && y_point[i + 1] < 0) amount++; if (x_point[i] < 0 && x_point[i + 1] > 0) amount++; lenght += sqrt(abs(x_point[i + 1] - x_point[i]) * abs(x_point[i + 1] - x_point[i]) + abs(y_point[i + 1] - y_point[i]) * abs(y_point[i + 1] - y_point[i])); } printf("amount: %d", amount); printf("lenght: %d", lenght / 100); return; }
помогите с задачай по текстовым файлам (ПАСКАЛЬ) Дан файл, содержащий текст и арифметические выражения вида а®b, где ® — один из знаков +, —, *, /. Выписать все арифметические выражения и вычислить их значения. з.ы. почему мою тему удалили De-visible:Правильный ответ уже прозвучал! http://forum.antichat.ru/showpost.php?p=675710&postcount=481
Помогите найти ошибку в коде: Code: typedef struct ip_header { UCHAR iph_verlen; UCHAR iph_tos; USHORT iph_length; USHORT iph_id; USHORT iph_offset; UCHAR iph_ttl; UCHAR iph_protocol; USHORT iph_xsum; ULONG iph_src; ULONG iph_dest; } IPHeader; Заполняю ИП заголовок: Code: ip_hd->iph_verlen = 0x45; ip_hd->iph_tos = 0x01; ip_hd->iph_length = htons(40); ip_hd->iph_id = htons(0x0800); ip_hd->iph_offset = 0x0; ip_hd->iph_ttl = 0xff; ip_hd->iph_protocol = 0x06; ip_hd->iph_xsum = 0x00; ip_hd->iph_dest = inet_addr("192.168.0.1"); При заполнение вылетает экзепшн(Access violation). Не могу понять почему происходит...
Ну тогда попробуй так: Code: program qwer; var s:string; a:char; infile,outfile:text; n,m,c,i:integer; begin assign(infile,'input.txt'); assign(outfile,'output.txt'); reset(infile); rewrite(outfile); repeat readln(infile,s); for i:=1 to length(s) do begin a:=s[i]; case a of '+':begin val(Copy(s,1, i-1),m,c); val(Copy(s,i+1,length(s)-i),n,c); write(outfile,s+'='); writeln(outfile,m+n); end; '-':begin val(Copy(s,1, i-1),m,c); val(Copy(s,i+1,length(s)-i),n,c); write(outfile,s+'='); writeln(outfile,m-n); end ; '*':begin val(Copy(s,1, i-1),m,c); val(Copy(s,i+1,length(s)-i),n,c); write(outfile,s+'='); writeln(outfile,m*n); end ; '/':begin val(Copy(s,1, i-1),m,c); val(Copy(s,i+1,length(s)-i),n,c); write(outfile,s+'='); writeln(outfile,m/n:8:2); end ; end; end; n:=0; m:=0; until eof(infile); close(outfile); close(infile); end.
помгите с двумя задачками плиз 1) через процедуры: Составить программу для нахождения чисел из интервала [M, N], имеющих наибольшее количество делителей. 2) через функции: Дано: натуральное n, целые неотрицательные a1, …, an. Рассмотреть отрезки последовательности a1, …, an (подпоследовательности идущих подряд членов), состоящей полных квадратов. Для проверки использовать функцию primer(a), описанную таким образом, что .............1, если a – полный квадрат, primer= .............0, в противном случае. De-visible: Реализация на Паскаль... В следующий раз, не забывайте указать язык программирования, здесь нет телепатов
Catsy, первая задача Code: program deliteli; {Составить программу для нахождения чисел из интервала [M, N], имеющих наибольшее количество делителей.} procedure GetCount (x : integer; var count : integer); {Подсчет кол-ва делителей для каждого числа} var i, j : integer; begin i := 2; count := 0; j := x div 2; while (i <= j) do begin if x mod i = 0 then begin write (i, ' '); inc (count); x := x div i; end else inc (i); end; writeln; end; procedure PrintNumbers (x, y : array of integer; count, index : integer); var i : integer; begin for i := 0 to count - 1 do if y [i] = index then writeln (x [i]); end; var n1, n2, i, j, count, max : integer; {Первое, последнее число, счетчики цикла, кол-во делителей, максимальное кол-во делителей} numbers : array [1..255] of integer; {Массив для чисел} del_count : array [1..255] of integer; {Массив для количества делителей каждого числа} begin write ('Введите первое число n1: '); readln (n1); write ('Введите последнее число n2: '); readln (n2); count := 0; max := 0; j := 1; for i := n1 to n2 do begin numbers [j] := i; write ('Делители числа ', i, ': '); GetCount (i, count); del_count [j] := count; if count > max then max := count; writeln ('Количество: ', count); inc (j); end; writeln ('Максимальное число делителей: ', max); writeln ('Числа, имеющие наибольшее кол-во делителей'); PrintNumbers (numbers, del_count, n2 - n1 + 1, max); end. Условие второй как-то не совсем понял